【问题标题】:Unable to display a PDF file in Angular app无法在 Angular 应用程序中显示 PDF 文件
【发布时间】:2020-08-03 18:27:48
【问题描述】:

我有一个 PDF 文件存储在应用程序 (assets/pdf/fileName.pdf) 的目录中。我需要在对话框中单击按钮时将其显示在新选项卡上。

在查看了各种答案后,这是我所拥有的:

在 *.component.ts 中:

  openPDF() {
    this.myService.fetchPDF().subscribe(
      res => {
        let file = new window.Blob([res], {type: 'application/pdf'});
        let fileURL = window.URL.createObjectURL(file);
        window.open(fileURL, '_blank');
      }
    );
  }

在 *.service.ts 中:

  fetchPDF(): any {
    const path = 'assets/pdf/fileName.pdf';
    return this.httpClient.get(PathResolver.resolveStatic(path),{responseType : 'blob'});
  }

我已经尝试过使用responseType : 'arraybuffer',但也没有成功。

这是我看过的主题:

【问题讨论】:

  • 你当前代码的结果是什么?
  • @amanpurohit:在 Chrome 上,新标签页会立即打开和关闭。在 Firefox 上,我能够看到错误,说明 PDF 文件行中的某些内容已损坏或无效。

标签: angularjs angular


【解决方案1】:

我不确定你为什么使用httpClient。您想要的结果可以通过以下代码简单实现

在 *.service.ts 中:

fetchPDF(): any {
  const path = 'assets/pdf/fileName.pdf'
  return path;
}

在 *.component.ts 中:

openPDF() {
  window.open(this.myService.fetchPDF(), '_blank');
}

【讨论】:

  • 我用不同的 PDF 文件尝试了你的建议,但在 Firefox 上,它们都得到了 304 响应代码,而在 Chrome 上,它们显示“加载失败”错误。
  • 在进行本地 maven 构建后,我查看了“目标”文件夹。 pdf文件似乎格式不正确。当我打开它时,它只是一个空白文档。知道为什么吗?
  • 事实证明 maven 构建损坏了 .pdf 文件。我按照这个答案中的说明进行了操作,并且 pdf 文件被渲染得很好:stackoverflow.com/a/16088835/4570571
【解决方案2】:

您将需要使用 html 嵌入标签(很可能也使用安全管道)、PDF 查看器(如 Google PDF Viewer),或者您可以在新选项卡中打开 PDF(这是我更常用的方法看)。这取决于您的喜好。

【讨论】:

  • 我的意图是在新选项卡中显示 PDF。您对修改我现有的代码有什么建议吗?
  • 把它放到一个带有_blank属性html <a _blank href="/path/to/your/file.pdf">Open My PDF In New Tab</a> 标签中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 2017-10-08
  • 2020-06-11
  • 2018-03-26
相关资源
最近更新 更多