You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将App Script生成的PDF Blob直接下载至本地?求替代方案

问题解答

能否直接将生成的PDF Blob下载到本地?

不能。你这段代码运行在Google Apps Script的云端服务器环境中,云端代码没有权限直接触发用户本地电脑的下载操作——它无法直接操控客户端浏览器的下载行为,所以没法直接把Blob下载到本地。

替代下载方案

方案1:部署为Web App,通过浏览器触发下载

把代码改成Web App形式,用户访问生成的URL时,浏览器会自动触发PDF下载:

function doGet() {
  var html = `
    <html>
      <body>
       <p>Hello World!</p>
      </body>
    </html>`;

  const blob = Utilities.newBlob(html, MimeType.HTML);
  const pdfBlob = blob.getAs(MimeType.PDF);
  pdfBlob.setName("Test.pdf");

  // 返回Blob,触发浏览器下载
  return ContentService.createTextOutput("")
    .setMimeType(ContentService.MimeType.PDF)
    .setContent(pdfBlob.getBytes());
}

部署步骤:

  • 在Google Apps Script编辑器中,点击「部署」→「新部署」
  • 类型选择「Web应用」
  • 执行权限选「我」,访问权限按需设置(比如「任何人,甚至匿名」)
  • 部署后得到URL,访问该URL即可自动下载PDF。

方案2:保存到Google Drive,生成可下载链接

把PDF保存到Google Drive,再生成共享下载链接,可通过邮件或日志获取:

function saveAndGetDownloadLink() {
  var html = `
    <html>
      <body>
       <p>Hello World!</p>
      </body>
    </html>`;

  const blob = Utilities.newBlob(html, MimeType.HTML);
  const pdfBlob = blob.getAs(MimeType.PDF);
  pdfBlob.setName("Test.pdf");

  // 保存到Drive根目录
  const file = DriveApp.createFile(pdfBlob);
  // 设置公开下载权限(可根据需求调整)
  file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
  
  // 获取并分发下载链接
  const downloadUrl = file.getDownloadUrl();
  Logger.log("PDF下载链接:" + downloadUrl);
  MailApp.sendEmail({
    to: email,
    subject: "PDF下载链接",
    htmlBody: `点击下载:<a href="${downloadUrl}">Test.pdf</a>`
  });
}

方案3:客户端浏览器直接处理(前端场景)

如果是配合前端页面,可在浏览器端直接将HTML转PDF并下载,无需云端服务:

// 浏览器端JS代码(需引入jsPDF库)
function downloadPdf() {
  const html = `
    <html>
      <body>
       <p>Hello World!</p>
      </body>
    </html>`;
  
  const doc = new jsPDF();
  doc.fromHTML(html, 15, 15);
  doc.save("Test.pdf");
}

内容的提问来源于stack exchange,提问作者Jim E Russel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:30:48