2014-07-16 46 views
1

我正在从servlet创建可编辑的pdf。用户输入数据并单击提交按钮。提交按钮的动作定义为“button.setAction(PdfAction.createSubmitForm(”/ fdf“,null,PdfAction.SUBMIT_XFDF))”。'com.itextpdf.text.exceptions.InvalidPdfException:从servlet读取输入流时未找到PDF头标签

当我尝试使用 FdfReader reader = new FdfReader(request.getInputStream())将表单字段读回服务器时,我不断收到'找不到PDF头部签名'的上述错误。 在调试错误的地方,生成的pdf有'%PDF-'。但不知何故,当输入流被读取时,我得到这个错误。

任何帮助将不胜感激。

回答

1

你说你提交数据为XFDF(这是FDF的XML版本)。但是,您尝试使用FdfReader而不是XfdfReader读取此数据。 FdfReader需要使用PDF语法编写的文件,该文件以%PDF-1开头。您将收到一个写在XML文件中,并启动与:

<?xml version="1.0" encoding="UTF-8"?> 
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"> 

由于<?xml%PDF-1完全不同的(这是PDF头标识),你不应该被错误感到惊讶。它说明您输入到FdfReader的数据到底出了什么问题。

在代码中用XfdfReader替换FdfReader并解决您的问题。

+0

非常感谢您指出这一点。是的,'header signature'上的服务器端错误不再出现。但客户端的Adobe Reader仍然弹出错误对话框“在提交过程中发生错误,无法处理类型的内容”。我认为这是由于服务器端错误。但即使没有服务器端错误,该对话框仍然显示。我正在使用Adobe Reader XI。请告诉我。另外,我真的很想欣赏使用PDF API的简单易用,这是非常棒的工作。 – user3207455

+0

你的服务器端代码发送到浏览器是什么?我的猜测是:我认为你发送的HTML不能被PDF阅读器处理。您应该返回一个PDF文件或没有任何内容(响应代码204:无内容)。 –