【问题标题】:DOMPDF - How to write text on top of another PDF file (PHP)DOMPDF - 如何在另一个 PDF 文件上写入文本 (PHP)
【发布时间】:2016-08-06 15:59:14
【问题描述】:

例如,我想加载一个已经存在的 PDF 文件,然后在该 PDF 文件上转置文本并再次将其另存为新的 PDF 文件。基本上将两者合并,其中一个被换位在另一个上。

我不希望作为背景的 PDF 变成图像而失去质量,以便所有内容都保留其原始矢量格式。

我将如何进行此合并?

我不想使用软件,也许有一个脚本可以做到这一点?

【问题讨论】:

    标签: pdf merge pdf-generation overlay dompdf


    【解决方案1】:

    dompdf 本身无法执行此类操作。您需要独立生成 PDF 文档,然后使用第三方库来合并这两个文档。

    由于您使用的是 dompdf,我猜您可能正在寻找基于 PHP 的解决方案。看看FPDI。使用 dompdf 生成 PDF 文档后,您可以使用 FPDI 将它们组合起来。

    我认为这会起作用,但我还没有测试过

    <?php
    // generate pdf documents
    require_once('dompdf/autoload.inc.php');
    
    $dompdf = new Dompdf();
    $dompdf->loadHtml('<p>Hello</p>');
    $dompdf->render();
    file_put_contents('doc1.pdf', $dompdf->output());
    
    unset($dompdf);
    
    $dompdf = new Dompdf();
    $dompdf->loadHtml('<p>&nbsp;</p><p>Hello</p>');
    $dompdf->render();
    file_put_contents('doc2.pdf', $dompdf->output());
    
    
    // combine pdf documents
    require_once('fpdf.php');
    require_once('fpdi.php');
    
    // initiate FPDI
    $pdf = new FPDI('L');
    // add a page
    $pdf->AddPage();
    // set the source file to doc1.pdf and import a page
    $pdf->setSourceFile("doc1.pdf");
    $tplIdx = $pdf->importPage(1);
    // use the imported page and place it at point 10,10 with a width of 210 mm
    $pdf->useTemplate($tplIdx, 10, 10, 210);
    // set the source file to doc2.pdf and import a page
    $pdf->setSourceFile("doc2.pdf");
    $tplIdx = $pdf->importPage(1);
    // use the imported page and place it at point 100,10 with a width of 210 mm
    $pdf->useTemplate($tplIdx, 100, 10, 210);
    
    $pdf->Output();
    

    【讨论】:

    • 我测试了它,这也是一个很好的解决方案,可以将 pdf 相互重叠。
    【解决方案2】:

    不清楚您打算在什么环境下执行此操作,并且您的流程描述表明您希望在现有内容之上叠加(或重叠)文本,而不是转置它。如果您使用任何支持解析输入 PDF 并接受新内容作为新 PDF 对象的实用程序打开文档,则没有什么可以阻止您将新文本放在旧文本之上。如果在屏幕上查看,将首先渲染旧材质,然后是占据相同 (x,y) 坐标的任何新材质。换言之,现有的 PDF 材料无需渲染为图像形式,即可在其上应用新内容。

    但是请注意,如果您打算通过覆盖现有材料来编辑现有材料,这不是这样做的方法,因为较新/较高的对象不会直接影响下面的其他对象。可以将上面的对象拖到一边(例如,使用 Acrobat)以查看它们下面的内容。

    【讨论】:

    • 我很抱歉缺乏清晰性,通过花费一些时间来回答我自己的问题,我把它归结为我将如何去做:获取一个现有的 PDF 文件,然后在上面写一个 HTML 生成的 PDF 文件,合并两者。
    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多