提问人:Pekka 提问时间:12/11/2010 最后编辑:Pekka 更新时间:7/30/2019 访问量:23152
带有 PDF 输出的 PHP PDF 模板库?[关闭]
PHP PDF template library with PDF output? [closed]
问:
我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。
4年前关闭。
是否有任何 PHP PDF 库可以替换现有 PDF、ODT 或 DOCX 文档中的占位符变量,并生成 PDF 文件作为最终结果,而不会搞砸布局?
要求:
不需要第三方网络服务
能够在共享虚拟主机上运行将是理想的(不需要二进制安装/包)
请注意,能够加载现有 PDF 文件并以编程方式在特定位置插入文本的库对于我的用例来说是不够的。
据我所知,没有库可以做到这一点:
TCPDF只能从头开始生成文档
FPDI 可以读取现有的 PDF 模板,但只能以编程方式添加内容(不能替换模板变量)
那里有各种 DOCX/ODT 模板库,但它们不输出 PDF
PHPDOCx 声称能够完全满足我的需要 - 但他们不提供试用版,我不会在袋子里买猫,尤其是当网络上似乎没有其他产品可以做到这一点时。我很难相信他们可以毫无问题地做到这一点 - 如果您已经使用该产品成功完成了此操作,请在此处留言。
我是否忽略了什么?
有没有办法使用PDF表单来做到这一点?我正在 OpenOffice 3 中创建源文档。
我也许可以使用标准的 Linux 命令(例如,现在就可以尝试了。pdftk
更新:*啊!* 我被叫出办公室,赏金在此期间到期。开始新的赏金:根据我的测试显示,目前还没有一个解决方案适合我。
更新二:我将很快寻找 pdftk 方法,但我也开始了另一轮赏金,以收集额外的意见。这个问题现在已经看到了 1300 个代表点的赏金,一定是某种创纪录的:)
答:
佩卡,
我之前研究过这个问题,我认为您可以使用 pdftk(命令行实用程序)使用 FDF/XFDF 数据文件填写 PDF 表单,您可以在 PHP 中轻松生成这些文件。这是我迄今为止见过的最好的选择,尽管很可能有一个本地图书馆。
PDFTK总体上非常有用,值得一看。
更新:请看这里: http://php.net/manual/en/book.fdf.php
评论
pdftk
这不是很实用,但为了完整起见:如果您已经有一个 ODT 模板,那么您很可能会将其保留为模板。修改 OpenDocument 内容 .xml 并替换其中的占位符非常简单。如果是这样,您可以使用 unoconv
或 pyodconverter
将 ODT 转换为最终的 PDF。
unoconv -f pdf -o final.pdf template.odt
很显然,这需要在 Web 服务器上进行完整的 OpenOffice 设置(UNO 和 Writer)。显然,并非每个网络托管服务商都会这样做!哈哈。即使它在任何 Debian 或 Fedora 设置上都很简单。执行速度可能也不是一流的。但是,它可能是最干净的方法,因为OOo比任何PHP类都更好地管理这两种格式。
评论
exec()
您是否考虑过使用类似 XSL:Formatting Objects (XSL:FO) 的东西?基本上,它们是经过处理并转换为PDF的XML文档。 在其中进行字符串(或更好的是DOM)替换应该非常简单。它支持嵌入图像、链接、注释等。
它不是 PHP,但有许多 PHP 包装器,以及通过 exec 等使用它的方法。不是一个理想的选择,但它完全照顾了模板部分。欲了解更多信息,请访问:http://techportal.inviqa.com/2009/12/16/transforming-xml-with-php-and-xsl/
有一个实现可作为 Apache 项目使用 - http://xmlgraphics.apache.org/fop/
评论
虽然不完全是你问的,但你可以考虑分两步来制作:使用一些php模板系统(smarty,dwoo)来生成html页面,然后使用Html2Pdf等工具将其转换为pdf。我正在使用它,结果很好(页面布局等没有问题)
当然,这取决于您的输入文档(您可以使用html而不是PDF / ODT作为源)以及这些布局的复杂性。
评论
fpdf,上面还有另一个扩展,我不记得了,它允许您导入模板
评论
最好的办法是即时生成整个文档,并使用 fpdf 或类似工具以编程方式定义模板。这样,您的文本就不会被段落或类似内容截断,您可以根据需要轻松定位图像/其他元素。
好的,我正在尝试帮助您解决问题。
首先,回答你的几个问题。
问 - 我是否忽略了什么?
答 - 不可以。有一个 PHP PDF 库可以替换现有 PDF 中的占位符变量并生成 PDF 文件作为最终结果,而不会搞砸布局
问 - 有没有办法使用PDF表单来做到这一点?
答:是的。绝对可以做到这一点,方法是使用PDF Forms
对于这两个答案,您可以使用 Justin Koivisto 填写 pdf 表单字段 php 库。 欲了解更多详情,请访问 http://koivi.com/fill-pdf-form-fields/tutorial.php。 查看那里以获取更多信息。
感谢贾斯汀·科伊维斯托(Justin Koivisto)的工作
附言
有关显示表格(如 pdf 表单输出)的解决方法 请考虑阅读 Oracle Business Intelligence Publisher 用户指南 - 创建 PDF 模板
我将添加这个新答案,因为 FDF PHP 扩展现在已经死了。
我只是按照这些说明进行了操作,最终执行了一个perl脚本,然后执行了pdftk命令
我很清楚它远不是一个真正的PHP解决方案,但它是可靠的,并且在任何*nix平台上都相当容易实现。
那里描述的工具也可以在 Debian 上使用,以防万一您想知道。
晚了,但您可以使用开源模板设计器 https://github.com/applicius/dhek/releases ,在任何现有 PDF 上定义 pkaceholders/区域,然后将其加载到 PHP 中(因为它是 JSON 格式)并使用 fpdf lib 在原始 PDF 上相应地写入,以生成带有动态数据的自定义 PDF。
有点晚了,但看看 PDFTemplate 库,它完全可以满足您的需求。您可以创建打开文档文件 (odt) 并在其中添加占位符。PDFTemplate 库可以填充这些占位符(甚至包含图像)并创建 PDF 文件。
评论