gpt4 book ai didi

php - 使用 FPDM 填充 PDF 表单

转载 作者:行者123 更新时间:2023-12-03 23:31:18 25 4
gpt4 key购买 nike

我想要完成的是使用 PHP 填充 PDF 表单。
我尝试了很多方法,我发现当我创建新表单或使用他们提供的源文件中的表单时,FPDM (FPDF) 运行良好。
我的问题是当我使用已经创建的 PDF 表单时,该表单有诸如所有者密码、文档已签名和认证等限制。我使用该应用程序删除了这些限制,其中一些仍然存在。在下面的图片中,您可以看到我当前的 PDF 的样子。

enter image description here

该 PDF 也被压缩,并且由于 FPDM 抛出了“对象流”不受支持的错误,我通过 PDFTK 将其解压缩,因此文件从 1.48 Mb 变为 6.78 Mb。

为了获取所有表单字段名称,我还使用了 PDFTK,因此我将它们保存在 txt 文件中。

根据 FPDM 的说明,我有两种方法可以做到:

第一种方法是只发送一个数组 field_name => 值以及我想更改的 PDF,就是这样。因此,当我使用上述 PDF 时,出现错误:

'FPDF 合并错误:字段 form1[0].#subform[0].Line1_GivenName[0] 未找到'

只是为了提醒我有所有的名字并且这个名字存在。

<?php
require('fpdm.php');

$fields = array(
'form1[0].#subform[0].Line1_GivenName[0]' => 'my name'
);
$pdf = new FPDM('test.pdf');
$pdf->Load($fields, false); // second parameter: false if field values are in ISO-8859- 1, true if UTF-8
$pdf->Merge();
$pdf->Output('new_pdf.pdf', 'F');
?>

另一种方法是我使用 createXFDF 函数创建 FDF 文件,然后使用 FPDM 将 FDF 合并为 PDF。这个解决方案像我想要的那样创建'new_file.pdf',但为空:)
function createXFDF($file, $info, $enc = 'UTF-8') {
$data = '<?xml version="1.0" encoding="'.$enc.'"?>' . "\n" .
'<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">' . "\n" .
'<fields>' . "\n";
foreach($info as $field => $val) {
$data .= '<field name="' . $field . '">' . "\n";
if(is_array($val)) {
foreach( $val as $opt )
$data .= '<value>' .
htmlentities( $opt, ENT_COMPAT, $enc ) .
'</value>' . "\n";
} else {
$data .= '<value>' .
htmlentities( $val, ENT_COMPAT, $enc ) .
'</value>' . "\n";
}
$data .= '</field>' . "\n";
}
$data .= '</fields>' . "\n" .
'<ids original="' . md5( $file ) . '" modified="' .
time() . '" />' . "\n" .
'<f href="' . $file . '" />' . "\n" .
'</xfdf>' . "\n";

return $data;
}


require('fpdm.php');

$pdf = new FPDM('test.pdf', 'posted-0.fdf');
$pdf->Merge();
$pdf->Output('new_file.pdf', 'F');

还有一件事,如果我尝试在 Acrobat 中打开 FDF 文件,我会收到一条消息

'您试图打开的文件包含应该放在 test.pdf 上的注释或表单数据。找不到此文档。它可能已被移动或删除。您想浏览以尝试查找此文档吗?

但文件在那里,没有移动或删除。当我手动找到它时,表单会填充。

如果有人有这方面的经验,任何帮助或建议都会有很大帮助。

提前谢谢你,武卡辛

编辑:
有关 PDF 文件的更多信息
enter image description here

最佳答案

我花了一整天的时间来解决 FPDM 的问题,很难找到有类似问题的人。

The following format worked for me: PDF 1.4 (Acrobat 5). I had to actually go to Save As -> choose Adobe PDF Optimized, then click the Settings button. From there I had to choose the version from the drop-down/fly-out menu.



我收到错误:“与快速 Web View 不兼容”或类似错误。如果在 PDF 优化设置选项中单击左侧的“清理”,则可以取消切换快速 Web View 。

现在我收到错误,PDF-Merge Error: field 'fieldname' not found。当我通过 pdftk 运行它希望解决这个问题时,我收到错误:FPDF-Merge 错误:对象数 (35) 与外部参照数 (36) 不同,某些东西,pdf 外部参照表已损坏:(

要解决此问题,我必须在 ubuntu 上下载并安装 pdftk 服务器实用程序
sudo apt-get install pdftk

安装后,如果可能,我运行此命令来修复 PDF 损坏的 XREF 表和流长度:
pdftk broken.pdf output fixed.pdf

当我打开 fixed.pdf 时,它没有任何问题并正确填充字段。哈利路亚这是世界上最烦人的问题。总而言之,我必须将 pdf 文件通过以下步骤进行处理:
  • 将 PDF 编辑为首选项
  • 另存为 > .pdf 优化 > 设置 > Acrobat 5 > 在清理下取消选中快速网络
  • 在 pdftk 中打开文件并重新保存
  • 通过 ubuntu 安装命令行 pdftk
  • 运行命令:pdftkbroken.pdf 输出fixed.pdf

  • 完毕。

    关于php - 使用 FPDM 填充 PDF 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25590323/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com