我的Angular 1.5应用程序通过REST连接到Java / Tomcat / Spring后端服务器。
一种REST服务会生成PDF并将其发送给客户端。它在DEsktop浏览器(至少是FF,Chrome)上运行良好,但是 无论我使用的浏览器是什么(Chrome,Safari ), 我都无法在iOS(例如ipad)上看到PDF内容。
这是角度代码:
$http.get("/displayPdf", {responseType: 'arraybuffer', params: {id: 1}}). success(function(data) { var blob = new Blob([data], {type 'application/pdf'}); var objectUrl = window.URL.createObjectURL(blob); window.open(objectUrl); } );
Spring / Jax-RS代码是:
@GET @Path("displayPdf") @Produces("application/pdf") Response displayPdf(@QueryParam("id") Long id) { byte[] bytes = service.generatePdf(); return javax.ws.rs.core.Response.ok(). entity(bytes). header("Content-Type", "pdf"). header("Content-Disposition", "attachment; filename='test.pdf'"). build(); }
例如,我在这里做了研究(AngularJS:在angular应用程序中显示blob(.pdf)),但找不到合适的解决方案。
所以,请问您知道如何将生成的PDF显示给iPad / iPhone最终用户吗?
非常感谢
上面提出的解决方案都没有对我有用。
主要问题来自URLiOS中没有正确检索到的问题。以下代码可以正常工作:
URL
window.URL = window.URL || window.webkitURL;
即使这样,它也无法在Chrome iOS,Opera iOS上运行…因此,在深入研究互联网并受到以下问题启发之后:
…我最终得到以下代码(可在除iOS上的FF以外的所有iOS浏览器上使用):
if (window.navigator.msSaveOrOpenBlob) { //IE 11+ window.navigator.msSaveOrOpenBlob(blob, "my.pdf"); } else if (userAgent.match('FxiOS')) { //FF iOS alert("Cannot display on FF iOS"); } } else if (userAgent.match('CriOS')) { //Chrome iOS var reader = new FileReader(); reader.onloadend = function () { $window.open(reader.result);}; reader.readAsDataURL(blob); } else if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)) { //Safari & Opera iOS var url = $window.URL.createObjectURL(blob); window.location.href = url; }