通过网络应用下载由Apps Script生成的PDF

斯坦

我正在尝试弄清楚如何使作为Web应用程序部署的Google Apps脚本下载单击生成的PDF。几乎可以使用,但是生成的文件无效。我不知道这是编码问题还是其他问题。

在Apps Script中,代码看起来很简单:

function makePDF() {
   ...
   var pdfBlob = doc.getAs('application/pdf');
   return Utilities.base64Encode(pdfBlob.getBytes());
}

在浏览器中,有一个单击处理程序:

function clickHandler(ev) {
  ev.preventDefault();
  google.script.run
  .withSuccessHandler(function(data) {
    var pdf = new Blob([window.atob(data)]);
    var href = window.URL.createObjectURL(pdf);

    var link = document.querySelector('#hiddenLink');
    link.href = href;
    link.click();
  })
  .makePDF();
}

有什么建议么?

谢谢!

斯坦

我想通了,因此,如果其他人试图将PDF从Apps脚本传递到客户端JavaScript,则发布答案。这比我做的要简单得多。

而不是搞砸base64编码,只需传回bytes数组:

function makePDF() {
 ...
 var pdfBlob = DocumentApp.openById('1234').getAs('application/pdf');
 return pdfBlob.getBytes();
}

现在,在客户端,从ArrayBuffer构造一个新的Blob。这也很容易:

function clickHandler(ev) {
  google.script.run
  .withSuccessHandler(function(data) {
    var arr = new Uint8Array(data);
    var blob = new Blob([arr.buffer], {type: 'application/pdf'});

    var obj_url = window.URL.createObjectURL(blob);

    var hiddenLink = document.getElementById('hiddenPDFLink');
    hiddenLink.setAttribute('href', obj_url);
    hiddenLink.setAttribute('download', 'filename.pdf');
    hiddenLink.click();
  })
  .makePDF();
}

就是这样!希望其他人对此有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章