我知道奇怪的问题,但说一个页面上的隐藏字段中包含 PDF 字节数据,该页面上也有一个 IFrame。
有没有办法使用 JavaScript 将 pdf 数据写入 IFrame,以便 IFrame 将加载到 adobe 插件中并显示数据?
我们想要这样做的原因是我们无论如何都需要隐藏字段中的 PDF 数据,所以如果用户单击一个按钮,我们可以通过 JS 调用带有数据的 Java 小程序,以便它将 PDF 字节数据写入专有系统. 我们也想显示 PDF。
所以:
- PDF 字节数据(在服务器上生成)夹在隐藏字段中。
- 来自隐藏字段的 PDF 字节数据通过 StackOverflow JS 魔术的一些即将被发现的方式写入客户端到 IFrame 并因此显示。
- 当单击按钮时称为客户端的 Java 小程序传递存储在隐藏字段中的 PDF 字节数据
就像南方公园的内裤侏儒一样,我们有第 1 阶段和第 3 阶段,但没有第 2 阶段!
任何想法都感激不尽!
更多信息:
我们需要让客户端可用的字节数据通过 JS 调用传递给 Java 小程序。我们目前通过一个隐藏字段来执行此操作。没关系,它工作得很好。
问题在于,只有在单击 ajax 模式对话框上的 OK 按钮时才会调用 applet(“你想将此文档发送到 UglyProprietorySystem 吗?”)。
众所周知,您不能在 adobe 插件显示器上放置任何东西。显然,如果整个页面是 PDF 类型,那么任何 JS 都没有地方显示对话框,因此这将不起作用,如果您使用 IFrame,您仍然无法在插件显示的内容之上放置任何内容(它是实际上是另一个应用程序的领空,并且违反了这简直是粗鲁!)。
我们通过以下方式解决了这个问题:
- 最初显示通用 PDF 文档的模糊图像并在其上弹出模式对话框。
- 当用户响应我们调用(或不调用)java 应用程序的对话框时,使用隐藏字段中的 pdf 字节数据
- 然后我们在清除隐藏字段后发回(哇!发回带有 PDF 二进制数据的表单不受服务器的欢迎!)
- 然后,在后面代码的 page_load 中,我们在回发时使用 PDF 字节数据写入响应流,将 contentype 设置为 appplication/pdf,从而显示 pdf。
迷人的。这一切都有效,让我们得到了我们想要的东西。
唯一的问题是我们要么需要:
* generate the PDF data twice (once on initital page_load for the clientside call to our applet and then again on postback to display).
或者
* We store the PDF byte data in the session after the first response so as to be able to, after the postback, still have the pdf data to be able to display it.
两者都不是很好,但我们选择了后者,但现在我们认为如果可以的话,我们想避免这种情况。
因此,生成 PDF 的想法,将其放入隐藏字段,在页面上有一个按钮以通过小程序调用将 PDF 保存到我们的专有系统,并在隐藏字段中将客户端上已有的数据写入 IFrame从而显示它。
呸!
这就是为什么我们想在客户端使用 JS,将 pdf 二进制数据写入 IFrame,并将其内容类型设置为 application/pdf,以便浏览器加载 adobe 插件并显示它。