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

Download a created Google Doc from a deployed web app (Google Apps Script)

我创建了一个脚本,当部署为 Web 应用程序时,它会询问用户一些输入,然后创建并写入 google 文档。

显然,无法从脚本下载 google 文档,下一个最好的办法似乎是转换文档并将其保存在我的驱动器中。

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

项目部署为网络应用程序

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>

因此,这会在我的 google 驱动器中添加一个 pdf,它应该是创建的 google 文档的 pdf 格式,但它是空白的。

我相信你的目标如下。

  • 您想要创建新的 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 Apps。请注意这一点。

参考文献: