如何用Google Apps Script一键将Google文档导出为PDF?

来源:Redis教程作者:天穹小白头衔:草根站长
导读:本期聚焦于天穹小白创作的《如何用Google Apps Script一键将Google文档导出为PDF?》,敬请观看详情。想把Google文档批量转换成PDF却不想手动一个个下载?Google Apps Script提供了一个轻量免费的自动化方案。本文详细讲解如何利用Drive API的导出接口,把指定文档ID转换成PDF文件并保存到云端硬盘,只需十几行代码就能完成。文中会介绍脚本的完整实现步骤、获取文档ID的方法、如何自定义输出文件名和保存目录,还会演示如何添加自定义菜单实现真正意义上的一键导出,以及如何利用时间触发器做批量定时转换。不需要安装任何软件,浏览器打开就能写代码,适合经常需要归档文档、发送PDF附件的办公人员和学习脚本开发的入门者参考。

Google文档在日常办公中使用频率很高,但每次要生成PDF都得手动点文件菜单、选择下载、等待浏览器弹出保存窗口,重复操作多了非常烦人。其实Google提供了一套完全免费的脚本工具Google Apps Script,只要写上十几行代码,就能实现一键把当前文档或指定文档导出为PDF,甚至还能批量转换整个文件夹里的所有文件。这篇文章从零开始讲解完整实现过程,包括脚本怎么写、文档ID从哪里拿、如何加自定义菜单和定时任务,照着做就能跑起来。

如何用Google Apps Script一键将Google文档导出为PDF?

一、Google Apps Script是什么,为什么适合做PDF导出

Google Apps Script是Google推出的基于JavaScript的云端脚本平台,可以直接操作Google文档、表格、幻灯片以及云端硬盘等几乎所有Google服务。它运行在Google的服务器上,不占用本地资源,也无需安装任何开发环境,只要有浏览器就能编写和运行脚本。

用它做PDF导出有天然的优势:Google Drive本身提供了导出接口,允许把Google Docs格式的文件转换成PDF、Word、HTML等多种格式,而Apps Script把这个能力封装成了简单的调用,几行代码就能拿到转换结果。相比调用外部转换API或者本地装软件,这种方式免费、稳定、速度快,导出的PDF排版也和文档里看到的基本一致。

另一个好处是脚本能和文档本身绑定。你可以把脚本挂到某个文档的自定义菜单里,点一下按钮就完成导出,也可以做成独立脚本批量处理多个文件,灵活性非常高。

二、核心代码:导出指定文档为PDF

先看核心实现。导出PDF的关键是使用DriveAppgetBlobById配合exportLinks思路,不过最常用的简洁写法是直接通过URL获取导出内容。下面的脚本把指定ID的Google文档转换成PDF并保存到云盘根目录:

function exportDocToPdf() {
  // 替换成你自己的文档ID
  var docId = '你的文档ID写在这里';

  // 通过导出地址获取PDF内容
  var url = 'https://docs.google.com/document/d/' + docId + '/export?format=pdf';

  var blob = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    }
  }).getBlob().setName('导出的文档.pdf');

  // 保存到云端硬盘根目录
  var pdfFile = DriveApp.createFile(blob);
  Logger.log('PDF已生成,文件链接:' + pdfFile.getUrl());
}

代码逻辑分三步:第一步拼接导出URL,其中format=pdf指定了输出格式;第二步用UrlFetchApp.fetch带上授权令牌去请求这个地址,拿到二进制内容并命名为PDF文件;第三步用DriveApp.createFile把内容存成云盘文件。运行后打开日志查看器就能看到生成的PDF链接。

这里有个关键点必须说明:Authorization请求头不能省略。因为Google文档默认是私有的,直接fetch导出地址会被重定向到登录页,拿到的就不是PDF而是HTML页面。加上ScriptApp.getOAuthToken()获取的令牌后,Google才认得这是脚本所有者发起的合法请求。此外,脚本还需要文档读取权限,第一次运行时会弹出授权窗口,按提示确认即可。

获取文档ID的方法也很简单:打开目标文档,看浏览器地址栏中/d//edit之间的那串字符就是ID。例如地址为https://docs.google.com/document/d/abc123xyz/edit,那么ID就是abc123xyz

三、进阶:添加自定义菜单实现真正的一键导出

上面那种方式适合转换固定文档,但每次要改ID不方便。更实用的做法是把脚本绑定到文档上,并添加一个菜单项,点一下就导出当前文档。打开目标文档,依次点击扩展程序、Apps Script,进入绑定脚本的编辑器,写入以下代码:

function onOpen() {
  // 文档打开时创建自定义菜单
  DocumentApp.getUi()
    .createMenu('PDF工具')
    .addItem('导出当前文档为PDF', 'exportCurrentDoc')
    .addToUi();
}

function exportCurrentDoc() {
  var doc = DocumentApp.getActiveDocument();
  var docId = doc.getId();
  var docName = doc.getName();

  var url = 'https://docs.google.com/document/d/' + docId + '/export?format=pdf';

  var blob = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    }
  }).getBlob().setName(docName + '.pdf');

  var pdfFile = DriveApp.createFile(blob);

  DocumentApp.getUi().alert('导出成功!PDF链接:\n' + pdfFile.getUrl());
}

onOpen是内置触发函数,文档每次被打开时会自动执行,从而在菜单栏生成一个叫PDF工具的菜单。点击导出当前文档为PDF后,脚本通过DocumentApp.getActiveDocument()拿到当前文档对象,自动获取ID和文件名,导出的PDF也会以文档原名命名,不需要手动修改任何参数。

如果希望PDF保存到指定文件夹而不是根目录,可以把DriveApp.createFile(blob)改成先获取目标文件夹再创建文件。比如DriveApp.getFolderById('文件夹ID')拿到文件夹对象后,调用folder.createFile(blob)即可,文件夹ID同样可以从浏览器地址栏中找到。

四、批量转换与定时任务

批量场景也很常见,比如把某个文件夹里所有Google文档统一转成PDF归档。思路是遍历文件夹中的文件,筛选出文档类型的文件逐个导出:

function exportFolderToPdf() {
  var folder = DriveApp.getFolderById('文件夹ID');
  var files = folder.getFilesByType(MimeType.GOOGLE_DOCS);

  while (files.hasNext()) {
    var file = files.next();
    var url = 'https://docs.google.com/document/d/' + file.getId() + '/export?format=pdf';

    var blob = UrlFetchApp.fetch(url, {
      headers: {
        Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
      }
    }).getBlob().setName(file.getName() + '.pdf');

    folder.createFile(blob);
    Logger.log('已完成:' + file.getName());
  }
}

getFilesByType(MimeType.GOOGLE_DOCS)只筛选Google文档,跳过已经存在的PDF和其他格式文件,避免重复转换。生成的PDF直接放在同一文件夹里,方便对照检查。

想实现定时自动转换,可以在脚本编辑器的触发器页面新建时间驱动触发器,比如设置为每天凌晨两点执行一次批量导出函数,这样团队共享文件夹里的文档每天都会自动归档出PDF版本,完全不需要人工干预。需要注意的是免费账号的执行总时长有配额限制,单个文件夹文件量特别大时建议分批处理或者拆分成多个触发任务。

五、常见问题与注意事项

使用过程中可能会遇到几个典型问题。一是授权报错,通常是因为脚本作用域不够,检查脚本是否声明了对文档和外部请求的权限,或者重新走一遍授权流程。二是导出的PDF内容为空或者变成HTML,大概率是授权头没加或者令牌过期,重新运行一次脚本一般就能解决。三是文件名包含斜杠等特殊字符会导致创建失败,保存前最好做一次字符替换处理。

另外要提醒的是,导出接口对Google Docs编辑页面有效,如果你操作的是表格,把URL中的document/d/换成spreadsheets/d/并加上导出参数即可;幻灯片同理换成presentation/d/。掌握这个规律后,三类文档的PDF导出都可以用同一套代码思路搞定,日常办公中的自动化需求基本都能覆盖。

Google Apps ScriptGoogle文档导出PDFPDF导出脚本修改时间:2026-09-12 19:06:33

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260912/55495.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。