使用PHP填写PDF表单

48

是否有可用于填写PDF表单并将其保存(扁平化)为PDF文件的PHP库?


4
这个编辑过的问题希望重新开放。它已经被查看了超过36,000次,并且有一些有趣的答案。 - jah
@jah:这是一个关于库推荐的问题,根据其本质来说是不适合讨论的。即使它被重新开放,也会以更精确的理由再次关闭。 - BoltClock
6
或许如果您能改述这个问题,比如说:“在PHP中,我该怎么样去填写PDF表格,然后将它们保存(压平)成PDF文件。” 看起来有些人无法超越“库”的概念。 - bmb
8个回答

50
这里提到的库和框架不错,但如果你只想填写表单并将其展平,我建议使用命令行工具pdftk(PDF工具包)。
请参见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(下面)推荐它。


2
您晚了一步 +1,先生。搜索后找到了这个,解决了我的问题。 - Damovisa
1
UTF-16问题可能会在fdf文件中出现,下面有一个单独的答案来解决这个问题。 - Val Redchenko
4
这是一个跨平台和跨语言的解决方案,但由于问题标记为PHP,我建议使用 php-pdftk 处理内部操作。我的第一次测试效果非常好。 - Álvaro González
谢谢Álvaro。由于这个答案比那个项目早了大约6年,所以当时我不知道它。 - bmb

5

对于已被接受的答案表示赞同,如果您在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表格中。希望这能帮助有需要的人,避免不必要的谷歌搜索。

非常有帮助,谢谢!这是一个非常棒的社区。 - Khom Nazid

3

我使用一个表单,将表单提交到一个使用fpdf的php脚本,并将表单字段作为get变量传递进去,这种方法非常成功(也许不是最好的最佳实践,但它有效)。

 <?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>

这个基础示例应该能帮助您入门。

1
Dhek模板编辑器可以用于定义您想要在PDF上编写数据的区域,使用单独的模板,当合并数据时可以在PHP中加载,以获取边界/坐标:https://github.com/applicius/dhek。 - cchantep

3

3

针对以下需求:

  • 比XFDF格式更易于输入
  • 真正支持UTF-8编码(包括俄语)
  • 提供完整的php使用示例

欢迎查看我的PdfFormFillerUTF-8


1

我写了一个Perl库CAM::PDF,带有一个命令行界面,可以解决这个问题。几年前我尝试使用FDF解决方案,但发现它太过复杂,这就是我首次编写CAM::PDF的原因。我的库使用一些启发式方法来替换表单中的所需文本,因此它并不完美。但它大多数时候都能工作,并且速度快、免费且非常容易使用。


太棒了。可惜我不知道如何在 PHP 脚本中使用 Perl... - Mort 1305

1

是的,我看到了那个回复。不过,我想知道是否有一些专门用于处理PDF表单而不仅仅是平面PDF文档的库。 - mno

1

我们在工作中使用PDFLib。付费版本并不是很昂贵,而且还有一个更为有限的开源版本,如果您无法支付付费版本的费用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接