【问题标题】:How to read pdf stream in angularjs如何在angularjs中读取pdf流
【发布时间】:2014-11-05 01:50:36
【问题描述】:

我从服务器获得了以下 PDF 流:

如何在 AngularJS 中读取这个流?我尝试使用以下代码在新窗口中将其作为 PDF 文件打开:

.success(function(data) {
   window.open("data:application/pdf," + escape(data));
 });

但我无法在打开的窗口中看到内容。

【问题讨论】:

  • 为什么你通过http传输整个文件而不是打开那个文件的url? window.open(fileUrl)?
  • @MajoB 我也尝试过这种方式,但在角度上我收到了类似 Not allowed to load local resource: failed to load file path.. 之类的错误
  • 嗨,我在 Angular2 中得到了相同类型的响应,但我无法弄清楚如何在 Angular 2 中处理此类响应。我收到错误“SyntaxError: Unexpected token % in JSON at位置 0 在 JSON.parse () 在 Function.Json.parse" 像这样。

标签: java angularjs pdf inputstream


【解决方案1】:

我通过更改控制器代码实现了这一点

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

【讨论】:

  • Ranjit,我得到的是空白 pdf,但是将“responseType”添加到 $http 的参数中,它可以工作。我才想通,抱歉迟到了。
  • 嗨,我遇到了与 Ranjit 类似的错误。在 chrome 上它说:无法加载 PDF 文档你知道如何解决这个问题吗?
  • 即使应用了修复程序,我仍然遇到同样的错误。
  • @RanjitSingh 见this ans 并替换 $window.open($sce.trustAsResourceUrl(fileURL));
  • 如何触发下载对话框而不是在新标签页中打开?
【解决方案2】:

请看下面的代码:

在控制器端 -

$http.get(baseUrl + apiUrl, { responseType: 'arraybuffer' })
          .success(function (response) {                  
             var file = new Blob([response], { type: 'application/pdf' });
             var fileURL = URL.createObjectURL(file);
             $scope.pdfContent = $sce.trustAsResourceUrl(fileURL);
           })
           .error(function () {                        
           });

在 HTML 端:

<div ng-controller="PDFController" class="modal fade" id="pdfModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg">
    <div class="modal-content" onloadstart="">
        <object data="{{pdfContent}}"  type="application/pdf" style="width:100%; height:1000px" />
    </div>
</div>

您还可以使用 Angular ng-pdfviewer 并使用它的 js 文件查看您的 pdf。

【讨论】:

    【解决方案3】:

    看看PDF.JS。这是一个客户端 javascript 库,可以获取 pdf 流并将其呈现在客户端。 Angular 无法读取 pdf,因此这不是 Angular 问题。

    【讨论】:

      【解决方案4】:

      Java:获取方法

      BLOB pdfData = getBlob_Data;
      response.setContentType(pdfData.getContentType());
      response.setHeader(ApplicationLiterals.HEADER_KEY_CONTENT, "attachment;     filename=FileName.pdf");
      response.getOutputStream().write(pdfData.getBinaryData());
      response.getOutputStream().flush();
      

      【讨论】:

      • Controller : function downloadPDF(searchManagerQuery) { // 调用 get 方法 $window.open('ServiceURL', '_blank'); }
      【解决方案5】:

      使用 config.responseType 的问题是 $http 服务仍然运行默认的 responseTransformer 并尝试将响应转换为 JSON。此外,您正在发送默认的接受标头。这是一个(未经测试的)替代方案:

      $http.get('/retrievePDFFiles', {
          headers: { Accept: "application/pdf"},  
          transformResponse: function(data) {
              return new Blob([data], {type: 'application/pdf'});
          }}).success(function (data) {
                 var fileURL = URL.createObjectURL(data);
                 window.open(fileURL);
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-06
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多