如何在Google Apps Script中压缩PDF或图片Blob大小?
解决Google Apps Script中PDF/图片Blob体积过大问题
一、压缩上传的图片Blob
在将图片插入临时文档前,直接对图片Blob进行压缩,可通过调整质量、格式来减小体积:
方法1:使用内置工具压缩图片
利用Utilities.compress()方法对Blob进行压缩,可指定压缩质量(0-100,数值越小压缩率越高):
var originalBlob = DriveApp.getFileById(splitText[0]).getBlob(); // 压缩图片,质量设为50(可根据需求调整) var compressedBlob = Utilities.compress(originalBlob, {quality: 50}); body.appendImage(compressedBlob).setWidth(sizes).setHeight(sizes);
方法2:转换图片格式并调整质量
如果原图是PNG等无损格式,转成JPEG并降低质量能大幅减小体积:
var originalBlob = DriveApp.getFileById(splitText[0]).getBlob(); // 转换为JPEG格式,结合压缩工具优化质量 var compressedBlob = Utilities.compress(originalBlob.getAs(MimeType.JPEG), {quality: 60}); body.appendImage(compressedBlob).setWidth(sizes).setHeight(sizes);
二、压缩PDF Blob
直接从Google Docs转PDF时,可通过设置导出参数优化体积,重点压缩其中的图片:
方法:使用Drive高级服务导出PDF(需先启用)
- 在Google Apps Script编辑器中,点击「资源」→「高级Google服务」,启用Drive API。
- 修改PDF导出代码,添加优化参数:
// 定义PDF导出优化参数 var exportOptions = { jpegQuality: 50, // 图片质量0-100 useContentOnly: true, // 只导出核心内容,忽略页眉页脚 omitBackground: true, // 移除文档背景(如果有) pageSize: 'A4' // 指定标准页面尺寸,减少空白占比 }; // 导出压缩后的PDF Blob var blobPDF = Drive.Files.export(newTempFile.getId(), MimeType.PDF, exportOptions); const pdfFile = pdfFolder.createFile(blobPDF).setName(info[2] + "---" + "Opmeting");
补充方案
如果无法启用Drive API,先确保插入文档的图片已按第一部分方法压缩,再转PDF,生成的文件体积也会相应减小。
内容的提问来源于stack exchange,提问作者Lars Dilweg
相关产品推荐
相关产品推荐

