Html 如何通过HTTP提交PDF表单数据?
简单地说,我正在开发一个处理PDF表单的应用程序。提交数据格式为XFDF。到目前为止还不错,但我从客户那里得到了一些非常奇怪的行为 PDF查看器是IE中的Adobe Reader(目前为11.0.6)。这是一个内部应用程序,因此现在不需要支持任何其他内容。PDF是在服务器上动态创建的,因此我必须在浏览器中而不是在独立应用程序中执行此操作 工作流程如下:Html 如何通过HTTP提交PDF表单数据?,html,forms,http,pdf,adobe-reader,Html,Forms,Http,Pdf,Adobe Reader,简单地说,我正在开发一个处理PDF表单的应用程序。提交数据格式为XFDF。到目前为止还不错,但我从客户那里得到了一些非常奇怪的行为 PDF查看器是IE中的Adobe Reader(目前为11.0.6)。这是一个内部应用程序,因此现在不需要支持任何其他内容。PDF是在服务器上动态创建的,因此我必须在浏览器中而不是在独立应用程序中执行此操作 工作流程如下: 将向用户发送一封电子邮件,其中包含指向应用程序内部URL的链接 用户单击链接。浏览器将打开并请求指定的URL 应用程序提供一个PDF文件(内容类
GET /static/app.css HTTP/1.1
Accept: text/css, */*
Acrobat-Version: 11.0.6
Accept-Language: en-GB
Content-Type: application/vnd.adobe.xfdf; charset=utf-8
Content-Length: 1824
Referer: http://application/report/2014-03-28/925/
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: application
DNT: 1
Connection: Keep-Alive
Cookie: sessionid=12345
请注意,此请求同时包含内容类型和内容长度头,这对于GET请求来说已经够不寻常了,但是没有请求正文,没有一个字节,也没有1824个字节。我的服务器是IIS,它用一个400无效动词响应这个请求(不确定为什么会出现这个错误,但400本身肯定是合理的)
对状态页本身的请求不包含这些标题;这是完全正确的。出于某种原因,样式表请求会重复两个请求之前表单提交中的标题
不幸的是,通过HTTP发送PDF表单数据的文档并不多,但据我所知,我做的一切都是正确的。我假设这是Adobe Reader插件和/或IE中的一个bug;有人能想出解决这个问题的办法吗?在提交表单数据时,有几件事需要记住 a) 提交命令是什么样子的 根据AcrobatJavaScript文档,如果以FDF或XFDF形式提交,则要提交到的URL必须以#FDF结尾。这将确保传输(X)FDF。如果省略了该附加组件,Acrobat/Reader可以作为HTML帖子提交 b) 只要您在网络浏览器下运行Acrobat/Reader,答案应该是正确的。否则,读卡器无法理解服务器返回的代码;相反,您应该返回PDF或FDF
从Adobe网站获取FDFToolkit可能会有所帮助。即使您决定不使用它,文档中也有关于如何工作的合理解释。我最近遇到了这个问题。我正在通过嵌入式按钮提交一份PDF作为XFDF。我成功地保存了数据,然后返回了一个HTML响应。通过fiddler,我可以看到响应格式良好且成功(状态代码200) 当浏览器呈现响应时,它会对引用的CSS/JS文件发出额外的请求(通常)。这些请求的contentType为“application/vnd.adobe.xfdf”和contentLength,这显然对所请求的内容没有意义 我没能找到一个可靠的解决办法,但确实为我的目的找到了一个体面的解决办法。我怀疑这些请求仍然是在Acrobat Reader的上下文中发出的,因此我的想法是返回一个没有任何CSS/JS的初始响应,以满足Acrobat的要求,并将控制权完全返回给浏览器。我只返回以下内容,而不是返回重定向头或复杂内容:
<html>
<head>
<meta HTTP-EQUIV="REFRESH" content="0;url=http://example.com/myapp/mypage.html">
</head>
<body>
<h3>Submission successful, returning to XYZ</h3>
</body>
</html>
提交成功,返回XYZ
果然,随后的重定向成功了,所有JS/CSS请求的格式都很好。唯一的缺点是,用户在重定向期间短暂地看到了这个空页面,但我可以在我的项目中使用它…我的提交命令是默认的PDF表单按钮,“提交表单”操作设置为仅将字段作为XFDF发送。URL不以#FDF结尾,因为这仅用于作为FDF而不是XFDF提交。我最初尝试使用#FDF,但以另一种方式失败了(立即重复提交,没有遵循重定向)。还有一个以前版本的代码没有返回HTTP重定向,而是一个XFDF文档,它在表单本身中设置了一个状态字段,而不是返回到状态页面。这很有效,但始终需要两个选项卡。