DOC到PDF的应用程序脚本转换破坏了格式



我创建了一个简单的脚本,将目录中的所有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((

最新更新