DOMPDF - 如何在另一个PDF文件(PHP)之上写入文本

时间:2016-04-14 21:23:26

标签: pdf merge pdf-generation overlay dompdf

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

我不希望PDF作为背景成为失去质量的图像,因此所有内容都保留了原始的矢量格式。

我将如何进行此合并?

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

2 个答案:

答案 0 :(得分:3)

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();

答案 1 :(得分:0)

您不清楚在哪种情况下您计划执行此操作,并且您的流程说明建议您要在现有文本之上叠加(或溢流)文本内容,而不是转置它。如果要使用任何支持解析输入PDF并将新内容作为新PDF对象接受的实用程序打开文档,则无法阻止您在旧文本之上删除新文本。如果在屏幕上查看,则首先渲染旧材质,然后渲染占据相同(x,y)坐标的任何较新材质。换句话说,在将新内容应用于其上之前,不需要将现有PDF材料渲染为图像形式。

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