从部署的网络应用程序下载创建的Google文档(Google Apps脚本)

时间:2020-11-09 21:04:26

标签: google-apps-script google-docs

我创建了一个脚本,当将该脚本部署为Web应用程序时,会要求用户提供一些输入,然后创建并写入Google文档。

显然,不可能从脚本中下载google doc,而下一件最好的事情似乎是转换文档并将其保存在我的驱动器中。

我尝试过这种非常简单的方法,灵感来自Convert Google Doc to PDF using Google Script Editior

项目被部署为Web应用

Code.gs:

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function editDoc(data) {
  let doc = DocumentApp.create("Title");
  let body = doc.getBody();
  body.setText(data);
  
  docblob = doc.getAs('application/pdf');

  docblob.setName(doc.getName() + ".pdf");
  let file = DriveApp.createFile(docblob);
}

Index.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <form onsubmit="edit()">
      <input type="text" id="input">
      <input type="submit" id="sub" value="Submit">
    </form>
    <script>
      function edit() {
        google.script.run.editDoc(document.getElementById("input").value);
      }
    </script>
  </body>
</html>

因此,这会将pdf添加到我的google驱动器中,该pdf文件应该是创建的google doc的pdf形式,但是为空白。

1 个答案:

答案 0 :(得分:1)

我相信您的目标如下。

  • 您要创建新的Google文档,包括输入标签中的值。
  • 而且,您想将Google文档导出为PDF文件。
  • 您想使用Google Apps脚本实现这一目标。

修改点:

  • 我认为however it is blank的原因是未保存文档。
  • 为了下载PDF文件,我建议将PDF数据转换为base64数据并将其设置为数据URL,然后下载。

当以上几点反映到您的脚本时,它如下所示。

修改后的脚本:

Google Apps脚本端:Code.gs
function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function editDoc(data) {
  let doc = DocumentApp.create("Title");
  let body = doc.getBody();
  body.setText(data);
  doc.saveAndClose();
  return {
    data: "data:application/pdf;base64," + Utilities.base64Encode(doc.getBlob().getBytes()),
    filename: doc.getName() + ".pdf"
  };
}
HTML和JavaScript端:Index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <form onsubmit="event.preventDefault(); edit();">
      <input type="text" id="input">
      <input type="submit" id="sub" value="Submit">
    </form>
    <script>
      function edit() {
        google.script.run.withSuccessHandler(({data, filename}) => {
          const a = document.createElement("a");
          document.body.appendChild(a);
          a.download = filename;
          a.href = data;
          a.click();
        }).editDoc(document.getElementById("input").value);
      }
    </script>
  </body>
</html>
  • 我认为在这种情况下,也可以使用一个简单的按钮来代替“提交”按钮。
  • 对于Google文档,当检索博客时,在当前阶段,blob是PDF格式。
  • 在此修改后的脚本中,当输入文本并单击按钮时,会将PDF文件下载到本地PC。

注意:

  • 在您的脚本中,似乎使用了Web Apps。在这种情况下,修改Web Apps脚本后,请重新部署Web Apps作为新版本。这样,最新的脚本就会反映到Web应用程序中。请注意这一点。

参考文献: