将 gdoc 转换为图像

ful*_*vio 4 file-conversion google-apps-script google-drive-api convertapi

有没有办法从谷歌文档创建图像(例如png)?我真正指的是图像,而不仅仅是 pdf。GetAS 仅创建 pdf,但如果 contentType 设置为 image/png 或其他等效格式,则会返回错误。我的(实际上很简单)代码是

function convertFile() {
var SOURCE_TEMPLATE = "1HvqYidpUpihzo_HDAQ3zE5ScMVsHG9NNlwPkN80GHK0";
var TARGET_FOLDER = "1Eue-3tJpE8sBML0qo6Z25G0D_uuXZjHZ";
var source = DriveApp.getFileById(SOURCE_TEMPLATE);
var targetFolder = DriveApp.getFolderById(TARGET_FOLDER);
var target = source.makeCopy(source,targetFolder);
var newFile = DriveApp.createFile(target.getAs('image/png'));
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,出现以下错误(我的翻译):

不支持从 application/vnd.google-apps.document 到 image/png 的转换。

Tan*_*ike 8

这个答案怎么样?

错误原因:

makeCopy()返回文件对象。getAs()不能用于此目的。这样,就会出现错误。

解决方法:

不幸的是,现阶段Google Document无法直接导出为PNG图像。所以需要想办法解决。Google 文档可以转换为 PDF。这个答案使用了这个。作为解决方法,我建议使用外部 API,即ConvertAPI。我认为使用外部API,脚本会变得简单。这是API的一个方法(PDF to PNG API),可以将PDF数据转换为PNG数据。

例如,当您尝试此操作时,您还可以使用“免费包”进行测试。当您尝试使用“免费套餐”时,请在“免费套餐”中注册并找回您的密钥。

示例脚本:

在运行此脚本之前,请检索您的密钥并进行设置。

var secretkey = "###";  // Please set your secret key.

var SOURCE_TEMPLATE = "1HvqYidpUpihzo_HDAQ3zE5ScMVsHG9NNlwPkN80GHK0";
var TARGET_FOLDER = "1Eue-3tJpE8sBML0qo6Z25G0D_uuXZjHZ";
var url = "https://v2.convertapi.com/convert/pdf/to/png?Secret=" + secretkey;
var options = {
  method: "post",
  payload: {File: DriveApp.getFileById(SOURCE_TEMPLATE).getBlob()},
}
var res = UrlFetchApp.fetch(url, options);
res = JSON.parse(res.getContentText());
res.Files.forEach(function(e) {
  var blob = Utilities.newBlob(Utilities.base64Decode(e.FileData), "image/png", e.FileName);
  DriveApp.getFolderById(TARGET_FOLDER).createFile(blob);
});
Run Code Online (Sandbox Code Playgroud)

参考:

2023 年 1 月 11 日更新:

在现阶段,Google Apps Script可以使用V8运行时。这样,就有一些 Javascript 库可以与 Google Apps 脚本一起使用。Ref1 , Ref2在这个问题中,在当前阶段,通过使用pdf-lib,可以使用 Google Apps 脚本将 PDF 文件中的所有页面转换为 PNG 图像。示例脚本如下。

示例脚本:

此方法使用 Drive API。请在高级 Google 服务中启用 Drive API

请设置SOURCE_TEMPLATETARGET_FOLDER,然后运行main()

var secretkey = "###";  // Please set your secret key.

var SOURCE_TEMPLATE = "1HvqYidpUpihzo_HDAQ3zE5ScMVsHG9NNlwPkN80GHK0";
var TARGET_FOLDER = "1Eue-3tJpE8sBML0qo6Z25G0D_uuXZjHZ";
var url = "https://v2.convertapi.com/convert/pdf/to/png?Secret=" + secretkey;
var options = {
  method: "post",
  payload: {File: DriveApp.getFileById(SOURCE_TEMPLATE).getBlob()},
}
var res = UrlFetchApp.fetch(url, options);
res = JSON.parse(res.getContentText());
res.Files.forEach(function(e) {
  var blob = Utilities.newBlob(Utilities.base64Decode(e.FileData), "image/png", e.FileName);
  DriveApp.getFolderById(TARGET_FOLDER).createFile(blob);
});
Run Code Online (Sandbox Code Playgroud)
  • 运行此脚本时,输入的 PDF 文件的所有页面都将转换为 PNG 图像,并在目标文件夹中创建这些图像。

笔记:

参考: