使用 PHP 在现有 PDF 文件中插入图像文件

Posted

技术标签:

【中文标题】使用 PHP 在现有 PDF 文件中插入图像文件【英文标题】:Insert images files in existing PDF file using PHP 【发布时间】:2012-03-24 02:09:26 【问题描述】:

我需要上传两个图像文件,并将其添加到现有的 PDF 文件中。我已经阅读了有关 FPDF 的内容,基于我已关注此帖子 link。如果有人可以发布一个简单的工作示例/链接,这将对像我这样的搜索者以及更多也会采取相同途径找到一些有用答案的人有所帮助。

【问题讨论】:

将图像添加到现有 PDF - 应该出现在现有页面上还是新页面上?如果是前者,请记住,您实际上只能在现有内容的 顶部 渲染 afaik - 如果您想在插入图像的情况下重排文档,则需要从头开始重新渲染。 图片应显示在现有页面上的信息 太好了,@tonymarschall 的回答应该可以解决您的问题。 当帖子的浏览量超过 1000 次时,谁投了反对票...... 不要担心这里的反对票 - 这只是一个。就其价值而言,按照今天的标准,这个问题在这里不太合适——在大多数情况下,我们喜欢展示大量先前研究、具体且通常具有代码 sn-p 的问题。教程请求大多是题外话。 【参考方案1】:

似乎有一个名为FPDI 的扩展名为FPDF。这是一篇关于如何修改现有 pdf 的博客文章:http://pranavom.wordpress.com/2011/03/15/modify-pdf-using-fpdffpdi-library/

您可以像这样使用 FPDI 放置图像:

$pdf = new FPDI();
$pdf->AddPage();
$pdf->setSourceFile("MySource");
$template = $pdf->importPage(1);
$pdf->useTemplate($template);
$pdf->Image('MyImage.jpg', $x, $y, $width, $height);
$pdf->Output($outputPath, "F");

【讨论】:

嗨,托尼,我按照您提到的示例进行操作,并且可以创建带有图像的 pdf,但是即使我的原始 pdf 仅包含一页,创建的 pdf 的第一页也是空白的在第二页中,我得到了我想要的内容。任何想法如何消除这一点并在第一页中获得所需的更改。如果你能解决这个问题,我也会接受你的回答。谢谢 不确定,先尝试删除$pdf->AddPage();但这是另一个问题。 感谢 tony 指出,回答已接受:) 只是一个更基本的问题,是否可以增加/减小图像尺寸或图像尺寸是标准的。 @webMot 是的,有可能---作者 Pranavom 免费 fpdi 版本仅支持 pdf 至 1.4 版 (Acrobat 5)。 source【参考方案2】:

我正在使用 php、FPDF 从 FDF 文件生成 pdf,然后将 qrcode 图形也插入到 pdf 中。我一直遇到麻烦,因为我的空 pdf 具有内置的表单域,并且在其他程序中插入图形会擦除我的表单域。我终于弄明白了。希望这可以帮助其他正在苦苦挣扎的人。

我在殡仪馆工作,如果任何 var 名称让你失望,并且这段代码没有经过打磨,它是从大量不同的来源剪切和粘贴的;)

我正在使用以下库 http://www.fpdf.org/ 和 http://phpqrcode.sourceforge.net/

for($count=0;$count<$doc_list_length;$count++)

    //create FDF file
    $id = rand(11111,99999);
    $filename = $populated_pdf_path . $casenumber.$doc_list[$count].".fdf";    
    $file = fopen($filename,"w");
    $filecontents = "%FDF-1.2". PHP_EOL;
    $filecontents .= "%âãÏÓ" . PHP_EOL;
    $filecontents .= "1 0 obj" . PHP_EOL;
    $filecontents .= "<<" .PHP_EOL;
    $filecontents .= "/FDF << /Fields [ ";
    $filecontents .= "<</T(name)/V($name)>>";
    $filecontents .= "] " . PHP_EOL;
    $filecontents .= "/F (empty_pdf/$doc_list[$count].pdf) ";
    $filecontents .= "/ID [ <$id>" . PHP_EOL;
    $filecontents .= "] >> " . PHP_EOL;
    $filecontents .= ">> ". PHP_EOL;
    $filecontents .= "endobj" . PHP_EOL;
    $filecontents .= "trailer" . PHP_EOL;
    $filecontents .= "<<" . PHP_EOL;
    $filecontents .= "/Root 1 0 R" . PHP_EOL . PHP_EOL;
    $filecontents .= ">>" . PHP_EOL;
    $filecontents .= "%%EOF";
    fwrite($file, $filecontents);
    fclose($file);

    //insert image on this document only
    //generate qrcode
    if($doc_list[$count] == "checklist")

        $qrCodeFileName = $cemetery."qrcode.png";
        if(!file_exists($populated_pdf_path.$qrCodeFileName))
            include('include/phpqrcode/qrlib.php');  
            $codeContents = "http://www.asuperduperwebaddress.com"; 
            QRcode::png($codeContents, $populated_pdf_path.$qrCodeFileName);
        

        if(!file_exists($populated_pdf_path.$cemetery."qrcode.pdf"))
            //make pdf with image
            require_once('include/fpdf.php');
            $image = $populated_pdf_path.$qrCodeFileName;
            $pdf = new FPDF();
            $pdf->AddPage();
            $pdf->Image($image, 183, 250, 25, 25, 'PNG' );
            $pdf->Output( $populated_pdf_path.$cemetery."qrcode.pdf");
        

        //setup file paths for pdf output
        $tempFile = $populated_pdf_path . $casenumber.$doc_list[$count]."temp.pdf";
        $pdfExampleFile = $populated_pdf_path . $casenumber.$doc_list[$count].".pdf"; 
        $pdfFile = $empty_pdf_path . $doc_list[$count] . ".pdf";
        if($doc_list[$count] == "checklist")
        $fdfFile = $filename; 
        $fdfTemplateFile = $filename;

        //fill pdf
        $command = "pdftk $pdfFile fill_form $fdfTemplateFile output $tempFile 2> fill_form.log";
        passthru($command);

        //stamp pdf with qrcode
        $command = "pdftk " . $tempFile . " stamp " . $populated_pdf_path.$cemetery . "qrcode.pdf output " . $pdfExampleFile; 
        passthru($command);
    
    else
        //setup file paths for pdf output
        $pdfExampleFile = $populated_pdf_path . $casenumber.$doc_list[$count].".pdf"; 
        $pdfFile = $empty_pdf_path . $doc_list[$count] . ".pdf";
        if($doc_list[$count] == "checklist")
        $fdfFile = $filename; 
        $fdfTemplateFile = $filename;

        //fill pdf
        $command = "pdftk $pdfFile fill_form $fdfTemplateFile output $pdfExampleFile 2> fill_form.log";
        passthru($command);
    


【讨论】:

谢谢。我必须进行的一项更改是 $pdf->Output 调用需要一个 dest 参数。我用过:$pdf->Output("F", $filename);

以上是关于使用 PHP 在现有 PDF 文件中插入图像文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDF 库在现有 PDF 文件上绘制小图像

使用 PHP 获取 PDF 文件的高度和宽度

使用 itextsharp 在现有 pdf 中插入文本

C#如何利用itextSharp修改现有PDF文件内容,比如插入

是否有可以将 JavaScript 插入现有 PDF 文件的 Ruby gem?

如何在 MySQL 数据库中插入 pdf 文件,然后在 php 中读取?