【问题标题】:PHP PDF template library with PDF output? [closed]带有PDF输出的PHP PDF模板库? [关闭]
【发布时间】:2011-05-23 22:23:30
【问题描述】:

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

要求:

  • 不需要第三方网络服务

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

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

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

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

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

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

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

我是否忽略了什么?

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

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

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

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

【问题讨论】:

  • 占位符变量的大小处于危险之中?如果它只是单个单词(或
  • @mario 它们可能是多行段落,但我可以确保它们被分成单独的行。
  • 有什么理由需要解析占位符吗?如果 PDF 中只有用于生成的内容的空间怎么办。如果您不知道内容的长度,可能不会起作用。
  • @Pekka,您为什么不能使用便宜的 VPS (www.lowendbox.com) 并消除无法安装包/库的限制?那会让事情变得轻松。共享主机有什么理由吗?
  • @shamittomar 这是为客户服务的,我希望尽可能减少技术和簿记开销。 VPS 确实会让这件事变得简单,但会为等式添加一个全新的参数(服务器需要管理、安装、持续的安全更新……它可能会关闭,而需要 PDF 服务的站点仍在运行……)我想不惜一切代价避免

标签: php pdf odt


【解决方案1】:

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

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

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

【讨论】:

  • 是的,这将是我最喜欢的解决方案,但我很确定网络主机不允许这样做。不过,对于任何可以使用它的人来说,这是最干净的方式
  • 只需要一个VPS即可。嗯很好的解决方案。 +1。
  • 此外,您还需要exec(),这很可能在共享主机上不可用。
  • @BramSchoenmakers:视情况而定。我有一个非常便宜且专业的共享主机。使用 suexec、fastcgi、suhosin 而不是 safe_mode 等。他们很可能会为我安装 Openoffice。但是,当然,对于大型主持人来说,情况就不同了。 |同样在这种情况下,您可以使用与 UNO 的套接字连接。
  • 说服客户坚持使用 odt 并堆叠一个单独的服务器来发布 pdf 文件也可以。
【解决方案2】:

佩卡,

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

pdftk 总体来说还是蛮好用的,值得一看。

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

【讨论】:

  • 我会检查是否可以让pdftk 在共享虚拟主机上运行。看起来很理想
  • @Pekka 它构建得相当好,我已经让它在相当多的托管配置上运行。依赖项非常标准。
  • @Pekka:那么这种方法是否可行?
  • 我使用 PDFTK 进行在线证书和标签打印,它非常方便,但不幸的是许多共享主机提供商不会安装它(他们会尝试让您升级到自己的专用服务器)。但是,如果您能找到愿意使用它的主机,请查看 pdftk-php:github.com/andrewheiss/pdftk-php,它可以很容易地从数据库中获取数据并插入到 pdf 表单中。为获得最佳效果,请在 LiveCycle(Acrobat Pro 中包含)而不是 Acrobat 中创建表单
【解决方案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/

【讨论】:

  • Cheers @Casey 这很有趣,但是 XML -> PDF 部分(如果我理解正确,是 FOP 可以提供的)超出了我的“无软件安装”限制这个项目。不过,+1,一个非常干净的方法
  • 通过 FO 的 PDF 输出在某些用例中运行良好,但由于 FOP 的渲染器与 Word 不同,换行符和分页符可能位于不同的位置。出于这个原因,一个更高保真度的商业替代品可能会引起人们的兴趣:docx4java.org/blog/2015/02/high-fidelity-pdf-output
【解决方案4】:

fpdf 上面还有一个扩展名,我不记得了,可以让你导入模板

【讨论】:

  • FPDI 是你指的我相信。
【解决方案5】:

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

【讨论】:

    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

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

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

      【讨论】:

      • 干杯,这是个好主意,但不适用于我的情况,因为我的办公文档已经包含需要填写的占位符(客户必须能够自主修改的文档) )。
      【解决方案8】:

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

      首先回答你的几个问题。

      Q - 我是否忽略了什么?

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

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

      A - 是的。这样做的技巧绝对是使用 PDF 表单

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

      感谢 Justin Koivisto 的工作

      附言

      用于显示类似 pdf 表单输出的表格的解决方法 请考虑阅读Oracle Business Intelligence Publisher User's Guide - Creating a PDF Template

      【讨论】:

        【解决方案9】:

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

        我刚刚关注 these instructions 并最终执行了一个 perl 脚本,然后执行了 pdftk 命令

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

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

        【讨论】:

          【解决方案10】:

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

          ODT Files with placeholders to PDF

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-05-27
            • 1970-01-01
            • 1970-01-01
            • 2012-01-02
            • 2011-01-09
            • 2019-06-13
            • 2013-03-16
            相关资源
            最近更新 更多