【发布时间】:2015-05-15 02:59:43
【问题描述】:
我有一个动态生成 PDF 的应用程序(通过 service/generatePdf 访问)。
它返回一个带有 content-type="application/pdf" 的 HTTP 响应,并将 outputStream 设置为二进制内容。
根据业务规范,当用户单击按钮时,我们需要打开一个显示该 PDF 的新窗口/选项卡。
提交下面的表格,这一切都可以在 Happy Path 上完美运行,其中响应是实际的 PDF。
<form action="service/generatePdf" method="post" name="PdfForm" target="_blank">
但是,当 PDF 因任何原因无法生成时,效果不佳。例如,假设 HTTP 响应 outputStream 为空。
我想要能够做的是在第一页上显示一条漂亮的错误消息,而不是打开新窗口/标签。
但似乎没有任何方法可以做到这一点。您的选择似乎是
- 返回一个有效的 PDF,或者
- 浏览器的 PDF 插件如何处理损坏的文件
我尝试过 jQuery、Ajax、jQuery Form Plugin、jQuery Download plugin 插件,但似乎没有任何效果。
【问题讨论】:
-
我很欣赏这种热情,但是当我说“我有一个应用程序”时,我的意思是我继承了一个 REST Java 应用程序,其(部分)URL 是“service/generatePdf”(实际的 URL 是无关)。我负责生成 PDF 的 REST 应用程序和使用它的 Javascript。
-
如果它是真正的 REST 服务,那么您应该能够检查 HTTP 响应 Status Code 并确定操作是否成功。如果是,您可以在响应正文中获取 base64 字符串并将其作为新窗口打开。见stackoverflow.com/a/2805990/211627
-
我已经看到了,我认为它接近我所需要的。不幸的是,我们需要支持 IE8,当 PDF 太大时,该解决方案会失败。但这个概念正是我所需要的。
-
告诉“他们”,您可以立即为除 IE8 之外的所有浏览器解决此问题。那个浏览器比较复杂,解决方案会带你about 10 months。
-
哈! :) 要是。相信我,IE8 是我存在的祸根,也是 P.O.S.死得不够快。
标签: javascript jquery rest pdf