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

标签 pdf encoding google-apps-script character-encoding

我试图弄清楚如何使部署为网络应用程序的 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 Script 传递到客户端 javascript,请发布答案。这一切都比我做的要简单得多。

而不是搞乱 base64 编码,只需传回字节数组:

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();
}

就是这样!希望其他人觉得这有帮助。

关于pdf - 通过网络应用下载由 Apps Script 生成的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42955822/

相关文章:

encoding - 在intellij idea中更改文件编码而不丢失信息

java - 无法将字符串转换为正确的编码格式

javascript - 编写 Google 脚本来生成 Google Drive 的变更日志

Javascript 自动将 UTF 转换为 ISO-8859

objective-c - 在 Objective-C 中创建受密码保护的 PDF

php - pdflib-sh : phpize: command not found

forms - 使用 ITextSharp 创建可填写的 PDF 表单

google-apps-script - 当用户打开工作表或单击工作表中的链接时,Google Sheets 附加组件会自动打开

google-apps-script - 更改单元格值时触发 Google Sheet Script onChange

ios - 适用于 iOS 的扫描仪 API