在Angular 5应用程序中呈现PDF

在Angular 5应用程序中呈现PDF,angular,pdf,Angular,Pdf,我正在尝试在Angular 5应用程序中呈现PDF。 基本上,我发送GET请求是为了获取文件流(没有链接!这在我们的场景中是不可能的)。文件流附带内容类型:application/pdf 现在我有两个问题: 首先,从服务器返回的响应为200(这是可以的,但它总是在我的angular应用程序中报告错误: 获取PDF的方法如下所示: fetchPdfAjaxRequest(caseId: string) { this.caseListService.getPdfFileStream(ca

我正在尝试在Angular 5应用程序中呈现PDF。 基本上,我发送GET请求是为了获取文件流(没有链接!这在我们的场景中是不可能的)。文件流附带
内容类型:application/pdf

现在我有两个问题:

首先,从服务器返回的响应为200(这是可以的,但它总是在我的angular应用程序中报告错误:

获取PDF的方法如下所示:

  fetchPdfAjaxRequest(caseId: string) {
    this.caseListService.getPdfFileStream(caseId)
                        .takeUntil(this.ngUnsubscribe)
                        .subscribe( (res) => {
                          console.log(res);
                        },
                        (error) => {
                          this.errorService.displayError(error.status, error.statusText);
                        });
  }
public getPdfFileStream(caseId: string) {
    const url = this.CASE_API_URL + '/' + caseId + '/pdf';
    let headers = new HttpHeaders();
    headers = headers.set('Accept', 'application/pdf');

    return this.httpClient.get(url, {headers: headers});
  }
我的服务方法如下所示:

  fetchPdfAjaxRequest(caseId: string) {
    this.caseListService.getPdfFileStream(caseId)
                        .takeUntil(this.ngUnsubscribe)
                        .subscribe( (res) => {
                          console.log(res);
                        },
                        (error) => {
                          this.errorService.displayError(error.status, error.statusText);
                        });
  }
public getPdfFileStream(caseId: string) {
    const url = this.CASE_API_URL + '/' + caseId + '/pdf';
    let headers = new HttpHeaders();
    headers = headers.set('Accept', 'application/pdf');

    return this.httpClient.get(url, {headers: headers});
  }
然而,即使它以200作为响应,它也会进入错误分支。这可能是因为我需要在请求中设置一些额外的头吗

响应主体只是一个巨大的字符串:

// just an excerpt from the "response" tab in Chrome dev tools
JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUgKP7/KQovQ3JlYXRvciAo/v8AdwB
现在我需要解析该字符串并将其呈现为PDF格式

有人知道。。。 -为什么响应显示来自服务器的一个200,但却进入了错误分支? -如何将这个巨大的字符串(blob)呈现为PDF格式?我想到了这个lib()。作为src属性,它可以采用URL或Uint8Array(可能类似于字符串?)

非常感谢您的帮助:)

@更新:

第一个问题(没有获取文件流)的解决方案已由@Zlatko回答

现在,关于如何呈现PDF,我找到了另一篇文章,并找到了以下解决方案:

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

HttpClient的默认响应类型为“json”。告诉angular需要一个二进制文件:

return this.httpClient.get(url, { headers: headers, responseType: 'blob' });

看看文档。

我已经做了,但没有效果。但我意识到我最初想将其设置为标题,这是不正确的。您的解决方案有效,谢谢:))现在您知道如何呈现PDF了吗?这个库行得通吗?现在我想出了一个直接渲染blob的解决方案,为了帮助其他人,我在开篇文章中发布了这个解决方案。谢谢你的帮助:)很高兴它成功了。您还可以将该PDF作为blob打开,或者更别说,使用PDF.jsp打开,可能是