从已部署的 Web 应用程序(Google Apps 脚本)下载创建的 Google 文档
Download a created Google Doc from a deployed web app (Google Apps Script)
我创建了一个脚本,当部署为 Web 应用程序时,它会询问用户一些输入,然后创建并写入 google 文档。
显然,无法从脚本下载 google 文档,下一个最好的办法似乎是转换文档并将其保存在我的驱动器中。
我尝试过这种非常简单的方法,灵感来自 Convert Google Doc to PDF using Google Script Editior
项目部署为网络应用程序
Code.gs:
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index');
}
function editDoc(data) {
let doc = DocumentApp.create("Title");
let body = doc.getBody();
body.setText(data);
docblob = doc.getAs('application/pdf');
docblob.setName(doc.getName() + ".pdf");
let file = DriveApp.createFile(docblob);
}
Index.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<form onsubmit="edit()">
<input type="text" id="input">
<input type="submit" id="sub" value="Submit">
</form>
<script>
function edit() {
google.script.run.editDoc(document.getElementById("input").value);
}
</script>
</body>
</html>
因此,这会在我的 google 驱动器中添加一个 pdf,它应该是创建的 google 文档的 pdf 格式,但它是空白的。
我相信你的目标如下。
- 您想要创建新的 Google 文档,包括来自输入标签的值。
- 并且,您想将 Google 文档导出为 PDF 文件。
- 您想使用 Google Apps 脚本实现此目的。
修改点:
- 我认为
however it is blank
的原因是文档没有保存。
- 为了下载PDF文件,我建议将PDF数据转成base64数据,设置为数据URL,然后下载。
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
Google Apps 脚本端:Code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index');
}
function editDoc(data) {
let doc = DocumentApp.create("Title");
let body = doc.getBody();
body.setText(data);
doc.saveAndClose();
return {
data: "data:application/pdf;base64," + Utilities.base64Encode(doc.getBlob().getBytes()),
filename: doc.getName() + ".pdf"
};
}
HTML & Javascript 方:Index.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<form onsubmit="event.preventDefault(); edit();">
<input type="text" id="input">
<input type="submit" id="sub" value="Submit">
</form>
<script>
function edit() {
google.script.run.withSuccessHandler(({data, filename}) => {
const a = document.createElement("a");
document.body.appendChild(a);
a.download = filename;
a.href = data;
a.click();
}).editDoc(document.getElementById("input").value);
}
</script>
</body>
</html>
- 我想在这种情况下,也可以使用一个简单的按钮来代替提交按钮。
- 在Google文档的情况下,当检索到博客时,在当前阶段,blob 是 PDF 格式。
- 在此修改后的脚本中,当输入文本并单击按钮时,PDF 文件将下载到本地 PC。
注:
- 在您的脚本中,似乎使用了 Web Apps。在这种情况下,当 Web Apps 的脚本被修改时,请重新部署 Web Apps 为新版本。由此,最新的脚本被反映到Web Apps。请注意这一点。
参考文献:
我创建了一个脚本,当部署为 Web 应用程序时,它会询问用户一些输入,然后创建并写入 google 文档。
显然,无法从脚本下载 google 文档,下一个最好的办法似乎是转换文档并将其保存在我的驱动器中。
我尝试过这种非常简单的方法,灵感来自 Convert Google Doc to PDF using Google Script Editior
项目部署为网络应用程序
Code.gs:
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index');
}
function editDoc(data) {
let doc = DocumentApp.create("Title");
let body = doc.getBody();
body.setText(data);
docblob = doc.getAs('application/pdf');
docblob.setName(doc.getName() + ".pdf");
let file = DriveApp.createFile(docblob);
}
Index.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<form onsubmit="edit()">
<input type="text" id="input">
<input type="submit" id="sub" value="Submit">
</form>
<script>
function edit() {
google.script.run.editDoc(document.getElementById("input").value);
}
</script>
</body>
</html>
因此,这会在我的 google 驱动器中添加一个 pdf,它应该是创建的 google 文档的 pdf 格式,但它是空白的。
我相信你的目标如下。
- 您想要创建新的 Google 文档,包括来自输入标签的值。
- 并且,您想将 Google 文档导出为 PDF 文件。
- 您想使用 Google Apps 脚本实现此目的。
修改点:
- 我认为
however it is blank
的原因是文档没有保存。 - 为了下载PDF文件,我建议将PDF数据转成base64数据,设置为数据URL,然后下载。
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
Google Apps 脚本端:Code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile('Index');
}
function editDoc(data) {
let doc = DocumentApp.create("Title");
let body = doc.getBody();
body.setText(data);
doc.saveAndClose();
return {
data: "data:application/pdf;base64," + Utilities.base64Encode(doc.getBlob().getBytes()),
filename: doc.getName() + ".pdf"
};
}
HTML & Javascript 方:Index.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<form onsubmit="event.preventDefault(); edit();">
<input type="text" id="input">
<input type="submit" id="sub" value="Submit">
</form>
<script>
function edit() {
google.script.run.withSuccessHandler(({data, filename}) => {
const a = document.createElement("a");
document.body.appendChild(a);
a.download = filename;
a.href = data;
a.click();
}).editDoc(document.getElementById("input").value);
}
</script>
</body>
</html>
- 我想在这种情况下,也可以使用一个简单的按钮来代替提交按钮。
- 在Google文档的情况下,当检索到博客时,在当前阶段,blob 是 PDF 格式。
- 在此修改后的脚本中,当输入文本并单击按钮时,PDF 文件将下载到本地 PC。
注:
- 在您的脚本中,似乎使用了 Web Apps。在这种情况下,当 Web Apps 的脚本被修改时,请重新部署 Web Apps 为新版本。由此,最新的脚本被反映到Web Apps。请注意这一点。