28

我有几个 PDF 模板,我想使用 tcpdf 加载、修改和输出。

是否可以加载现有的 PDF 并将其用作 tcpdf 的起点?

4

4 回答 4

31

您想使用FPDI

这里有一些示例代码。

于 2009-09-13T22:00:56.717 回答
4

我尝试过免费版本的 FPDI,但不支持 PDF 1.5 或更高版本。

如果其他人正在寻找免费的解决方案,我使用了 TCPDI。你可以在 github 上找到它https://github.com/pauln/tcpdi 如果你正在使用 composer,你也可以为 composer 找到一些 fork。只需在 github 上搜索 tcpdi。

一旦你把它添加到你的项目中,代码就很简单了。它是 TCPDF 的扩展,因此您以前的所有代码都可以继续工作

这是我的代码片段。我用它来保存隐私政策的副本(静态 pdf),每个页脚上都有用户名和协议日期。

// Create new PDF document
$pdf = new TCPDI(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
...
// Add the pages from the source file.
$pagecount = $pdf->setSourceFile($policyPdfPath);
for ($i = 1; $i <= $pagecount; $i++) {
    $tplidx = $pdf->importPage($i);
    $pdf->AddPage();
    $pdf->useTemplate($tplidx);
    // Add agreement text in document footer
    $pdf->SetXY(15,282);
    $pdf->Cell(180, 5, "Documento approvato da {$fullName} il {$date}", 0, 0, 'C');
}
// Send PDF on output
$pdf->Output(FOLDER_PATH . DIRECTORY_SEPARATOR . "{$userId}.pdf", 'F');
于 2020-04-16T19:26:28.947 回答
0

对于其他发现此问题的人,似乎为 TCPDF ( https://tcpdf.org/docs/srcdoc/TCPPDF/source-class-TCPDF_IMPORT/#50-100 ) 构建了一个 PARSER 和导入类,但截至 2018 年仍然是正在开发中。

还值得注意的是,上述解决方案不允许编辑 PDF 页面的内容。换句话说,您将页面作为一个整体导入,您无法编辑文本内容或图像。

于 2020-09-16T07:36:28.493 回答
0

您可以将 fpdf 与 fpdi 一起使用。不能直接修改模板,但是可以添加一个白色背景的文本单元格来缓存旧的内容(注意旧的内容可以通过一些工具读取)。然后保存你的新pdf。这个工具相对容易使用。为了解决fpdi在免费版本中无法读取1.5 pdf版本的问题,您可以通过exec命令使用ghost脚本将1.5版本转换为1.4版本。我使用它并且工作正常。

于 2021-09-22T14:39:10.430 回答