在 Web 应用程序中从 google.script.run 下载 PDF
Download PDF from google.script.run in web app
我想要实现的是从 google 脚本网络应用程序下载 sheet 作为 .PDF 文件,但我有一个问题:输出文件有(可能)错误的编码(UTF -8 也不起作用)。
示例:
好文件:
使用 "export?exportFormat=pdf..."
从 link 下载
%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/
当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());
参考:
如果这不是您问题的直接解决方案,我很抱歉。
我想要实现的是从 google 脚本网络应用程序下载 sheet 作为 .PDF 文件,但我有一个问题:输出文件有(可能)错误的编码(UTF -8 也不起作用)。
示例:
好文件: 使用 "export?exportFormat=pdf..."
从 link 下载%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/
当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());
参考:
如果这不是您问题的直接解决方案,我很抱歉。