【问题标题】:Issue while printing pdf files from Blob angular从 Blob 角度打印 pdf 文件时出现问题
【发布时间】:2020-11-21 01:26:14
【问题描述】:

我有一个返回格式为

的数据的API
{ fileName: string, blob: Blob }[]

我想打印所有这些文件,所以我正在使用

_files.forEach((_fileInfo) => {
      const blobUrl = URL.createObjectURL(_fileInfo.blob);
      const oWindow = window.open(blobUrl, "print");
      oWindow.print();
      oWindow.close();
});

这会打开多个打印窗口,但在预览中会显示空白文档。

但是当我以 zip 格式下载所有这些文件时,它会下载正确的 PDF 文件。

// add files to zip
files.forEach((_fileInfo) => {
    zip.file(_fileInfo.fileName, _fileInfo.blob);
});

// download and save
return zip.generateAsync({ type: "blob" }).then((content) => {
    if (content) {
        return saveAs(content, name);
    }
});
  1. 可能是什么问题,

  2. 有没有办法在不打开多个窗口的情况下按顺序打印所有文档?

【问题讨论】:

  • 它对单个文件是否正常工作,没有循环?
  • 不,它在预览中显示空白文档
  • 你能指定什么是_files 集合,例如你如何获得_fileInfo 的值?
  • @AlenaKastsiukavets,printJs 完成了这项工作,我的意思是现在它显示了正确的 PDF 预览,现在唯一的问题是合并 pdf,有什么方法可以单击打印多个 PDF 文件。跨度>

标签: javascript angular blob


【解决方案1】:

加载PDF文件需要时间,这就是为什么它显示空白文档,所以我使用print-js来解决这个问题。

如何导入

import * as printJS from "print-js";

如何使用

const blobUrl = URL.createObjectURL(_fileInfo.blob);
printJS(blobUrl);

【讨论】:

    【解决方案2】:

    如果你不想使用 printJS

    我遇到了同样的问题,但就我而言,我一次只需要处理一个文件。我通过将打印功能放在超时块中来解决它,所以在你的情况下,这将是

            setTimeout(function(){
                oWindow.print();
            }, 1000)
    

    如果这很好用,如果没有,那么您可能还需要将窗口的源设置为等于您创建的“blobUrl”。这应该在您退出循环后完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2019-06-17
      • 1970-01-01
      • 2020-03-15
      • 2016-01-03
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多