使用 blob 在浏览器中下载 PDF
Download PDF in browser with blob
我不太清楚如何从 google 电子表格 PDF 导出 Web 链接下载 PDF。我为此案例生成了一个测试电子表格。
我知道我需要为 blob 实现 encodeURIComponent and/or "Buffer.from" 但无论我怎么做,它只会为我下载损坏的 PDF。
这是我目前最原始的形式。感谢您的支持!
节点 JS:
const fetch = require('node-fetch');
var url = "https://docs.google.com/spreadsheets/d/1fLjKASR_g5wsvOjjJi6RclqMVd2o_1On-OfimXtId4E/export?exportFormat=pdf&format=pdf&size=A4&fzr=true&gid=477517973&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&portrait=true&fitw=true&fith=true&top_margin=0.20&bottom_margin=0.20&left_margin=0.20&right_margin=0.20";
let blob = await fetch(url).then(r => r.blob());
// then send blob variable to javascript
Javascript:
function downloadURI(name) {
var uri = 'data:application/pdf;base64,' + blob;
var link = document.createElement('a');
link.download = name;
link.href = uri;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
delete link;
}
downloadURI("test"+".pdf")
我认为从var uri = 'data:application/pdf;base64,' + blob;
在你的脚本中,在这种情况下,需要将下载的数据转换为base64。虽然我不确定Node JS:
和Javascript:
之间的脚本之间的关系,但在你的情况下,下面的修改怎么样?
发件人:
let blob = await fetch(url).then(r => r.blob());
收件人:
let buf = await fetch(url).then((r) => r.arrayBuffer());
const data = Buffer.from(buf).toString("base64");
这样,您就可以使用data
如下。
var uri = 'data:application/pdf;base64,' + data;
注:
作为附加信息,例如,如果您只想使用 Javascript 将电子表格下载为 PDF 文件,您还可以使用以下脚本。但是,在这种情况下,电子表格需要公开共享。请注意这一点。
async function downloadURI(name) {
var url = "https://docs.google.com/spreadsheets/d/1fLjKASR_g5wsvOjjJi6RclqMVd2o_1On-OfimXtId4E/export?exportFormat=pdf&format=pdf&size=A4&fzr=true&gid=477517973&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&portrait=true&fitw=true&fith=true&top_margin=0.20&bottom_margin=0.20&left_margin=0.20&right_margin=0.20";
let blob = await fetch(url).then((r) => r.blob());
var f = new FileReader();
f.readAsDataURL(blob);
f.onload = d => {
var uri = d.target.result;
var link = document.createElement('a');
link.download = name;
link.href = uri;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
delete link;
}
}
downloadURI("test"+".pdf")
我不太清楚如何从 google 电子表格 PDF 导出 Web 链接下载 PDF。我为此案例生成了一个测试电子表格。
我知道我需要为 blob 实现 encodeURIComponent and/or "Buffer.from" 但无论我怎么做,它只会为我下载损坏的 PDF。
这是我目前最原始的形式。感谢您的支持!
节点 JS:
const fetch = require('node-fetch');
var url = "https://docs.google.com/spreadsheets/d/1fLjKASR_g5wsvOjjJi6RclqMVd2o_1On-OfimXtId4E/export?exportFormat=pdf&format=pdf&size=A4&fzr=true&gid=477517973&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&portrait=true&fitw=true&fith=true&top_margin=0.20&bottom_margin=0.20&left_margin=0.20&right_margin=0.20";
let blob = await fetch(url).then(r => r.blob());
// then send blob variable to javascript
Javascript:
function downloadURI(name) {
var uri = 'data:application/pdf;base64,' + blob;
var link = document.createElement('a');
link.download = name;
link.href = uri;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
delete link;
}
downloadURI("test"+".pdf")
我认为从var uri = 'data:application/pdf;base64,' + blob;
在你的脚本中,在这种情况下,需要将下载的数据转换为base64。虽然我不确定Node JS:
和Javascript:
之间的脚本之间的关系,但在你的情况下,下面的修改怎么样?
发件人:
let blob = await fetch(url).then(r => r.blob());
收件人:
let buf = await fetch(url).then((r) => r.arrayBuffer());
const data = Buffer.from(buf).toString("base64");
这样,您就可以使用data
如下。
var uri = 'data:application/pdf;base64,' + data;
注:
作为附加信息,例如,如果您只想使用 Javascript 将电子表格下载为 PDF 文件,您还可以使用以下脚本。但是,在这种情况下,电子表格需要公开共享。请注意这一点。
async function downloadURI(name) { var url = "https://docs.google.com/spreadsheets/d/1fLjKASR_g5wsvOjjJi6RclqMVd2o_1On-OfimXtId4E/export?exportFormat=pdf&format=pdf&size=A4&fzr=true&gid=477517973&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&portrait=true&fitw=true&fith=true&top_margin=0.20&bottom_margin=0.20&left_margin=0.20&right_margin=0.20"; let blob = await fetch(url).then((r) => r.blob()); var f = new FileReader(); f.readAsDataURL(blob); f.onload = d => { var uri = d.target.result; var link = document.createElement('a'); link.download = name; link.href = uri; document.body.appendChild(link); link.click(); document.body.removeChild(link); delete link; } } downloadURI("test"+".pdf")