如何通过HTTP提交PDF表单数据?

时间:2014-04-03 13:25:20

标签: html forms http pdf adobe-reader

我正在开发一个应用程序,简而言之,它处理PDF表单。提交数据格式为XFDF。到目前为止,这么好,但我从客户那里得到了一些非常奇怪的行为。

PDF查看器是IE中的Adobe Reader(目前为11.0.6)。这是一个内部应用程序,因此现在无需支持任何其他内容。 PDF是在服务器上动态创建的,因此我必须在浏览器而不是独立应用程序中执行此操作。

工作流程如下:

  1. 向用户发送一封电子邮件,其中包含指向应用程序内部URL的链接。
  2. 用户点击该链接。浏览器打开并请求指定的URL。
  3. 该应用程序提供PDF文件(内容类型application / pdf)。
  4. 用户在PDF中填写表单。
  5. 用户点击表单中的“提交”按钮。
  6. PDF查看器和浏览器以某种方式合作将表单数据POST回服务器,到 URL与表单本身略有不同(表单URL以斜杠结尾,而且 提交操作的URL是“提交/”,因此,它是附加的。)
  7. 应用程序处理数据并将303重定向返回到状态页面。 (问题 如果我发送302代替,则会发生相同的情况。)
  8. 浏览器获取状态页面(以及任何引用的资源)。
  9. 步骤8中实际发生的是:浏览器请求状态页面,但是当它到达页面中引用的CSS样式表时,它会发送:

    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
    

    请注意,此请求包含Content-Type和Content-Length标头,这对于GET请求来说是不常见的,但是有 no 请求正文,而不是一个字节,而不是1824个。我的服务器是IIS,它使用400 Invalid Verb响应此请求(不确定为什么会出现特定错误,但400这样的错误肯定是合理的。)

    状态页面本身的请求包含这些标头;这是完全正确的。出于某种原因,样式表请求会在之前的两个请求中重复提交表单中的标题。

    遗憾的是,很多文档都没有通过HTTP发送PDF表单数据,但据我所知,我正在做的一切正确。我认为这是Adobe Reader插件和/或IE中的错误;任何人都可以想到解决它的方法吗?

1 个答案:

答案 0 :(得分:0)

提交表单数据时需要注意几点。

a)你的提交命令是什么样的?

根据Acrobat JavaScript文档,如果您提交为FDF或XFDF,则提交的URL必须以#FDF结尾。这将确保传输(X)FDF。如果省略该加载项,Acrobat / Reader可能会以HTML POST格式提交。

b)只要您在webbrowser下运行Acrobat / Reader,答案就应该没问题。否则,Reader不理解服务器的返回码;相反,你应该返回PDF或FDF。

从Adobe网站获取FDFToolkit可能会有所帮助。即使你决定不使用它,文档也会对事情的运作方式做出正确的解释。