DriveApp从DocX转换为PDF失败(谷歌应用脚​​本)

时间:2017-09-16 10:05:08

标签: google-apps-script google-drive-api

我正在尝试转换我的Google云端硬盘上的现有.DOCX文件。 它一直工作,直到应该创建新的(PDF)文件,然后我收到此错误消息:  “从application / vnd.openxmlformats-officedocument.wordprocessingml.document转换为application / pdf失败”。

相关的DOCX文件不应该被破坏,因为它可以由Google文档打开并从那里手动转换为PDF。

我已启用Drive API(在云端硬盘和API控制台中)

其他人看到过这个问题了?

代码:

 function convertPDF(fileid) {
     var docId = fileid;
     var f=DriveApp.getFileById(docId);
     var n=f.getName();
     var docFolder = f.getParents().next().getId();

     var docblob = f.getAs('application/pdf');
     n=n.replace(".docx",".pdf");
     docblob.setName(n);
     var bn=docblob.getName();
     var t=docblob.getContentType();
     Logger.log(bn+"-->"+t);  // <-- works 

     var file = DriveApp.createFile(docblob); // <<- error msg here

     var fileId = file.getId();
     moveFileId(fileId, docFolder);
     return (fileId);
}

1 个答案:

答案 0 :(得分:1)

在Google上,无法将其从docx直接转换为pdf。但是,在将docx转换为Google文档后,它可以转换为pdf。要将docx转换为Google文档,您可以使用高级Google服务来使用Drive API。为此,请按以下步骤启用高级Google服务的Drive API。

  1. 在脚本编辑器中,选择Resources&gt;高级Google服务
  2. 在显示的对话框中,单击Drive API v2的开/关开关。
  3. 单击“确定”按钮。
  4. 高级Google服务的详细信息为here

    我认为在API控制台上启用Drive API已经完成,因为您已经在脚本上使用了DriveApp。当脚本中使用DriveApp时,Google会自动在API控制台上启用Drive API。

    使用Drive API修改后的脚本如下所示。

    修改后的脚本:

    function convertPDF(docx_id) {
      var docx = DriveApp.getFileById(docx_id);
      var docFolder = docx.getParents().next().getId();
      var n = docx.getName();
      var res = Drive.Files.insert({ // Here, Drive API of Advanced Google services is used.
        "mimeType": "application/vnd.google-apps.document",
        "title": n
      }, docx.getBlob());
      var f = DriveApp.getFileById(res.id).getBlob();
    
      var docblob = f.getAs('application/pdf');
      n=n.replace(".docx",".pdf");
      docblob.setName(n);
      var bn=docblob.getName();
      var t=docblob.getContentType();
      Logger.log(bn+"-->"+t);
      var file = DriveApp.createFile(docblob);
      var fileId = file.getId();
      Logger.log(fileId)
      moveFileId(fileId, docFolder);
      return (fileId);
    }
    

    我不知道moveFileId()。因此,如果此行发生错误,请检查该功能。

    注意:

    在这种情况下,Google文档会创建为转换为PDF的临时文件。文件名与docx文件相同。因此,如果您不需要,请将其删除。