tcpdf - 从现有 PDF 文档开始

发布于 2024-08-05 02:11:02 字数 78 浏览 5 评论 0原文

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

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

I have several PDF templates that I would like to load and modify and output using tcpdf.

Is it possible to load an existing PDF and use it as a starting point in tcpdf?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

↘紸啶 2024-08-12 02:11:02

您想要使用 FPDI

此处有一些示例代码。

You want to use FPDI.

There's some example code here.

指尖凝香 2024-08-12 02:11:02

我尝试过 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');

I have tried the free version of FPDI but does not support PDF version 1.5 or higher.

If someone else is looking for a free solution I have used TCPDI. You can find it on github https://github.com/pauln/tcpdi
If you are using composer, you can find some fork for composer too. Just search tcpdi on github.

Once you add it to your project, the code is quite simple. It is an extension of TCPDF so all your previous code keep working

This is a snippet from my code. I used it to save a copy of the privacy policy (a static pdf) with the user name and agreement date on each page footer.

// 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');
蝶舞 2024-08-12 02:11:02

对于发现这一点的其他人来说,确实有一个解析器和导入类是为 TCPDF 构建的(https://tcpdf.org/docs/srcdoc/TCPDF/source-class-TCPDF_IMPORT/#50-100),但截至 2018 年仍在开发中。

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

For anyone else finding this, it does appear a PARSER and import class were built for TCPDF (https://tcpdf.org/docs/srcdoc/TCPDF/source-class-TCPDF_IMPORT/#50-100) but as of 2018 was still under development.

Its also worth noting that the solutions above do not allow the contents of the PDF pages to be edited. In other words you import the page as a whole, you cannot edit text content or images.

凹づ凸ル 2024-08-12 02:11:02

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

You can use fpdf with fpdi. You can’t modify directly a template, but you can add a text cell with a white background to cache the old content (note that the old content can be read by using some tools). Then save your new pdf. This tools are relatively easy to use. To resolve the fact that fpdi not read 1.5 pdf version in the free version, you can convert 1.5 version in 1.4 version by using ghost script with the exec command. I use this and work fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文