You need to enable JavaScript to run this app. 如何通过GAS网页应用向浏览器提供PDF二进制文件并实现用户下载
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 21:45:03