59

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

要求:

  • 不需要第三方网络服务

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

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

据我的研究表明,没有图书馆可以做到这一点:

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

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

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

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

我忽略了什么吗?

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

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

更新: *啊!* 我被叫出办公室,同时赏金到期。开始新的赏金:据我的测试显示,目前还没有解决方案对我完美。

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

4

10 回答 10

16

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

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

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

于 2010-12-23T14:44:37.330 回答
13

佩卡,

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

pdftk总的来说还是挺有用的,值得一看。

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

于 2010-12-11T12:33:39.930 回答
5

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

于 2010-12-23T22:55:50.867 回答
3

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

于 2011-01-24T12:03:04.183 回答
3

您最好的选择是动态生成整个文档,并使用 fpdf 或类似的东西以编程方式定义模板。这样,您的文本将不会被段落或类似内容截断,并且您可以根据需要轻松定位图像/其他元素。

于 2011-01-26T22:41:02.847 回答
2

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

于 2014-08-05T07:58:27.313 回答
1

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

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

于 2010-12-30T10:14:13.133 回答
1

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

首先回答你的几个问题。

问 - 我是否忽略了什么?

A - 没有。有一个 PHP PDF 库可以替换现有 PDF 中的占位符变量并生成 PDF 文件作为最终结果,而不会搞砸布局

问 - 有没有办法使用 PDF 表单来做到这一点?

A - 是的。这样做的绝妙方法是使用 PDF 表单

对于这两个答案,您可以使用 Justin Koivisto 填写 pdf 表单字段 php 库。有关更多详细信息,请访问http://koivi.com/fill-pdf-form-fields/tutorial.php。在那里查看更多信息。

感谢贾斯汀·科伊维斯托的工作

附言

有关显示类似 pdf 表单输出的表格的解决方法,请考虑阅读Oracle Business Intelligence Publisher 用户指南 - 创建 PDF 模板

于 2011-01-30T07:09:16.070 回答
1

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

我刚刚按照这些说明执行并最终执行了一个 perl 脚本,然后执行了 pdftk 命令

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

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

于 2014-01-31T09:47:54.950 回答
0

有点晚了,但是看看PDFTemplate Library 它确实可以满足您的需求。您可以创建 Open Document 文件 (odt) 并在其中添加占位符。PDFTemplate 库可以填写这些占位符(即使是图像)并创建一个 PDF 文件。

带占位符的 ODT 文件到 PDF

于 2017-03-09T18:18:21.530 回答