tcpdf - 从现有的 PDF 文档开始
Posted
技术标签:
【中文标题】tcpdf - 从现有的 PDF 文档开始【英文标题】:tcpdf - start with existing PDF document 【发布时间】:2010-11-27 23:37:07 【问题描述】:我有几个 PDF 模板,我想使用 tcpdf 加载、修改和输出。
是否可以加载现有的 PDF 并将其用作 tcpdf 的起点?
【问题讨论】:
【参考方案1】:你想使用FPDI。
有一些示例代码here。
【讨论】:
@neoneye 你有相关信息的链接吗?我的快速浏览并没有发现任何问题。 fpdi 的问题是如果你想解析 pdf > 1.4 就必须付费 请注意,FPDI 会从 PDF 中删除所有链接和 javascript。 @Marko : 解析后能重新生成pdf吗? FPDI 仅支持 pdf 到 1.4 版。如果您的 pdf 高于 1.4,则必须购买解析器许可证【参考方案2】:我尝试过免费版本的 FPDI,但不支持 PDF 1.5 或更高版本。
如果其他人正在寻找免费的解决方案,我使用了 TCPDI。你可以在github上找到它https://github.com/pauln/tcpdi 如果您使用的是作曲家,您也可以为作曲家找到一些 fork。在 github 上搜索 tcpdi 即可。
将其添加到项目后,代码就非常简单了。它是 TCPDF 的扩展,因此您以前的所有代码都可以继续工作
这是我的代码中的一个 sn-p。我用它来保存隐私政策的副本(静态 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');
【讨论】:
我尝试下载 TCPDF、FPDI 和 TCPDI 并将它们包含在一起以执行相同的操作,但是它们之间存在不同版本支持的问题..所以请您将它们全部打包成一个存档文件并将其作为共享的 Google 云端硬盘链接提供? @RyadPasha 这是我正在使用的库的版本。希望可能有用。 tcpdf 5.9.149 版 - tcpdi 1.1 版(基于 fpdi 1.4.4 版) - tcpdi_parser 1.1 版(基于 tcpdf_parser 1.0.003 版)【参考方案3】:对于其他发现此问题的人来说,似乎为 TCPDF (https://tcpdf.org/docs/srcdoc/TCPDF/source-class-TCPDF_IMPORT/#50-100) 构建了一个 PARSER 和导入类,但截至 2018 年仍在开发中。
还值得注意的是,上述解决方案不允许编辑 PDF 页面的内容。换句话说,您将页面作为一个整体导入,您无法编辑文本内容或图像。
【讨论】:
【参考方案4】:您可以将 fpdf 与 fpdi 一起使用。不能直接修改模板,但是可以添加一个白色背景的文本单元格来缓存旧的内容(注意旧的内容可以通过一些工具读取)。然后保存你的新pdf。这个工具相对容易使用。为了解决fpdi在免费版本中无法读取1.5 pdf版本的问题,您可以通过exec命令使用ghost脚本将1.5版本转换为1.4版本。我使用它并且工作正常。
【讨论】:
以上是关于tcpdf - 从现有的 PDF 文档开始的主要内容,如果未能解决你的问题,请参考以下文章