为什么谷歌应用程序脚本上的getThumbnail功能工作不一致



因此,我尝试打开并编辑一个谷歌演示文稿,只需一张幻灯片,即可将其作为图像下载。

为此,我使用mimeType.PFD将其转换为PDF,然后尝试获取缩略图并将其保存在文件夹中。

问题是,它有时有效,但对其他人无效。我该如何克服它?

function createJPG() {
let nome = "Filipe Pereira";
let grad = "3º Sargento";
let quadro = "QPMP-C";
let funcao = "Fotógrafo";
let lotacao = "Assessoria de Comunicação";
let telefone = "(27) 3636-8717";
let email = "secretaria@pm.es.gov.br";
const docFile = DriveApp.getFileById("1EhDglV8aumu__zAOfasdfasrukNKYFDas");
const folder = DriveApp.getFolderById("1fwAhuCdoYyUdHfasdfaPyjRq5iN97");
const jpgFolder = DriveApp.getFolderById("14iZ4sS4jR5sadfasdKainJTnurZ9cgvpH");
const tempFile = docFile.makeCopy(jpgFolder);
const tempDocFile = SlidesApp.openById(tempFile.getId());
const slide = tempDocFile.getSlides()[0];
slide.replaceAllText("{nome}",nome);
slide.replaceAllText("{grad}",grad);  
slide.replaceAllText("{quadro}",quadro);
slide.replaceAllText("{funcao}",funcao);
slide.replaceAllText("{lotacao}",lotacao);
slide.replaceAllText("{telefone}",telefone);
slide.replaceAllText("{email}",email);
tempDocFile.saveAndClose();

//Creates PDF.  
const pdfContentBlob = tempFile.getAs(MimeType.PDF);
const newPDF = jpgFolder.createFile(pdfContentBlob).setName(nome);
//Try to create IMGE from Thumbnail
const blob = newPDF.getThumbnail();
const newJPG = jpgFolder.createFile(blob).setName(nome);
folder.removeFile(tempFile);
jpgFolder.removeFile(newPDF);
}

错误消息为:异常:参数不能为null:blob

如果有人能照亮我的心灵,我会非常感激的。我已经努力克服了8个多小时。

感谢

我遇到了一个非常类似的问题,但我相信我已经找到了解决方案。我正在将文档文件转换为PDF,而不是幻灯片文件,但我相信这个概念应该可以很好地翻译。我相信新的PDF文件还没有完全完成在Drive上的注册,这就是您收到null错误的原因。解决此问题的方法是在尝试提取缩略图之前更新驱动器中的文件。此外,缩略图是PNG格式的,使用这个脚本,我只是保持它的格式。

为此,您需要在项目中启用驱动器API。要做到这一点,请按照以下说明向您的谷歌应用程序脚本项目添加新服务:

  • 打开应用程序脚本项目
  • 在左侧,单击编辑器<gt
  • 在左侧的服务旁边,单击添加服务+
  • 选择驱动器API,然后单击添加

完成此操作后,您将能够在脚本中使用与DriveApp不同的Drive命令。我已经修改了你下面的代码,包括这个添加:

function createJPG() {
let nome = "Filipe Pereira";
let grad = "3º Sargento";
let quadro = "QPMP-C";
let funcao = "Fotógrafo";
let lotacao = "Assessoria de Comunicação";
let telefone = "(27) 3636-8717";
let email = "secretaria@pm.es.gov.br";
const docFile = DriveApp.getFileById("1EhDglV8aumu__zAOfasdfasrukNKYFDas");
const folder = DriveApp.getFolderById("1fwAhuCdoYyUdHfasdfaPyjRq5iN97");
const jpgFolder = DriveApp.getFolderById("14iZ4sS4jR5sadfasdKainJTnurZ9cgvpH");
const tempFile = docFile.makeCopy(jpgFolder);
const tempDocFile = SlidesApp.openById(tempFile.getId());
const slide = tempDocFile.getSlides()[0];
slide.replaceAllText("{nome}",nome);
slide.replaceAllText("{grad}",grad);  
slide.replaceAllText("{quadro}",quadro);
slide.replaceAllText("{funcao}",funcao);
slide.replaceAllText("{lotacao}",lotacao);
slide.replaceAllText("{telefone}",telefone);
slide.replaceAllText("{email}",email);
tempDocFile.saveAndClose();

//Creates PDF.  
const pdfContentBlob = tempFile.getAs(MimeType.PDF);
const newPDF = jpgFolder.createFile(pdfContentBlob).setName(nome);
//Try to create IMGE from Thumbnail
const newId = newPDF.getId();
Drive.Files.update({
title: newPDF.getName(), mimeType: MimeType.PDF
}, newId, pdfContentBlob);
const newPNG = DriveApp.getFileById(newId).getThumbnail().getAs('image/png');
folder.createFile(newPNG);
tempFile.setTrashed(true);
newPDF.setTrashed(true);
}

我已经尝试过几次了,它非常适合我。我尝试将它更改为'image/jpg',但收到了一个错误,所以你可能需要将它保留为PNG,除非你能够以其他方式将它转换为PNG。

希望这能有所帮助!