我创建了一个简单的脚本,将目录中的所有DOC文件转换为PDF文件。脚本假定驱动程序中的文件夹没有任何其他文件。它还递归地迭代子目录,并按预期将DOC转换为PDF。这是脚本:
function convertDocToPdf(root) {
if(!root) {
root = DriveApp.getFoldersByName('conversion-test');
}
if(root.hasNext()) {
var rootFolder = root.next();
var files = rootFolder.getFiles();
var folders = rootFolder.getFolders();
while(files.hasNext()) {
var file = files.next();
if(!file) continue ;
convert(file, rootFolder);
}
while(folders.hasNext()) {
convertDocToPdf(folders);
}
}
}
function convert(file, rootFolder) {
var blob = file.getBlob();
var tmp = Drive.Files.insert({}, blob, {convert:true});
var id = tmp["id"];
var doc = DocumentApp.openById(id);
var text = doc.getBody().getText();
var filename = file.getName();
var name = filename.split('.')[0];
rootFolder.createFile(name + '.pdf', text);
Drive.Files.remove(id);
}
我用只包含一行文本的简单文件测试了这一点,它很有效。然而,当我尝试用图像和其他格式(列、表(转换DOC文件时,它会删除所有格式,下载后,文件看起来是空的。
有什么方法可以保留格式吗?我的代码中缺少什么?
我相信你的目标和目前的情况如下。
- 您想要将Google文档文件转换为PDF文件
- 在脚本中,您可以从文件夹中检索Google文档文件
修改点:
- 在
convert(file, rootFolder)
的功能中,当convert(file, rootFolder)
的file
是Google文档时,var blob = file.getBlob();
的blob
已经是转换后的PDF格式。但是,您的脚本将PDF格式再次转换为Google文档,只检索文本数据,然后,文本数据被创建为PDF文件。这样,就创建了只包含文本数据的PDF文件。我认为这就是你问题的原因
为了删除此问题并将谷歌文档转换为PDF文件,我想修改如下。
修改的脚本:
在这次修改中,我修改了convert
。
function convert(file, rootFolder) {
if (file.getMimeType() != MimeType.GOOGLE_DOCS) return;
var blob = file.getBlob();
var filename = file.getName();
var name = filename.split('.')[0];
rootFolder.createFile(blob.setName(name + '.pdf'));
}
注:
在这种情况下,Google文档将使用
file.getBlob()
转换为PDF格式。但是,当您想要使用驱动器API时,您也可以使用以下脚本。参考来自
var blob = file.getBlob();
至
var url = `https://www.googleapis.com/drive/v3/files/${file.getId()}/export?mimeType=${MimeType.PDF}`; var blob = UrlFetchApp.fetch(url, {headers: {authorization: `Bearer ${ScriptApp.getOAuthToken()}`}}).getBlob();
参考:
- getBlob((