带PDF输出的PHP PDF模板库?

时间:2010-12-11 12:24:33

标签: php pdf odt

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

要求:

  • 不需要第三方网络服务

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

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

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

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

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

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

PHPDOCx声称能够完全按照我的要求行事 - 但是他们没有提供试用版本,我不会在包里买一只猫,特别是当它似乎没有时em>没有其他产品在网络上执行此操作。我发现很难相信他们可以毫无问题地做到这一点 - 如果您使用该产品成功完成了这项工作,请在这里删除一行。

我忽略了什么吗?

有没有办法使用PDF表单?我在OpenOffice 3中创建源文档。

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

  

更新 * 唉! *我被叫出了办公室,赏金在此期间到期了。开始一个新的赏金:就我的测试显示,没有任何解决方案可以完美地为我工作。

     

更新II:我很快就会看到pdftk的方法,但我还要再开一次收集额外输入的奖励。现在这个问题在赏金中看到了1300个重复点,必须是某种记录:)

17 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:13)

佩卡,

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

pdftk 一般非常有用,值得一看。

更新:点击此处:http://php.net/manual/en/book.fdf.php

答案 2 :(得分:7)

你没有免费一个要求,所以我要建议LiveDocX。他们有免费选项,但它不符合您的而不是第三方要求,这意味着您必须对其进行服务器许可。)

还有一个ZF包:

答案 3 :(得分:5)

您是否考虑过使用XSL:格式化对象(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/

答案 4 :(得分:3)

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

答案 5 :(得分:3)

fpdf并且还有另一个扩展程序,我不记得了,它允许您导入模板

答案 6 :(得分:3)

这不符合你的“无二进制”任务,但PDFlib有一个很好的模板系统使用“块”,这是PDFlib特定的元数据,你可以使用Acrobat插件“绘制”成PDF,然后在运行时以编程方式填充每个块的单个函数调用。块可以是文本(使用伪html进行字体/大小/颜色的简单文本格式化),图像(大多数可以用PDF格式显示的内容)和PDF本身,因此您可以嵌入整个其他文档或片段块中的文档。

它可以从预先存在的PDF(加载它,插入内容/填充块等等,输出),或从头开始构建一个新的PDF(以编程方式,但可能非常痛苦)来做到这一点。

我成功地使用这些块为客户端生成一个简单的模板系统,在这里他们可以将块绘制到嵌入了少量元数据的文档中,然后在服务器端进行解析以生成表单以提示数据在文档生成时插入到这些块中。

答案 7 :(得分:2)

PDFlib很好,您的共享主机可能已经拥有它。我能够很容易地用PDFlib完成像http://www.housejockey.com/flyers/12/80/MyListing.pdf这样的事情,但基本的技术是插入段落文本...你说的不好。

我还使用abcPDF for ASP / ASP.NET,发现它非常适合在PDF内部进行挖掘,但同样不适合在现有文本区域内进行挖掘。

使用强大的模板和占位符是嵌入式内容之上的复杂性的飞跃。通常无法回流PDF中的现有文本。它需要额外的文档结构,这是XMPie和Creo等昂贵的可变数据软件包的设计目的......

PHPDOCX开始听起来真的很棒! 祝你好运。

答案 8 :(得分:2)

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

答案 9 :(得分:1)

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

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

答案 10 :(得分:1)

好的,我正试着帮你解决一下这个问题。

首先回答你的几个问题。

问:我忽略了什么吗?

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

问:有没有办法使用PDF表格?

A - 是的。绝对正确的做法是使用PDF表格

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

感谢Justin Koivisto的工作

P.S

有关显示pdf表格输出等表格的解决方法 请考虑在Oracle Business Intelligence Publisher User's Guide - Creating a PDF Template

上阅读一些内容

答案 11 :(得分:1)

我能够通过名为phpdocx(https://github.com/djpate/phpdocx)的github上的库替换.docx中的占位符值(不是其他地方引用的那个)

然后我成功地在我的主机的web服务器上放了一个可移植版本的libreoffice,我用PHP调用它来执行从.docx等到pdf的命令行转换。在飞行中。我在主持人的网络服务器上没有管理员权限。以下是我所做的博客文章:

http://geekswithblogs.net/robertphyatt/archive/2011/11/19/converting-.docx-to-pdf-or-.doc-to-pdf-or-.doc.aspx

这部分回答了你的问题。我希望它有所帮助。

答案 12 :(得分:1)

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

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

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

这里描述的工具也可以在Debian上找到,以防万一你想知道。

答案 13 :(得分:0)

这有点迟了,但看看PDFTemplate图书馆,你可以做得很好。您可以创建Open Document文件(odt)并在其中添加占位符。 PDFTemplate库可以填写这些占位符(即使是图像)并创建PDF文件。

ODT Files with placeholders to PDF

答案 14 :(得分:0)

如果您愿意使用外部服务,PDF Otter可以解决您的问题。有一个免费的计划,您可以注册并立即集成到您的应用程序中。

使用PDF Otter的其他专业人员在您的应用程序中包含较少的依赖项,并且选择您需要填写的字段会更友好(我使用手动试错法来获取过去字段的位置,以及它很费时间。)

答案 15 :(得分:0)

DOM Pdf和mPdf是可用于实现此目的的两个库。

答案 16 :(得分:0)

我建议您看看Aspose.Word Cloud SDK。 使用此库,您可以基于DOCX,ODT生成PDF,以及转换,创建,修改文件。

它与MS Office或OpenDocument没有任何依赖关系,因此您不需要安装它们。 Aspose有30天的试用期。

注意:我是Aspose的开发人员布道者。