【发布时间】:2016-08-06 15:59:14
【问题描述】:
例如,我想加载一个已经存在的 PDF 文件,然后在该 PDF 文件上转置文本并再次将其另存为新的 PDF 文件。基本上将两者合并,其中一个被换位在另一个上。
我不希望作为背景的 PDF 变成图像而失去质量,以便所有内容都保留其原始矢量格式。
我将如何进行此合并?
我不想使用软件,也许有一个脚本可以做到这一点?
【问题讨论】:
标签: pdf merge pdf-generation overlay dompdf
例如,我想加载一个已经存在的 PDF 文件,然后在该 PDF 文件上转置文本并再次将其另存为新的 PDF 文件。基本上将两者合并,其中一个被换位在另一个上。
我不希望作为背景的 PDF 变成图像而失去质量,以便所有内容都保留其原始矢量格式。
我将如何进行此合并?
我不想使用软件,也许有一个脚本可以做到这一点?
【问题讨论】:
标签: pdf merge pdf-generation overlay dompdf
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> </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 并接受新内容作为新 PDF 对象的实用程序打开文档,则没有什么可以阻止您将新文本放在旧文本之上。如果在屏幕上查看,将首先渲染旧材质,然后是占据相同 (x,y) 坐标的任何新材质。换言之,现有的 PDF 材料无需渲染为图像形式,即可在其上应用新内容。
但是请注意,如果您打算通过覆盖现有材料来编辑现有材料,这不是这样做的方法,因为较新/较高的对象不会直接影响下面的其他对象。可以将上面的对象拖到一边(例如,使用 Acrobat)以查看它们下面的内容。
【讨论】: