【问题标题】:Javascript: Open PDF in new tab from byte arrayJavascript:从字节数组在新选项卡中打开 PDF
【发布时间】:2015-03-27 15:27:01
【问题描述】:

我正在使用带有 HTTP 资源的 AngularJS 来调用外部 API,我的响应是一个字节数组。我需要在新窗口中将此字节数组转换为 PDF。我在这里没有看到任何非常好的跨浏览器或纯javascript的解决方案。有没有办法做到这一点?

这是我的代码:

Javascript

Document.preview({id: $scope.order.id}, function(data){

    // Open PDF Here
    var file = new Blob([data], {type: 'application/pdf'});
    var fileURL = URL.createObjectURL(file);
    window.open(fileURL);

});

【问题讨论】:

  • mozilla.github.io/pdf.js 这里有一些很好的参考
  • 我一直在看,但我没有看到任何使用字节数组的好例子。我也一直在查看stackoverflow.com/questions/21628378/…,但我只是收到一个错误“无法加载 PDF 文档”
  • 是否有任何专有插件或任何东西可以做到这一点?几页打开pdf的,我该怎么办?

标签: javascript jquery angularjs pdf bytearray


【解决方案1】:

您需要在服务调用中传递 responseType

$http.post('/Service-URL', dataTO, {responseType: 'arraybuffer'});

那么在您的数据调用成功后,这应该会在新窗口中打开 pdf:-

    getDocument()
        .success(function(data) {
            var file = new Blob([data], { type: 'application/pdf' });
            var fileURL = URL.createObjectURL(file);
            window.open(fileURL);
    })

来自这个答案:- https://stackoverflow.com/a/21730535/3645957 https://stackoverflow.com/users/2688545/michael

【讨论】:

  • @ihodonald 这是一个可选属性“名称”。这是答案中的错字。但它是可选的,所以没有必要。喜欢从这里w3schools.com/jsref/met_win_open.asp -> 我从答案中删除了它。
  • 老兄,这个东西:{responseType: 'arraybuffer'} 救了我的命。非常感谢! ?
【解决方案2】:

如果有人还在寻找,这就是我正在做的(和工作):

var pdfAsDataUri = "data:application/pdf;base64,"+byteArray;
window.open(pdfAsDataUri);

其中 byteArray 是您收到的数据。这可能不是一个好的解决方案(字节数组在 URL 中可见),但它可以工作......

【讨论】:

  • 数据 URI 并不适用于所有浏览器。尤其是最新版本的 IE。
  • 现在 chrome v60 不允许使用 window.open 从 byteArray 打开文件,它在 chrome v60 中已经贬值了
  • 用 v94 试过了,效果很好
猜你喜欢
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2019-04-12
相关资源
最近更新 更多