如何用Apps Script将谷歌图表API二维码插入Google文档?
解决方案:通过Google图表API二维码URL插入Google文档
核心修改说明
- 移除依赖Google Drive文件ID的图片获取逻辑,直接通过
UrlFetchApp.fetch()获取在线二维码的Blob对象 - 保留原有的占位符替换、样式设置、PDF生成及文件管理逻辑
修改后的完整代码
function cetakJurnalQR() { var fileMasterId = '1Qvj2iA-5iT3YRAkrkkB7lRNOr47pwS5rLQ5G8XXXXXX' var folderID = "1qQZSrTugL_ZkyZ-ceGo8b6RqY2XXXXXX" // 定义谷歌图表API生成的二维码URL var qrCodeUrl = "https://chart.googleapis.com/chart?chs=100x100&cht=qr&chld=2&chl=sampleQRCode"; // 通过UrlFetchApp获取在线图片的Blob var image = UrlFetchApp.fetch(qrCodeUrl).getBlob(); var copyId = DriveApp.getFileById(fileMasterId).makeCopy('NEW JOURNAL'+'_2023_').getId(); var copyDoc = DocumentApp.openById(copyId); var copyBody = copyDoc.getActiveSection(); // 插入二维码 var position = copyBody.findText('<QRCode>').getElement(); if (!position) { throw new Error("未找到'<QRCode>'占位符。"); } var para = position.getParent().asParagraph(); var insertedImage = para.appendInlineImage(image).setHeight(100).setWidth(100); para.getParent().setVerticalAlignment(DocumentApp.VerticalAlignment.CENTER); var styles = { [DocumentApp.Attribute.HORIZONTAL_ALIGNMENT]: DocumentApp.HorizontalAlignment.CENTER }; insertedImage.getParent().setAttributes(styles) para.removeChild(position); copyDoc.saveAndClose(); // 通过getAs Blob转换将临时文档转为PDF docblob = DriveApp.getFileById(copyId).getAs("application/pdf"); docblob.setName("NEW GENERATE .pdf"); var file = DriveApp.createFile(docblob); // 新增部分 var newFileId = file.getId(); var newFile = DriveApp.getFileById(newFileId); var docFolder = DriveApp.getFolderById(folderID) newFile.moveTo(docFolder); DriveApp.getFileById(copyId).setTrashed(true); }
关键代码解释
原来的代码通过DriveApp.getFileById(fotoID).getBlob()从Google Drive获取图片,现在替换为:
- 直接定义二维码的生成URL(可根据需求修改
chl参数的值来改变二维码内容) - 使用
UrlFetchApp.fetch(qrCodeUrl).getBlob()请求该URL并获取图片的Blob对象,后续插入文档的逻辑完全复用原有代码即可
内容的提问来源于stack exchange,提问作者PSAB Plalangan
相关产品推荐
相关产品推荐

