Скачать PDF с google.script.run в веб-приложении - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь загрузить лист в виде файла .PDF из веб-приложения Google Script, но у меня есть проблема: выходной файл имеет (вероятно) неправильную кодировку (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

...

Кто-нибудь сталкивался с подобной проблемой?Как я могу решить это?Заранее благодарим.

Скрипт Google:

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/

1 Ответ

0 голосов
/ 25 мая 2018

Когда BLOB-объект var blob = response.getBlob() создается в виде файла PDF с использованием DriveApp.createFile(blob), если вы можете полностью просмотреть PDF-файл, как насчет этой модификации?

От:

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

To:

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

Ссылка:

Если это не было прямым решениемизвините за ваш вопрос.

...