首页 > 解决方案 > 使用 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 实现中,步骤如下:

  1. 将 Google 文档转换为 PDF 文件。
  2. 通过在完整的 PDF 中搜索切片标签,将 PDF 文件“切片”为多个 PDF。
  3. 将切片的 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

标签: javascriptangulargoogle-apps-script

解决方案


Blob 是原始数据的二进制表示。

通常,在处理 PDF 时,Blob 会转换为文件(文件是 Blob),并保存到本地文件系统。有关示例,请参阅如何在 JavaScript 中将 Blob 转换为文件

还有一个“文件保护程序”npm 库,我相信还有 Angular/Typescript 版本,如果你不想自己做的话。

我还没有这样做,但我想如果你想用来操作 PDF 的库需要一个 PDF 文件,你可以将 Blob 转换为 PDF 而不将其写入文件系统,然后从那里开始工作。

顺便说一句,您的问题有一个或多个“接近”投票,因为您提出了一个非常广泛的问题(即“我如何编写我的整个应用程序”),而不是提出您真正需要回答的目标问题。


推荐阅读