我正在使用 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`
);
不幸的是,docx.js 库不提供将 docx 文件转换为 PDF 的内置功能。您将需要使用单独的库或 API 来执行转换。
一般来说,在不使用文件的情况下很难在二进制格式之间进行转换,这是左侧引用的问题 API 中的一个端点。布局很好,如果有点“斯巴达”(开玩笑,它是罗马字体)。右侧是使用 Windows 自己的命令行本机打印到 PDF 的单行转换,其中由于 Sans Serif 字体已被替换,因此失去了保真度。
因此,获得从 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 转换之间的比较,仔细观察细节
Libre Office 没有要点,布局已更改为 2 页而不是 1 页,是的,文件很小,但这令人震惊,为什么?特别是当所有新字体都已添加为预期字体的替代品时。