如何在调用 servlet 后使用 ajax 在 iframe 中显示 PDF
Posted
技术标签:
【中文标题】如何在调用 servlet 后使用 ajax 在 iframe 中显示 PDF【英文标题】:How to display a PDF in iframe with ajax after calling a servlet 【发布时间】:2017-05-29 08:14:11 【问题描述】:当我想在 iframe 中显示 PDF 时遇到问题(使用属性 src)。PDF 永远不会从浏览器中下载。 在某些情况下,我需要使用 ajax 调用在弹出窗口中显示消息。 生成 PDF 的 servlet 代码有效,因为目前我们直接在 iframe 的 src 属性中使用它。
<iframe src="myServlet" />
但是当我使用带有 ajax 调用的 servlet,并且我想在 iframe 中添加 PDF 的内容时,它不起作用。 我不知道为什么。 这是js的一个例子:
$.ajax(
url: "myServlet",
...
complete: function(data)
var blob = new Blob([data], type: 'application/pdf' );
var downloadUrl = URL.createObjectURL(blob);
$('#myframe').attr("src", downloadUrl);
);
我尝试使用 chrome,但出现错误: jquery-2.1.3.js?ts=13012017:3 GET data:application/pdf;base64,blob:http://localhost:8180/d21d82b6-8254-4a38-907e-129b3ac037fanet::ERR_INVALID_URL
我可以看到我有一个二进制文件的数据: %PDF-1.4 %���� 3 0 对象 流 x��PU��^A��e�(�...................... ..................... 起始外部参照 38448 %%EOF
对不起,我这里(家里)没有代码,但我认为解释很清楚。 如果我将 ajax 与 iframe 和属性 src 一起使用,我不知道为什么无法下载 PDF。 你有什么想法吗?
谢谢。 弗雷德
【问题讨论】:
【参考方案1】:这对我有用。
$.ajax(
url: "myServlet",
...
complete: function(data)
$('#myframe').attr('src','data:application/pdf;base64,'+data);
);
此外,您应该以这种方式编码 ajax ans base64_encode($data)
。
希望对您有所帮助。
【讨论】:
【参考方案2】:在 javascript 中,要对 ajax 答案进行编码,您应该这样做:
var enc = btoa(data)
如果你有问题,你应该试试这个:
var enc = btoa(unescape(encodeURIComponent(data)))
然后
$('#myframe').attr('src','data:application/pdf;base64,'+ enc);
【讨论】:
以上是关于如何在调用 servlet 后使用 ajax 在 iframe 中显示 PDF的主要内容,如果未能解决你的问题,请参考以下文章
ajax上传文件后,后台java如何接收(求后台接收的完整代码)
html页面里的ajax调用servlet,html里没有form表单
在jsp中调用ajax送了一个需下载的文件名给servlet,下载完成文件后需用需返回一个字符串,但是总是出错