如何阅读角度2.0中的pdf响应

时间:2016-11-28 09:35:44

标签: angular

%PDF-1.7 % 4 0 obj <> 流 x Z[o Fi F8H BR@ TJz! /R \ n d Jy/ w V x !WW; _#s&:T | H9c $ @,Y18 “qwr8Na @ Y8)IX4)fG_ {2" 䔼qBŸtSEg /

我从API获得了这样的回复。我试图在调用函数中读取它,但得到以下错误:

  

error = SyntaxError:位于0位置的JSON中的意外标记%   Function.Json.parse中的JSON.parse()

我的代码是:

downloadInvoice(invoicePdfUrl){
    let invoiceId = invoicePdfUrl.split('/')[2];
    try{
      this.invoiceSub = this.billingService.downloadInvoicePdf(invoiceId).subscribe(
        response => {
          this.downloadFile(response),//console.log(data),
          error => console.log("Error downloading the file."),
            () => console.info("OK");
        },
        error => {
            console.log(error);
        }
      );
    }catch(err){
      this.errorMsg = 'Something went wrong. Try again later.';
      throw err;
    }


downloadFile(data: Response){
    var blob = new Blob([data], { type: 'text/csv' });
    var url= window.URL.createObjectURL(blob);
    window.open(url);
  }

在服务中:

downloadInvoicePdf(invoiceId){
    let apiUrl = getApiUrl("GET_INVOICE_PDF", [API_PATH.API_VERSION2, invoiceId]); //this method return me the exact url to be hit based on the params
    let headers = new Headers({ 'Accept': 'application/pdf'});
    let options = new RequestOptions({
      headers : headers
    });

    return this.http.get(API_PATH.BASE_ACCOUNTS_ENDPOINT + apiUrl,options).map(res => res.json();
    // return 
  }

请指导我处理此类回复。

1 个答案:

答案 0 :(得分:2)

首先:你错过了.map(res => res.json()>>>)<<<;中的结束括号 - 也许这只是一个复制/粘贴问题。

但是现在问题是:您收到PDF作为回复,并尝试使用JSON-Parser解析PDF响应 - &gt;这不起作用,就像有一个中文文本,并期望有人不知道汉字是什么来理解这个文本。

根据您的使用情况,您需要:

  1. PDF-Parser 如果您想提取数据
  2. PDF-Renderer 如果您想显示PDF (例如:https://mozilla.github.io/pdf.js/
  3. 文件下载程序如果要将该文件下载到用户本地系统(例如:https://github.com/eligrey/FileSaver.js/) (虽然有更好的方法可以做到这一点,而不是角度http-client。)
  4. =&GT;对于简单的文件下载以及由于您正在执行GET-Request,如果您只是生成download-url并将其绑定到模板中的anchor-tag,那么它将是最简单的:

    <a [attr.href]="pdfDownloadLink">Download me!</a>