使用App Script生成PDF时,能否自定义页面尺寸(52mm×25mm)与边距?
解决Google Apps Script生成自定义尺寸PDF的问题
你的代码核心功能没问题,只是没指定自定义页面尺寸,所以导出的PDF用了默认的纸张大小(比如A4)。咱们只需要在导出PDF时添加自定义尺寸的参数,就能搞定52mm×25mm的需求。
关键知识点:单位转换
Google Sheets的PDF导出参数用的是磅(points),而非毫米,所以得先做单位转换:
- 1mm ≈ 2.83465磅
- 52mm ≈ 147.4磅
- 25mm ≈ 70.87磅
修改后的完整代码示例
我把你的函数补充完整,并添加了自定义尺寸的导出逻辑,重点看PDF生成的核心部分:
function CreaPDF() { // 该函数将发票打印为PDF。首先将电子表格复制到新文档。删除除待打印工作表外的所有工作表。保存为PDF。覆盖同名现有文档。 var sourceSpreadsheet = SpreadsheetApp.getActive(); var sheetName = "Factura"; var folderID = getParentFolder(); // 假设你的getParentFolder()函数能正确返回文件夹ID var targetFolder = DriveApp.getFolderById(folderID); // 复制源表格到临时文档(避免修改原文件) var tempSpreadsheet = sourceSpreadsheet.copy("Temp Factura PDF"); var sheets = tempSpreadsheet.getSheets(); // 删除除目标工作表外的所有工作表 for (var i = 0; i < sheets.length; i++) { if (sheets[i].getName() !== sheetName) { tempSpreadsheet.deleteSheet(sheets[i]); } } // --- 核心修改:自定义尺寸导出PDF --- var targetSheet = tempSpreadsheet.getSheetByName(sheetName); // 构建带自定义尺寸的导出链接 var exportUrl = "https://docs.google.com/spreadsheets/d/" + tempSpreadsheet.getId() + "/export?" + "format=pdf" + "&size=custom" + // 启用自定义尺寸 "&width=147.4" + // 52mm转换为磅 "&height=70.87" + // 25mm转换为磅 "&fitw=false" + // 禁止自动调整页面宽度 "&sheetnames=false&printtitle=false&pagenumbers=false" + // 隐藏冗余元素 "&gridlines=false" + // 隐藏网格线 "&gid=" + targetSheet.getSheetId(); // 指定导出的工作表ID // 获取OAuth令牌,用于访问导出链接 var oauthToken = ScriptApp.getOAuthToken(); var response = UrlFetchApp.fetch(exportUrl, { headers: { 'Authorization': 'Bearer ' + oauthToken } }); // 生成PDF Blob var pdfBlob = response.getBlob().setName("Factura.pdf"); // 覆盖同名现有文档 var existingFiles = targetFolder.getFilesByName("Factura.pdf"); if (existingFiles.hasNext()) { existingFiles.next().setTrashed(true); } targetFolder.createFile(pdfBlob); // 删除临时表格 DriveApp.getFileById(tempSpreadsheet.getId()).setTrashed(true); }
额外优化建议
- 如果需要调整边距,可以在导出链接里添加
&top=0&bottom=0&left=0&right=0(设置为0边距,可根据需求修改数值) - 如果你的
getParentFolder()函数有问题,可以直接替换成固定的文件夹ID字符串,比如var folderID = "your-folder-id-here"; - 测试时可以先注释掉删除临时表格的代码,方便检查临时文件是否正确
内容的提问来源于stack exchange,提问作者Kashif Iqbal
相关产品推荐
相关产品推荐

