如何通过GAS网页应用向浏览器提供PDF二进制文件并实现用户下载
实现方案
通过Google Apps Script搭建的网页应用完全可以实现这个需求,你看到的早年回答提到的限制早已不存在,以下是可直接复用的实现方案:
1. 服务端逻辑(Code.gs)
将以下代码写入Apps Script项目的Code.gs文件中,你可以直接替换示例中的PDF生成逻辑为你已经开发完成的现有逻辑:
function doGet() { // 加载前端页面 return HtmlService.createHtmlOutputFromFile('index') .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); } // 接收前端传入的用户输入代码,返回生成的PDF文件数据 function generateAndGetPdf(userInputCode) { // --------------- 替换为你自己的PDF生成逻辑 --------------- // 示例:假设你已生成PDF并拿到对应Google Drive文件ID const pdfFileId = "替换为你的PDF文件Drive ID"; const pdfFile = DriveApp.getFileById(pdfFileId); // -------------------------------------------------------- // 将PDF文件转为base64编码返回给前端,无需修改文件公开权限 const pdfBlob = pdfFile.getBlob(); return { fileName: `导出结果_${userInputCode}.pdf`, base64Data: Utilities.base64Encode(pdfBlob.getBytes()) }; }
2. 前端页面逻辑(index.html)
在项目中新建名为index的HTML文件,写入以下代码实现表单提交和自动下载逻辑:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>PDF导出工具</title> </head> <body> <div style="padding: 30px; max-width: 500px; margin: 0 auto;"> <h3>输入代码导出PDF</h3> <input type="text" id="userCode" placeholder="请输入代码" required style="width: 100%; padding: 8px; margin: 10px 0;" > <button onclick="submitForm()" style="padding: 8px 20px; background: #4285f4; color: #fff; border: none; border-radius: 4px; cursor: pointer;" > 生成并下载PDF </button> <p id="loadingTip" style="color: #666; margin-top: 15px; display: none;">正在生成文件,请稍候...</p> </div> <script> function submitForm() { const userInput = document.getElementById('userCode').value.trim(); if (!userInput) { alert('请输入有效代码'); return; } const loadingTip = document.getElementById('loadingTip'); loadingTip.style.display = 'block'; // 调用服务端Google Apps Script接口 google.script.run .withSuccessHandler(res => { loadingTip.style.display = 'none'; // 触发浏览器自动下载 const downloadLink = document.createElement('a'); downloadLink.href = `data:application/pdf;base64,${res.base64Data}`; downloadLink.download = res.fileName; downloadLink.click(); alert('PDF文件已开始下载'); }) .withFailureHandler(err => { loadingTip.style.display = 'none'; alert('生成失败:' + err); }) .generateAndGetPdf(userInput); } </script> </body> </html>
3. 部署配置注意事项
部署为Web应用时按以下规则配置即可正常使用:
- 执行身份选择「我(你的Google账号)」,这样服务端可以直接读取你Drive下的文件,无需给终端用户开放Drive权限
- 访问权限根据需求选择:如果要面向所有用户使用选「任何人,甚至匿名用户」,仅内部使用选择对应组织范围即可
- 部署后生成的Web应用链接可以直接分享给用户使用,无需额外安装任何工具
内容的提问来源于stack exchange,提问作者Radek
相关产品推荐
相关产品推荐

