gpt4 book ai didi

google-apps-script - 将文档转换为图像

转载 作者:行者123 更新时间:2023-12-02 16:58:51 25 4
gpt4 key购买 nike

有没有办法从 google 文档创建图像(例如 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'));
}

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

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

最佳答案

这个答案怎么样?

错误原因:

makeCopy() 返回文件对象。 getAs() 不能用于此。由此,错误发生。

解决方法:

遗憾的是,在现阶段,Google Document 无法直接导出为 PNG 图片。因此需要考虑解决方法。 Google 文档可以转换为 PDF。这个答案使用这个。作为解决方法,我想建议使用外部 API ConvertAPI .我认为使用外部 API,脚本变得简单。 API的这个方法(PDF to PNG API)可以将PDF数据转换成PNG数据。

例如,当您尝试这个时,您也可以使用“免费包”来测试它。当您尝试使用“免费套餐”时,请在“免费套餐”处注册并取回您的 key 。

示例脚本:

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

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);
});

引用资料:

2023 年 1 月 11 日更新:

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

示例脚本:

此方法使用 Drive API。 Please enable Drive API at Advanced Google services .

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

/**
* This is a method for converting all pages in a PDF file to PNG images.
* PNG images are returned as BlobSource[].
* IMPORTANT: This method uses Drive API. Please enable Drive API at Advanced Google services.
*
* @param {Blob} blob Blob of PDF file.
* @return {BlobSource[]} PNG blobs.
*/
async function convertPDFToPNG_(blob) {
// Convert PDF to PNG images.
const cdnjs = "https://cdn.jsdelivr.net/npm/pdf-lib/dist/pdf-lib.min.js";
eval(UrlFetchApp.fetch(cdnjs).getContentText()); // Load pdf-lib
const setTimeout = function (f, t) { // Overwrite setTimeout with Google Apps Script.
Utilities.sleep(t);
return f();
}
const data = new Uint8Array(blob.getBytes());
const pdfData = await PDFLib.PDFDocument.load(data);
const pageLength = pdfData.getPageCount();
console.log(`Total pages: ${pageLength}`);
const obj = { imageBlobs: [], fileIds: [] };
for (let i = 0; i < pageLength; i++) {
console.log(`Processing page: ${i + 1}`);
const pdfDoc = await PDFLib.PDFDocument.create();
const [page] = await pdfDoc.copyPages(pdfData, [i]);
pdfDoc.addPage(page);
const bytes = await pdfDoc.save();
const blob = Utilities.newBlob([...new Int8Array(bytes)], MimeType.PDF, `sample${i + 1}.pdf`);
const id = DriveApp.createFile(blob).getId();
Utilities.sleep(3000); // This is used for preparing the thumbnail of the created file.
const link = Drive.Files.get(id, { fields: "thumbnailLink" }).thumbnailLink;
if (!link) {
throw new Error("In this case, please increase the value of 3000 in Utilities.sleep(3000), and test it again.");
}
const imageBlob = UrlFetchApp.fetch(link.replace(/\=s\d*/, "=s1000")).getBlob().setName(`page${i + 1}.png`);
obj.imageBlobs.push(imageBlob);
obj.fileIds.push(id);
}
obj.fileIds.forEach(id => DriveApp.getFileById(id).setTrashed(true));
return obj.imageBlobs;
}

// Please run this function.
async function myFunction() {
const SOURCE_TEMPLATE = "1HvqYidpUpihzo_HDAQ3zE5ScMVsHG9NNlwPkN80GHK0";
const TARGET_FOLDER = "1Eue-3tJpE8sBML0qo6Z25G0D_uuXZjHZ";

// Use a method for converting all pages in a PDF file to PNG images.
const blob = DriveApp.getFileById(SOURCE_TEMPLATE).getBlob();
const imageBlobs = await convertPDFToPNG_(blob);

// As a sample, create PNG images as PNG files.
const folder = DriveApp.getFolderById(TARGET_FOLDER);
imageBlobs.forEach(b => folder.createFile(b));
}
  • 运行此脚本时,输入的 PDF 文件的所有页面都将转换为 PNG 图像,并在目标文件夹中创建这些图像。

备注:

引用资料:

关于google-apps-script - 将文档转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55111503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com