如何在 Angular 15 中使用“docxjs”将 docx 转换为 PDF?

问题描述 投票:0回答:2

我正在使用 https://docx.js.org/api/ 创建一些 docx 文件并下载,但我不知道如何将其转换为 PDF

这就是现在的工作方式。

public download(data: any): void {
    const documentCreator = new DocumentCreator();
    const doc = documentCreator.create(data);

    Packer.toBlob(doc).then((blob) => {
      console.log(blob);
      saveAs(
        blob,
        `Contrato ${data.place} ${_moment(data.dateEvent).format('LL')}.docx`
      );
      console.log('Document created successfully');
      this.closeModalExport();
    });
  }

export class DocumentCreator {
  // tslint:disable-next-line: typedef
  public create(diary): Document {
   //Some paragraph and texts
return document;
  }
}

但是我怎样才能将 blob 转换为 pdf 呢?

我尝试直接转换并更改blob的类型,但没有成功

let pdf = new Blob([blob], {type: 'application/pdf'});
saveAs(
        pdf,
        `Contrato ${data.place} ${_moment(data.dateEvent).format('LL')}.pdf`
      );
angular typescript pdf docx docx-to-pdf-conversion
2个回答
0
投票

不幸的是,docx.js 库不提供将 docx 文件转换为 PDF 的内置功能。您将需要使用单独的库或 API 来执行转换。


0
投票

一般来说,在不使用文件的情况下很难在二进制格式之间进行转换,这是左侧引用的问题 API 中的一个端点。布局很好,如果有点“斯巴达”(开玩笑,它是罗马字体)。右侧是使用 Windows 自己的命令行本机打印到 PDF 的单行转换,其中由于 Sans Serif 字体已被替换,因此失去了保真度。

enter image description here

因此,获得从 DocX 到 PDF 的类似转换的最简单方法是使用维护布局和样式的 DocX 阅读器/编写器。因此,最通用的(除了真正的 MS Office 或其互操作之外)是 Open Office / Libre Office,作为穷人的第二佳套件。

几乎所有 pdf 制作方法都需要文件系统,即使在内存中也是如此,但如果不通过 DocX 阅读器和 PDF 编写器,就不可能实现 blob 到 blob 的转换。

API 可能能够接受 blob 转换并解压缩为 File.docX 打印为压缩的 FILE.PDF 并进行转换,然后通过转换为 blob 进行解压缩。 (需要一些时间)

有很多提供这样的服务,例如https://github.com/unoconv/unoconv

然而

这里再次是在线 Word 和 Libre Office 转换之间的比较,仔细观察细节

enter image description here

Libre Office 没有要点,布局已更改为 2 页而不是 1 页,是的,文件很小,但这令人震惊,为什么?特别是当所有新字体都已添加为预期字体的替代品时。

© www.soinside.com 2019 - 2024. All rights reserved.