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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:06:00