javascript - 使用 Javascript,如何将 Google 文档转换为 PDF 文件,然后将其“切片”为多个 PDF?
问题描述
我想使用 Google 文档和 Javascript 来复制我为 Microsoft Word 文档编写的 VBA 代码。它将用于我正在编写的 Angular 应用程序中。
VBA 代码在文档中搜索“切片标签”并在找到它们时生成 PDF 文件。例如,如果一个文档由 15 页组成,并且在第 4、7 和 9 页上有切片标签,则代码会生成四个文件:Page1-4.pdf、Page5-7.pdf、Page8-9.pdf 和 Page10 -15.pdf。
在 Javascript 实现中,步骤如下:
- 将 Google 文档转换为 PDF 文件。
- 通过在完整的 PDF 中搜索切片标签,将 PDF 文件“切片”为多个 PDF。
- 将切片的 PDF 放在指定的 Google Drive 文件夹中。
请注意,我在这里问了一个类似的问题。
但是,这是一个 Google Script 实现。我意识到在 Google Scripts 中没有办法在页面边界上处理文档。如果这样做会更简单,更清洁。相反,我想采取另一种方法。
下面是部分解决步骤 1 的 Javascript 代码。它使用此调用:
gapi.client.drive.files.export
但是,这不会创建 PDF 文件。相反,它会创建一个 PDF 内容块。显然,期望您将 blob 转换为实际文件,但 Google API 似乎没有提供执行此操作的方法。
async function exportDocument(id, mimeType) {
let rtrn;
try {
await gapi.client.drive.files.export(
{'fileId': id,
'mimeType': mimeType,
'fields': 'webViewLink',
})
.then(function(resp) {
// This returns a content blob NOT an actual file
rtrn = resp;
// TODO: How to transform the blob into an actual file (e.g., PDF)
}).catch((err) => {
throw new Error(err.message);
});
} catch (e) {
throw new Error('exportDocument: ' + e.message);
}
return rtrn;
} // end exportDocument
解决方案
Blob 是原始数据的二进制表示。
通常,在处理 PDF 时,Blob 会转换为文件(文件是 Blob),并保存到本地文件系统。有关示例,请参阅如何在 JavaScript 中将 Blob 转换为文件
还有一个“文件保护程序”npm 库,我相信还有 Angular/Typescript 版本,如果你不想自己做的话。
我还没有这样做,但我想如果你想用来操作 PDF 的库需要一个 PDF 文件,你可以将 Blob 转换为 PDF 而不将其写入文件系统,然后从那里开始工作。
顺便说一句,您的问题有一个或多个“接近”投票,因为您提出了一个非常广泛的问题(即“我如何编写我的整个应用程序”),而不是提出您真正需要回答的目标问题。
推荐阅读
- javascript - 如何在网站中显示来自 Firestore 下载 URL 的图像
- reactjs - React Smooth DND Library 导致和“非法调用错误”
- c++ - 每毫秒写入 fstream 与批量写入
- python - DRF 错误:无法使用嵌套序列化程序上的视图名称解析超链接关系的 URL
- r - 为什么 plm::pvcm 的汇总函数会给出模型 = "within" 的系数分位数?
- android - JobScheduler 有时会在应用空闲时停止工作
- sql - 如果第一个 SQL 语句返回 NULL(或什么都不返回),则运行第二个 Select 语句
- memory-management - Is cudaDeviceSynchronize() required before cudaFree()?
- ios - NSFetchedResultsController 'didChange' 使用新的 CollectionDiffing 会导致奇怪的更改操作,从而导致崩溃
- linux - 带有重定向的 linux uniq 命令出错