Google表单转PDF:如何通过Apps Script添加指定ID的图片?
问题
我通过Google Apps Script将Google表单提交的信息,借助Google Document转换为PDF文件。目前已实现文本内容的替换与添加,但不清楚如何添加指定ID的图片。需要添加的图片文件ID为:
1I63WRYGP169inM1TvCJIaMSTBozaNZygGrdvPLcTLrechAzrVZWmjWKVuMTKM92vZDV7p1JU
现有代码
var docFile = DriveApp.getFileById('1cc1xjtE6WyYjVVwY95earN6xht2mP01EEPhAyC-yFHE'); var TempFolder = DriveApp.getFolderById('1vaXCrOJAg1x2JCzEng9nSPn6om8dWmib'); var PDFFolder = DriveApp.getFolderById('16r-564UEEuBcyfTIX0xnjJRk6bFJjzL1'); var ss = SpreadsheetApp.openById('1kZFrbnjgVnq7wB4mFYAMCjFiDB2PAfkmbYGvhLg_U00'); var sh = ss.getSheetByName('Form Yanıtları 1'); var data = sh.getRange(ss.getLastRow(),1,1,9).getValues() data.forEach(r=>{ var item1 = r[1] var item2 = r[2] var item3 = r[3] var item4 = r[4] var item5 = r[5] var item6 = r[6] var item7 = r[7] var item8 = r[8] var item9 = r[9] item6 = LanguageApp.translate(Utilities.formatDate(item6,'GMT+7','dd MMMM yyyy'),'en','tr').split(' ').map((a,i) =>{if(i != 2 || parseInt(a)>2100){return a}; a = parseInt(a); return a}).join(' ') item7 = Utilities.formatDate(item7, 'GMT+3', 'HH:mm'); // Denetim başlama saati item8 = Utilities.formatDate(item8, 'GMT+3', 'HH:mm'); // Denetim bitiş saati CreatePDF(docFile,TempFolder,PDFFolder,item1,item2,item3,item4,item5,item6,item7,item8,item9) }) } function CreatePDF(docFile,TempFolder,PDFFolder,item1,item2,item3,item4,item5,item6,item7,item8,item9){ var tempFile = docFile.makeCopy(TempFolder) var tempDoc = DocumentApp.openById(tempFile.getId()) tempDoc.getBody().replaceText("{MAĞAZA ADI}",item2) tempDoc.getBody().replaceText("{DENETİMİ YAPAN}",item3) tempDoc.getBody().replaceText("{İLGİLİ HAFTA}",item4) tempDoc.getBody().replaceText("{MAĞAZA PUANI}",item5) tempDoc.getBody().replaceText("{DENETİM TARİHİ}",item6) tempDoc.getBody().replaceText("{DENETİM BAŞLAMA SAATİ}",item7) tempDoc.getBody().replaceText("{DENETİM BİTİŞ SAATİ}",item8) tempDoc.getBody().replaceText("{BİR ÖNCEKİ DENETİMİ YAPAN}",item9) tempDoc.saveAndClose() TempFolder.removeFile(tempFile) var PdfContent = tempFile.getAs(MimeType.PDF) var PdfFile = PDFFolder.createFile(PdfContent).setName(item2) MailApp.sendEmail(item1, item2 + ' ŞUBE', 'DENETİM FORMU..', { attachments: [PdfFile.getAs(MimeType.PDF)] }); }
解决方案
要在生成的PDF中插入指定ID的图片,可通过DocumentApp的insertImage方法实现,推荐两种插入方式:替换模板占位符(固定位置)或直接追加到文档末尾。
修改后的CreatePDF函数
function CreatePDF(docFile,TempFolder,PDFFolder,item1,item2,item3,item4,item5,item6,item7,item8,item9){ // 定义要插入的图片ID const TARGET_IMAGE_ID = "1I63WRYGP169inM1TvCJIaMSTBozaNZygGrdvPLcTLrechAzrVZWmjWKVuMTKM92vZDV7p1JU"; var tempFile = docFile.makeCopy(TempFolder); var tempDoc = DocumentApp.openById(tempFile.getId()); var body = tempDoc.getBody(); // 原有文本替换逻辑 body.replaceText("{MAĞAZA ADI}",item2); body.replaceText("{DENETİMİ YAPAN}",item3); body.replaceText("{İLGİLİ HAFTA}",item4); body.replaceText("{MAĞAZA PUANI}",item5); body.replaceText("{DENETİM TARİHİ}",item6); body.replaceText("{DENETİM BAŞLAMA SAATİ}",item7); body.replaceText("{DENETİM BİTİŞ SAATİ}",item8); body.replaceText("{BİR ÖNCEKİ DENETİMİ YAPAN}",item9); // 插入图片逻辑 try { const imageFile = DriveApp.getFileById(TARGET_IMAGE_ID); // 方式1:替换模板中的占位符{IMAGE_PLACEHOLDER}(推荐) const placeholder = body.findText("{IMAGE_PLACEHOLDER}"); if (placeholder) { const textElement = placeholder.getElement(); const parentElement = textElement.getParent(); const insertIndex = parentElement.getChildIndex(textElement); // 在占位符位置插入图片 parentElement.insertImage(insertIndex, imageFile); // 删除占位符文本 textElement.removeFromParent(); } else { // 方式2:如果无占位符,直接在文档末尾插入图片 body.appendImage(imageFile); } // 可选:调整图片尺寸(设置宽度为400px,高度自动按比例适配) const images = body.getImages(); const insertedImage = images[images.length - 1]; insertedImage.setWidth(400); } catch (error) { console.error("图片插入失败:" + error.message); } tempDoc.saveAndClose(); TempFolder.removeFile(tempFile); var PdfContent = tempFile.getAs(MimeType.PDF); var PdfFile = PDFFolder.createFile(PdfContent).setName(item2); MailApp.sendEmail(item1, item2 + ' ŞUBE', 'DENETİM FORMU..', { attachments: [PdfFile.getAs(MimeType.PDF)] }); }
关键说明
- 占位符准备:提前在Google文档模板中添加
{IMAGE_PLACEHOLDER}文本,放在你希望图片出现的位置,这样插入的图片会精准替换该位置。 - 图片获取:通过
DriveApp.getFileById(TARGET_IMAGE_ID)获取指定图片文件,确保脚本拥有该图片的访问权限。 - 尺寸调整:使用
setWidth方法设置图片宽度,高度会自动按原比例调整,避免图片显示异常。 - 异常处理:添加
try-catch块捕获图片获取或插入时的错误,防止整个PDF生成流程中断。
内容的提问来源于stack exchange,提问作者Esat Kurtul
相关产品推荐
相关产品推荐

