使用Javascript,如何将Google文档转换为PDF文件,然后将其“切片”为多个PDF?

时间:2019-08-20 18:30:06

标签: javascript angular google-apps-script

我想复制我使用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云端硬盘文件夹中。

请注意,我问了类似的问题here

但是,这是Google脚本实现。我意识到,在Google脚本中无法解决页面边界上的文档。如果这样做的话,它将更加简单和整洁。相反,我想采取另一种方法。

下面是部分解决步骤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

1 个答案:

答案 0 :(得分:1)

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

通常,在处理PDF时,Blob会变成一个文件(文件是Blob), 并保存到本地文件系统。有关示例,请参见How to convert Blob to File in JavaScript

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

我还没有做过,但是我想如果您要用来处理PDF的库期望有一个PDF文件,您可能可以将Blob转换为PDF,而无需将其写入文件系统,然后再工作从那里。

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