【问题标题】:Download PDF from google.script.run in web app在网络应用程序中从 google.script.run 下载 PDF
【发布时间】:2018-05-24 20:45:05
【问题描述】:

我想要实现的是从 google script web 应用程序将工作表下载为 .PDF 文件,但我有一个问题:输出文件的编码(可能)错误(UTF-8 也不起作用)。

例子:

好文件: 从带有“export?exportFormat=pdf...”的链接下载

%PDF-1.4
% âăĎÓ
4
0
obj
<<
/Type
/Catalog
/Names
<<
/JavaScript
3

...

损坏的文件:

%PDF-1.4
% ????
4
0
obj
<<
/Type
/Catalog
/Names
<<
/JavaScript
3

...

有没有人遇到过类似的问题?我该如何解决?提前谢谢你。

谷歌脚本:

function doGet(e) {
    return HtmlService.createTemplateFromFile('index').evaluate();
}

function test() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(),
      sheet = spreadsheet.getActiveSheet();

  var url = spreadsheet.getUrl().replace(/edit$/, '');
  var url_ext = 'export?exportFormat=pdf&format=pdf&gid=' + 
                 sheet.getSheetId();

  var options = {
    headers: {
      'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken(),
    }
  };

  var response = UrlFetchApp.fetch(url + url_ext, options);
  var blob = response.getBlob();

  var charset = 'ISO-8859-1';
  var str = blob.getDataAsString(charset);

  return Utilities.base64Encode(str);
}

HTML JavaScript (index.html):

...

function downloadURI(uri, name) {
  var link = document.createElement('a');
  link.download = name;
  link.href = uri;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  delete link;
}

google.script.run.withSuccessHandler((data) => {

  var uri = 'data:application/pdf;charset=ISO-8859-1;base64,' + encodeURIComponent(data);
  downloadURI(uri, 'test.pdf');

}).withFailureHandler((err) => {
  console.log(err);
}).test();

https://docs.google.com/spreadsheets/d/1kCcxRbucbvKRSCMC4fNj9NJbjTJHTTBFXP7TLGmDNtQ/

【问题讨论】:

    标签: javascript google-apps-script data-uri


    【解决方案1】:

    var blob = response.getBlob() 的blob 使用DriveApp.createFile(blob) 创建为PDF 文件时,如果可以完整地看到PDF,如何修改?

    发件人:

    var blob = response.getBlob();
    var charset = 'ISO-8859-1';
    var str = blob.getDataAsString(charset);
    return Utilities.base64Encode(str);
    

    收件人:

    var blob = response.getBlob();
    return Utilities.base64Encode(blob.getBytes());
    

    参考:

    如果这不是您问题的直接解决方案,我很抱歉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多