当前位置: 首页 > 面试题库 >

如何从我的angularjs应用发送的iOS上显示PDF(Blob)

岑和风
2023-03-14
问题内容

我的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中没有正确检索到的问题。以下代码可以正常工作:

window.URL = window.URL || window.webkitURL;

即使这样,它也无法在Chrome iOS,Opera iOS上运行…因此,在深入研究互联网并受到以下问题启发之后:

  • Blob createObjectURL下载在Firefox中不起作用(但在调试时有效)
  • 如何在Chrome iOS上打开Blob URL
  • 在角度应用程序中显示Blob(.pdf)

…我最终得到以下代码(可在除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;
}


 类似资料:
  • 问题内容: 我一直在尝试显示我从响应中获取的pdf文件。pdf必须使用例如在应用程序内显示。 我遇到了几个堆栈帖子,但是以某种方式我的示例似乎不起作用。 JS: 根据这份文件,我继续尝试… 现在,据我所知,将创建一个临时URL,该博客可以用作参考。 HTML: 我不确定如何在Angular中处理此问题,理想情况是 (1) 将其分配给作用域, (2) 将blob“准备/重建”到pdf (3) 使用,

  • 我正在尝试使用Swift在我的iOS应用程序中显示pdf。我从服务器得到的响应是pdf数据,它看起来如下所示: %PDF-1.4%ôiá1 0 obj 我检查了iOS PDF阅读器和PDFKit,但主要问题是我不明白如何处理应用程序中的响应。 有什么想法吗?谢谢!

  • 我一直试图显示pdf文件,我从一个响应中得到一个blob。pdf必须使用

  • 有人能告诉我如何从Java中的HTTP触发器Azure函数发送pdf响应吗。 一旦该功能被触发,我需要从Azure存储中读取pdf,并将pdf作为响应返回到浏览器。

  • 我正在用Android开发一个应用程序。我不知道如何从应用程序发送电子邮件?

  • 问题内容: 我从这段代码中从laravel dompdf返回流数据 这是我的JS ajax代码 这是在ajax之后显示pdf的HTML 我低于错误 无法加载PDF文档 请帮助解决此问题。如何显示PDF文件。 问题答案: 默认情况下没有设置。您可以使用polyfill,例如实现二进制数据传输的jquery- ajax-blob-arraybuffer.js ,也可以利用。 。用element代替el