用 PHP 填写 PDF 表单 [关闭]

Posted

技术标签:

【中文标题】用 PHP 填写 PDF 表单 [关闭]【英文标题】:Filling PDF Forms with PHP [closed] 【发布时间】:2010-09-09 19:46:00 【问题描述】:

是否有 php 库可用于填写 PDF 表单,然后将它们保存(展平)为 PDF 文件?

【问题讨论】:

这个问题的编辑版本希望是重新打开的一个很好的候选人。它已被浏览超过 36K 次,并且有有趣的答案。 @jah:这是一个图书馆推荐问题,本质上是题外话。即使它要重新打开,它也会以更确切的理由再次关闭。 @jah:也许如果您改写问题“在 PHP 中,我如何填写 PDF 表单,然后将它们保存(展平)到 PDF 文件。”似乎有些人无法理解“图书馆”这个词。 【参考方案1】:

这里提到的库和框架都不错,但如果你只想填个表格然后把它展平,我推荐命令行工具pdftk(PDF Toolkit)。

见https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/

可以从php调用命令行,命令是

pdftk formfile.pdf fill_form fieldinfo.fdf output outputfile.pdf flatten

您需要找到 FDF 文件的格式才能生成填写字段的信息。这是一个很好的链接:

http://www.tgreer.com/fdfServe.html

[编辑:上面的链接似乎失效了。这里有更多信息...]

pdftk 命令可以从 PDF 格式文件生成 FDF 文件。然后,您可以使用生成的 FDF 文件作为示例。表单域是 FDF 文件的一部分,看起来像

...
<< /T(f1-1) /V(text of field) >>
<< /T(f1-2) /V(text of another field) >>
...

您还可以查看php-pdftk,这是一个特定于 PHP 的库。我没用过,但评论者Álvaro(下)推荐它。

【讨论】:

迟到 +1 给你,先生。搜索,找到这个,解决了我的问题。 fdf 文件可能出现的 UTF-16 问题在下面的单独答案中得到解决。 这是一个跨平台和跨语言的解决方案,但由于问题被标记为 PHP,我会推荐 php-pdftk 来处理内部问题。我的第一次测试令人印象深刻。 谢谢阿尔瓦罗。由于这个答案比那个项目早了大约 6 年,所以当时我并不知道。【参考方案2】:

对已接受的答案大加赞赏,如果您遇到 fdf 文件的编码问题,还有一点提示。如果您生成 fields.fdf 并在运行时

file -bi fields.fdf

你得到

application/octet-stream; charset=binary

那么您很可能遇到了 UTF-16 字符集问题。 尝试通过

转换ftf
cat fields.fdf | sed -e's/\x00//g' | sed -e's/\xFE\xFF//g' > better.fdf

然后我可以编辑 better.fdf 文件并将其导入我的 PDF 表单。

希望这可以为某人节省一些谷歌

【讨论】:

非常有帮助,谢谢!如此棒的社区。​​span> 【参考方案3】:

我在使用提交到使用 fpdf 并将表单字段作为获取变量传递的 php 脚本的表单方面取得了很大的成功(也许不是一个很好的最佳实践,但它确实有效)。

 <?php
require('fpdf.php');
$pdf=new PDF();
$pdf->AddPage();
$pdf->SetY(30);
$pdf->SetX(100);
$pdf->MultiCell(10,4,$_POST['content'],0,'J');
$pdf->Output();
?>

你可以有这样的东西。

  <form action="fooPDF.php" method="post">
     <p>PDF CONTENT: <textarea name="content" ></textarea></p>
     <p><input type="submit" /></p>
    </form>

这个骨架示例应该可以帮助您入门。

【讨论】:

Dhek 模板编辑器可用于定义您要在 PDF 上写入数据的区域,使用单独的模板可以在合并数据时在 PHP 中加载以获得边界/坐标:github.com/applicius/dhek。 【参考方案4】:

用php生成fdf文件: 见http://www.php.net/manual/en/book.fdf.php

然后用 pdftk 将其填充到 pdf 中(见上文)

【讨论】:

【参考方案5】:

为:

输入格式比 XFDF 更简单 真正的 UTF-8(俄语)支持 完整的php使用示例

请随时查看我的PdfFormFillerUTF-8。

【讨论】:

【参考方案6】:

看起来这是covered before。使用 Zend Framework PDF 库点击查看相关代码。

【讨论】:

是的,我看到了那个回复。但是,我想知道是否有一些专门用于处理 PDF 表单的库,而不仅仅是平面 PDF 文档。【参考方案7】:

我们在工作中使用PDFLib。付费版本不是很贵,而且有一个更有限的开源版本,如果你买不起付费版本的话。

【讨论】:

【参考方案8】:

我写了一个 Perl 库 CAM::PDF,带有一个 command-line interface 可以解决这个问题。几年前我尝试使用 FDF 解决方案,但发现它太复杂了,这就是我首先编写 CAM::PDF 的原因。我的库使用一些启发式方法将表单替换为所需的文本,因此它并不完美。但它在大多数情况下都能正常工作,而且速度快、免费且使用起来非常简单。

【讨论】:

太棒了。太糟糕了,我不知道如何在 PHP 脚本中使用 Perl ...

以上是关于用 PHP 填写 PDF 表单 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

用 PHP 编辑 PDF? [关闭]

从 PDF 表单中提取 PDF 表单字段名称

使用 PHP 填充 PDF 表单

在 ASP.NET 中将 MS Word 文档转换为 PDF [关闭]

Adobe Reader来填写的表单无法保存,我怎么做pdf表单才能使别人可以用Adobe Reader来填写的表单能保存

如何使用 pdfbox 用特定字体填写 PDF 表单?