Google Apps Script通过导出URL生成PDF时如何设置密码保护
答复
不存在能直接给导出PDF设置访问密码的Google导出URL参数,没法在导出环节直接完成PDF加密。
目前Google文档/表格导出PDF的所有已知参数(包括公开文档列的、以及开发者探明的未公开隐藏参数),全都是用来控制导出范围、页面尺寸、排版边距、是否显示网格线/页码/表名这类格式配置的,没有任何参数和PDF密码加密有关。你现在代码里拼的参数已经覆盖了绝大多数常用配置,找不到密码相关项不是你漏写了,是官方导出服务根本就没做这个功能,不用白费功夫试各种网传的奇怪参数。
要实现加密PDF的需求,你在拿到导出请求返回的PDF Blob之后,先做加密处理,再把加密后的Blob存到Drive、或者当邮件附件发就行,不用先存未加密的版本,避免留无密码的副本。常见的实现方式有两种:
- 不想把文件传出Google服务器的话,就给Apps Script项目引入纯JS实现的轻量PDF处理库(支持PDF加密能力即可),读取Blob的二进制内容后直接调用加密接口设置打开密码,生成加密后的新Blob就行,全程数据都在Google生态内流转。
- 对数据敏感度不高的话,也可以对接第三方PDF加密API,把拿到的未加密Blob传给接口处理后拿回加密文件,这种方式实现成本更低,但需要把文件内容传到第三方服务端。
你现有代码只需要在拿到未加密Blob的步骤后插入加密逻辑即可,调整后的代码结构参考:
function createPDF(ssId, sheet, pdfName, pdfOpenPassword) { const fr = 0, fc = 0, lc = 9, lr = 27; const url = "https://docs.google.com/spreadsheets/d/" + ssId + "/export" + "?format=pdf&" + "size=8&" + "fzr=true&" + "portrait=false&" + "fitw=true&" + "gridlines=false&" + "printtitle=false&" + "top_margin=0.25&" + "bottom_margin=0.25&" + "left_margin=0.25&" + "right_margin=0.25&" + "sheetnames=false&" + "pagenum=UNDEFINED&" + "attachment=true&" + "gid=" + sheet.getSheetId() + '&' + "r1=" + fr + "&c1=" + fc + "&r2=" + lr + "&c2=" + lc; const params = { method: "GET", headers: { "authorization": "Bearer " + ScriptApp.getOAuthToken() } }; const rawPdfBlob = UrlFetchApp.fetch(url, params).getBlob().setName(pdfName + '.pdf'); // 在此处插入自定义加密逻辑,传入原始blob和设置的密码,返回加密后的PDF blob const encryptedPdfBlob = addPdfPassword(rawPdfBlob, pdfOpenPassword); // 后续存储、发邮件操作全部使用加密后的blob即可 const folder = getFolderByName_(OUTPUT_FOLDER_NAME); const pdfFile = folder.createFile(encryptedPdfBlob); return pdfFile; }
内容的提问来源于stack exchange,提问作者absoluteM
相关产品推荐
相关产品推荐

