将2 pdf与Zend Framework合并

时间:2010-11-23 08:52:46

标签: php zend-framework pdf merge

我正在尝试合并2个PDF,一个在我的服务器上(非动态生成),一个在合并之前生成,而不是保存在服务器上的任何地方(我只是希望我的客户端下载它)。所以我只有pdf的内容。两种PDF都具有相同的格式(A4)。

合并文件将有2页,也不会保存在服务器上。

因为我正在使用Zend Framework,我更喜欢使用它的解决方案(在网上找不到一个......)或者其他建议吗?

(common solution found online but doesn't work)

编辑:因为人们懒得点击。无论如何,代码都在链接中,因为它是错误的并且不起作用。

  

我尝试下面的脚本,但是我得到了   错误:

     

未捕获的异常   带有消息的'Zend_Pdf_Exception'   '页面附在一个文档上,但是   在另一个

的上下文中呈现

5 个答案:

答案 0 :(得分:8)

好的,根据@Gordon在我的问题中的评论指南,我得到了一个解决方案。

  1. 你必须至少拥有Zend Framework 1.11(我在1.9,第一次出错)(感谢第3条对此问题的评论)
  2. 您必须从要合并的PDF页面clone页面,否则,您的应用程序将打印错误(自解释的)(感谢this slideshare,这对Zend_Pdf来说非常有趣)
  3. 静态PDF必须是PDF< = 1.4(我的是1.6)。 Zend_Pdf无法解析PDF版本是> 1.4
  4. 我使用this application将版本1.6中的静态文件转换为1.4。

    这是我的粗略代码和工作(我知道它没有优化,我会稍后再做;但是,它仍然有用)

    $pdf2show = new Zend_Pdf();  // Initializing the merged PDF
    $pdf1 = Zend_Pdf::parse($pdfContent, 1); // $pdfContent is the generated one, got the content...
    $template = clone $pdf1->pages[0]; // cloning the page (a must do)
    $page1 = new Zend_Pdf_Page($template); // Creating the first page of the merged PDF with the previous content
    $pdf2show->pages[] = $page1; // Adding this page to the final PDF
    $pdf2 = Zend_Pdf::load('urlToYourPDF.pdf'); // Loading the statif PDF
    $template2 = clone $pdf2->pages[0]; // cloning the page (a must do)
    $page2 = new Zend_Pdf_Page($template2); // Creating the second page of the merged PDF with the previous content
    $pdf2show->pages[] = $page2; // Adding this page to the final PDF
    sendToWebBrowser('title', $pdf2show->render());
    

    sendToWebBrowser是一个将PDF内容发送到浏览器的函数,其中title为...标题。 $pdf2show->render()将合并的PDF内容生成为字符串。

答案 1 :(得分:4)

$extractor = new Zend_Pdf_Resource_Extractor();
$clone_page_to_use_in_any_pdf = $extractor->clonePage($original_pdf->pages[0]);

这就是我做到的。

希望这有助于每个人。

TJ

答案 2 :(得分:2)

$extractor = new Zend_Pdf_Resource_Extractor();

$page1 = $extractor->clonePage($pdf->pages[$templatePageIndex1]);
$page2 = $extractor->clonePage($pdf->pages[$templatePageIndex2]);
$page1->drawText('Some text...', $x, $y);
$page2->drawText('Another text...', $x, $y);

$pdf = new Zend_Pdf();
$pdf->pages[] = $page1;
$pdf->pages[] = $page2;

从马口出来。

http://framework.zend.com/manual/en/zend.pdf.pages.html#zend.pdf.pages.cloning

答案 3 :(得分:0)

您是否尝试使用PDF toolkit合并它们?

使用以下方法合并多个PDF:

pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf

123.pdf将是生成的PDF。您可以将生成的PDF临时存储在服务器上,将其发送到浏览器并在不再需要时将其删除。

答案 4 :(得分:0)

我合并pdfs的经验:

  • Zend_Pdf很慢,对于大型编译效率不高,
  • pdftk松散文档的书签,如果文档的大小大于合并的文档,则会崩溃,
  • pdflib非常快且保留书签,对于大型编辑非常有效。