Javascript 使用Java服务器端在iFrame上显示生成的PDF文件

Javascript 使用Java服务器端在iFrame上显示生成的PDF文件,javascript,iframe,playframework,pdf-generation,Javascript,Iframe,Playframework,Pdf Generation,我目前正在开发一个Java应用程序,使用Play!框架2。 在某些页面中,我需要在服务器上生成一个PDF文件,然后将其发送到浏览器并显示在iframe或嵌入标记上 我正在使用Play将文件发送到客户端!结果机制: File resultFile = new File(outputFilePath); response().setHeader("Content-Length", Long.toString(resultFile.length())); return ok(resultFile).a

我目前正在开发一个Java应用程序,使用Play!框架2。 在某些页面中,我需要在服务器上生成一个PDF文件,然后将其发送到浏览器并显示在iframe或嵌入标记上

我正在使用Play将文件发送到客户端!结果机制:

File resultFile = new File(outputFilePath);
response().setHeader("Content-Length", Long.toString(resultFile.length()));
return ok(resultFile).as("application/pdf");
在客户端,我接收该文件,并使用
createObjectUrl
获取要传递到iframe的URL

window.URL = window.URL || window.webkitURL;
var file = new window.Blob([result], { type: 'application/pdf' });
var fileUrl = window.URL.createObjectURL(file);
$("#displayDoc").attr("data", fileUrl);
所有这一切的结果都很奇怪:iFrame显示,显示的页面与我的文档中的页面一样多,但所有页面都是空的。我在Chrome的Dev Tools插件上发现了这个错误:
资源被解释为文档,但使用mime类型应用程序/pdf chrome传输

有人知道发生了什么事吗

谢谢


劳里斯

有几种方法可以解决这个问题

第一种方法,以及什么可能更符合您的实际问题

生成PDF服务器端,然后将其转换为HTML

然而,这并不像听起来那么困难,有很多工具可以做到这一点,比如“PDF2DOM”(),它将接受现有的PDF表示并从中创建一个HTML dom,然后可以使用普通JavaScript技术将此HTML直接注入到文档中

第二种方法(特别是在使用Java时)是

使用基于浏览器的插件,可以使用和显示PDF

由于您已经在用Java开发,您可以开发一个Java小程序,它可以使用发送给它的PDF,并根据需要在IFrame中显示它,因此您还可以扩展这个想法,使用基于Flash的PDF组件,或者任何其他浏览器可以作为插件运行的组件

这种方法的问题是,浏览器制造商越来越倾向于采用HTML5,不再允许第三方内容出现在浏览器中。Chrome&FF仍然支持一些插件,IE11也是如此,但随着我们的发展,特别是进入平板电脑的新世界,许多浏览器将不允许运行插件,这意味着从长远来看,这可能在现在起作用,但可能不会长久

第三种方法是

利用本机浏览器支持

如今,Chrome和Firefox都内置了PDF阅读器,可以直接在浏览器选项卡中显示PDF文档,就像它是一个普通的HTML页面一样

然而,这里的关键是“在一个选项卡中”,在大多数情况下,可以显示PDF的浏览器会希望尝试将其显示为完整的选项卡资源

可以在IFrame中呈现PDF,但不同浏览器的支持程度差别很大,IE8及以下版本仅在安装了Adobe Acrobat等插件的情况下才会显示

您可以尝试的一种可能途径是使用类似“PDFObject”()的东西将内容呈现为内联对象,这至少会尝试让浏览器将PDF视为HTML5中的对象,然后您可以在客户端上使用JS中的其他代码来处理

然而,我给你们的建议是出于兼容性的原因,若你们想尽可能地利用服务器端,那个么选项一可能是你们最好的选择

至于您的chrome文档类型错误,这是一个很容易解决的问题。:-)

您使用正确的MIME类型(application/pdf)发送了内容,但就chrome而言,当它收到内容时,文档看起来不像pdf文件

当您将mime类型设置为PDF以发送PDF,然后发送HTML时,通常会发生这种情况(例如:因为发生了服务器端错误,而web服务器发送了错误页)


希望这里有什么东西能指引你正确的方向。

谢谢你的帮助!不幸的是,这些解决方案对我都不起作用。我试过PDFObject和Pdf2Dom,但都没能成功。但是我解决了我的问题,我将我的播放控制器的URL设置为iFrame,该控制器提供PDF文件,并将内容配置设置为“inline”。很好,很高兴你对它进行了排序