带有 PDF 输出的 PHP PDF 模板库?[关闭]

PHP PDF template library with PDF output? [closed]

提问人:Pekka 提问时间:12/11/2010 最后编辑:Pekka 更新时间:7/30/2019 访问量:23152

问:


我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。

4年前关闭。

是否有任何 PHP PDF 库可以替换现有 PDF、ODT 或 DOCX 文档中的占位符变量,并生成 PDF 文件作为最终结果,而不会搞砸布局?

要求:

  • 不需要第三方网络服务

  • 能够在共享虚拟主机上运行将是理想的(不需要二进制安装/包)

请注意,能够加载现有 PDF 文件并以编程方式在特定位置插入文本的库对于我的用例来说是不够的

据我所知,没有库可以做到这一点:

  • TCPDF只能从头开始生成文档

  • FPDI 可以读取现有的 PDF 模板,但只能以编程方式添加内容(不能替换模板变量)

  • 那里有各种 DOCX/ODT 模板库,但它们不输出 PDF

PHPDOCx 声称能够完全满足我的需要 - 但他们不提供试用版,我不会在袋子里买猫,尤其是当网络上似乎没有其他产品可以做到这一点时。我很难相信他们可以毫无问题地做到这一点 - 如果您已经使用该产品成功完成了此操作,请在此处留言。

我是否忽略了什么?

有没有办法使用PDF表单来做到这一点?我正在 OpenOffice 3 中创建源文档。

我也许可以使用标准的 Linux 命令(例如,现在就可以尝试了。pdftk

更新:*啊!* 我被叫出办公室,赏金在此期间到期。开始新的赏金:根据我的测试显示,目前还没有一个解决方案适合我。

更新二:我将很快寻找 pdftk 方法,但我也开始了另一轮赏金,以收集额外的意见。这个问题现在已经看到了 1300 个代表点的赏金,一定是某种创纪录的:)

PHP 的PDF ODT

评论

1赞 mario 12/23/2010
哪个大小的占位符变量受到威胁?如果只是单个单词(或< 30 个字节)而不是冗长的段落,那么放置器准备和简单的搜索和替换方法就可以了。
0赞 Pekka 12/23/2010
@mario它们可能是多行段落,但我可以看到它们被分成单独的行。
0赞 Jeremy 12/24/2010
有什么理由需要解析占位符吗?如果 PDF 中只有空间用于生成的内容,该怎么办?但是,如果您不知道内容的长度,则可能无法正常工作。
0赞 shamittomar 12/26/2010
@Pekka,为什么你不能使用便宜的VPS(www.lowendbox.com)并消除无法安装软件包/库的限制?这样可以缓解问题。共享主机有理由吗?
0赞 Pekka 12/27/2010
@shamittomar这是为客户准备的,我希望尽可能减少技术和簿记开销。VPS确实可以使这变得容易,但要向等式添加一个全新的参数(服务器需要管理,安装,持续的安全更新,....当需要 PDF 服务的网站仍在运行时,它可能会关闭......我想不惜一切代价避免

答:

13赞 Orbling 12/11/2010 #1

佩卡,

我之前研究过这个问题,我认为您可以使用 pdftk(命令行实用程序)使用 FDF/XFDF 数据文件填写 PDF 表单,您可以在 PHP 中轻松生成这些文件。这是我迄今为止见过的最好的选择,尽管很可能有一个本地图书馆。

PDFTK总体上非常有用,值得一看。

更新:请看这里: http://php.net/manual/en/book.fdf.php

评论

0赞 Pekka 12/11/2010
我将检查我是否可以在共享虚拟主机上运行。这似乎很理想pdftk
0赞 Orbling 12/11/2010
@Pekka它构建得相当不错,我已经让它在相当多的托管配置上运行。依赖项非常标准。
1赞 RabidFire 12/24/2010
为了补充这个答案:stackoverflow.com/questions/1389964/......
0赞 Orbling 12/24/2010
@Pekka:这种方法是不是一开始就行不通了?
1赞 WebChemist 1/27/2011
我使用PDFTK进行在线证书和标签打印,它非常方便,但不幸的是,许多共享主机提供商不会安装它(他们会尝试让您升级到自己的专用服务器)。但是,如果您能找到愿意使用它的主机,请查看 pdftk-php: github.com/andrewheiss/pdftk-php,它使从数据库中获取数据并插入到 pdf 表单中变得非常容易。为获得最佳效果,请在 LiveCycle(包含在 Acrobat Pro 中)而不是 Acrobat 中创建表单
16赞 mario 12/23/2010 #2

这不是很实用,但为了完整起见:如果您已经有一个 ODT 模板,那么您很可能会将其保留为模板。修改 OpenDocument 内容 .xml 并替换其中的占位符非常简单。如果是这样,您可以使用 unoconvpyodconverter 将 ODT 转换为最终的 PDF。

unoconv -f pdf -o final.pdf template.odt

很显然,这需要在 Web 服务器上进行完整的 OpenOffice 设置(UNO 和 Writer)。显然,并非每个网络托管服务商都会这样做!哈哈。即使它在任何 Debian 或 Fedora 设置上都很简单。执行速度可能也不是一流的。但是,它可能是最干净的方法,因为OOo比任何PHP类都更好地管理这两种格式。

评论

0赞 Pekka 12/23/2010
是的,这将是我最喜欢的解决方案,但我相当确定网络主机不允许它。尽管如此,对于任何可以使用它的人来说,这是最干净的方式
0赞 shamittomar 12/26/2010
只需要一个VPS就可以了。嗯,不错的解决方案。+1.
0赞 Bram Schoenmakers 12/28/2010
此外,您需要 ,这很可能在共享主机上不可用。exec()
0赞 mario 12/28/2010
@BramSchoenmakers:视情况而定。我有一个非常便宜和专业的共享主机。使用 suexec、fastcgi、suhosin 代替 safe_mode 等。他们很可能会为我安装 Openoffice。但是,当然,对于大规模托管商来说,情况就不同了。|同样在这种情况下,您可以使用与 UNO 的套接字连接。
0赞 naugtur 1/28/2011
说服客户坚持使用 odt 并堆叠一个单独的服务器来发布 pdf 文件也可能很好。
5赞 CaseySoftware 12/24/2010 #3

您是否考虑过使用类似 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/

评论

0赞 Pekka 12/31/2010
干杯@Casey这非常有趣,但是 XML -> PDF 部分(如果我理解正确的话,这就是 FOP 可以提供的)超出了我对这个项目的“无需安装软件”限制。尽管如此,+1,一个非常干净的方法
0赞 JasonPlutext 2/15/2015
通过 FO 输出的 PDF 对于某些用例来说已经足够好了,但由于 FOP 的渲染器与 Word 的渲染器不同,因此换行符和分页符可能会落在不同的位置。出于这个原因,可能会对更高保真度的商业替代方案感兴趣:docx4java.org/blog/2015/02/high-fidelity-pdf-output
1赞 ts. 12/30/2010 #4

虽然不完全是你问的,但你可以考虑分两步来制作:使用一些php模板系统(smarty,dwoo)来生成html页面,然后使用Html2Pdf等工具将其转换为pdf。我正在使用它,结果很好(页面布局等没有问题)

当然,这取决于您的输入文档(您可以使用html而不是PDF / ODT作为源)以及这些布局的复杂性。

评论

0赞 Pekka 12/31/2010
干杯,这是一个好主意,但在我的情况下行不通,因为我的办公文档已经包含需要填写的占位符(客户必须能够自主修改的文档)。
3赞 renevdkooi 1/24/2011 #5

fpdf,上面还有另一个扩展,我不记得了,它允许您导入模板

评论

0赞 Orbling 1/27/2011
我相信FPDI就是你所指的。
3赞 John Cartwright 1/27/2011 #6

最好的办法是即时生成整个文档,并使用 fpdf 或类似工具以编程方式定义模板。这样,您的文本就不会被段落或类似内容截断,您可以根据需要轻松定位图像/其他元素。

1赞 Gajahlemu 1/30/2011 #7

好的,我正在尝试帮助您解决问题。

首先,回答你的几个问题。

问 - 我是否忽略了什么?

答 - 不可以。有一个 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 模板

1赞 Capsule 1/31/2014 #8

我将添加这个新答案,因为 FDF PHP 扩展现在已经死了。

我只是按照这些说明进行了操作,最终执行了一个perl脚本,然后执行了pdftk命令

我很清楚它远不是一个真正的PHP解决方案,但它是可靠的,并且在任何*nix平台上都相当容易实现。

那里描述的工具也可以在 Debian 上使用,以防万一您想知道。

2赞 cchantep 8/5/2014 #9

晚了,但您可以使用开源模板设计器 https://github.com/applicius/dhek/releases ,在任何现有 PDF 上定义 pkaceholders/区域,然后将其加载到 PHP 中(因为它是 JSON 格式)并使用 fpdf lib 在原始 PDF 上相应地写入,以生成带有动态数据的自定义 PDF。

0赞 Nikolai Fischer 3/10/2017 #10

有点晚了,但看看 PDFTemplate 库,它完全可以满足您的需求。您可以创建打开文档文件 (odt) 并在其中添加占位符。PDFTemplate 库可以填充这些占位符(甚至包含图像)并创建 PDF 文件。

带有占位符的 ODT 文件转换为 PDF