我已经阅读了很多相关内容,并且已经看到过提及各种库(例如FPDF),但所有方法似乎都有不必要的步骤数,创建中间文件等等。我有用户会填写在线表单,然后在服务器端完成和验证后,我想简单地将收集的数据写入现有的PDF表单。我不需要创建新的PDF。我的网站上总会有一个空白的PDF表单,我想复制,写入,然后发送电子邮件。
此外,现在确定如何对PDF表单进行反向工程以执行上述操作。也就是说,无论我使用哪个库,我都需要知道如何确定现有表单中的键名等。
有什么想法吗?
此致 布赖恩
答案 0 :(得分:1)
没有通过将值传递给文件来完成,就像字符串替换一样。还需要更多的逻辑。不是FPDF也不是PDFLib允许您填写PDF表单。你的表格似乎不是普通的AcroForm,而是一个更复杂的XFA表格。
如果您想在PHP中填写此PDF表单,请查看SetaPDF-FormFiller组件(不是免费的!)。
这很简单:
$writer = new SetaPDF_Core_Writer_Http('filled-form.pdf');
$document = SetaPDF_Core_Document::loadByFilename('form.pdf', $writer);
$formFiller = new SetaPDF_FormFiller($document);
$fields = $formFiller->getFields();
$fields['form1[0].#subform[0].Yes[0]']->push();
$fields['form1[0].#subform[0].No[0]']->pull();
$fields['form1[0].#subform[0].LastName[0]']->setValue('Wyss');
...
$document->save()->finish();
答案 1 :(得分:0)
所以,你基本上想要服务器端填充。
有各种各样的库提供这种能力,如iText,pdflib等。
另一种选择,特别是对于生产环境,将使用实用程序,例如Appligent的FDFMerge;总体成本可能会降低,具体取决于您的内部开发率。
作为替代方案,您可以通过创建一个(X)FDF文件来查看客户端填充,该文件具有对Base PDF的正确引用。在Acrobat / Reader中打开此FDF文件时,它将自动拉入基础PDF(空白表格),并填入数据。
FDF使用PDF语法,但是非常简单和纯文本(通常),并且可以使用数据库系统的文本操作工具轻松组装。 XFDF是FDF的XML表示。要创建示例FDF,您可以获取表单,完全填写表单,然后将数据导出为FDF。这就是你必须重新创造的东西。
答案 2 :(得分:0)
我找到了一个在线网站来分析现有表格。它有这样的条目:
form1[0].#subform[0].Yes[0]
form1[0].#subform[0].No[0]
form1[0].#subform[0].Yes[1]
form1[0].#subform[0].No[1]
form1[0].#subform[0].Prefix[0]
form1[0].#subform[0].LastName[0]
form1[0].#subform[0].MiddleName[0]
有些是复选框,有些是文本,有些是下拉菜单。因此,如果pdflib或fpdf都是免费的并且可以做我需要的,理想情况下我只需使用此表单信息并将POST数据直接写入PDF。那可能吗?有什么例子可以证明这一点吗?我有大约40个字段要写它的价值。
谢谢!
答案 3 :(得分:0)
好的,我找到了一个将XFA转换为AcroForm的网站。所以现在我的表格应该是AcroForm。
仍然不确定如何使用此表单来启用免费库,以便在运行时在服务器端重新创建表单。