使用 PHP 生成 PDF 文件(包括 PNG 图像)

Posted

技术标签:

【中文标题】使用 PHP 生成 PDF 文件(包括 PNG 图像)【英文标题】:Generate a PDF file (include PNG image) with PHP 【发布时间】:2012-07-18 13:43:51 【问题描述】:

问题:需要把从textarea中得到的base64编码PNG图片,用php转换成PNG图片(扩展名为.png-image.png的二进制文件)并将图片存储在服务器。然后借助 PHP 和 FPDF 类生成 PDF 文件(example1.pdf),插入之前保存的 PNG 图像。生成的 PDF 文件也存储在服务器上。

这里是文件createPdfFromBase64.php,我已经翻过了:

<?php
    #header('Content-Type: image/png');

    $base64 = $_POST['base64']; // Получаем base64 код PNG изображения из <textarea id="base64" name="base64"></textarea>

    #echo("$base64");

    $base64 = str_replace(' ','+',$base64); // If you want to save data that is derived from a javascript canvas.toDataURL() function, you have to convert blanks into plusses. If you do not do that, the decoded data is corrupted.

    $data = base64_decode($base64); // Декодирует данные base64 и записывает их в переменную $data

    echo("$data");

    $filename = "image.png";

    // Пишем содержимое в файл image.png
    file_put_contents($filename, $data); // Сохраняем изображение image.png на сервере

    // Подключаем класс FPDF, для генерации PDF документа
    require('/home/u552896297/public_html/FPDF/fpdf.php');

    // Создаем FPDF объект
    $pdf= new FPDF();

    // Устанавливаем свойства документа
    $pdf->SetAuthor('Evgeniy Privalov'); // Устанавливаем автора PDF документа.
    $pdf->SetTitle('PDF generator'); // Устанавливаем title PDF документа.

    // Настройки страницы. Теперь когда главное сделано, приступим к созданию страницы.
    $pdf->AddPage('P'); // Книжная ориентация страницы
    $pdf->SetDisplayMode('real','default'); //Функция SetDisplayMode определяет как будет отображена страница. Вы можете определить параметры увеличения и разметки. В примере мы используем 100% увеличение и разметку по умолчанию, определенную в программе, используемой для просмотра.

    // Вставляем PNG картинку в верхний левый угол с разрешением в 300 точек на дюйм (300dpi)
    $pdf->Image('image.png', 10, 10, -300);

    // В конце мы выведем наш результат используя функцию Output
    $pdf->Output('example1.pdf', 'F'); // Здесь мы указали имя файла и параметр вывода, в данном случае "F". "F"-параметр сохранит результат в файл example1.pdf
?>

index.html 文件在这里 - http://print-online.16mb.com/。必须先按“保存名片”(“Сохранить визитку”)然后点击“转换为PDF”(“Конвертировать в PDF”)。

但是在生成PDF的时候,报错FPDF error: Not a PNG file: image.png

请帮我解决问题!

UPD: image.png 文件在服务器上创建,但它不会出现在您的浏览器中! http://print-online.16mb.com/image.png

【问题讨论】:

您链接到的 PNG 文件不是有效的 PNG 文件。它是如何生成的? 从 base64 数据:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAgAElEQ... 使用 PHP 函数 base64_decode() 然后写入文件:file_put_contents($filename, $data); 【参考方案1】:

很明显,上传或之后您的编辑出了点问题。使用http://www.php.net/manual/en/ref.fileinfo.php测试上传的图片,看看返回的信息是否如你所愿。

【讨论】:

以上是关于使用 PHP 生成 PDF 文件(包括 PNG 图像)的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDF.js 生成 pdf 的缩略图

PHP使用mpdf 生成pdf文件

PHP使用mpdf 生成pdf文件

如何使用 PHP 生成 PDF 文件? [复制]

Python PDF缩略图预览生成

在R中将png图写入pdf文件