如何为Google Form提交的响应生成带图片的PDF并自动向受访者发送带附件邮件
实现方案
前置准备
- 先确认Google Form中图片上传字段的准确名称,比如字段名为「申请人照片」,后续代码需要匹配该名称
- 在你的Google Docs模板中需要插入图片的位置添加占位符,比如
{UploadedImage},和现有替换姓名的{Fn}格式保持一致
核心代码修改
你仅需要调整createPDF函数,新增一个从Drive链接提取文件ID的辅助函数即可,完整修改后代码如下:
function afterFormSubmit(e) { const info = e.namedValues; const pdfFile=createPDF(info); const entryRow=e.range.getRow(); SpreadsheetApp.getActiveSpreadsheet().getSheetByName("People").getRange(entryRow,6).setValue(pdfFile.getUrl()); sendEmail(e.namedValues["Email"], pdfFile); } function sendEmail(email, pdfFile){ GmailApp.sendEmail(email, "表单提交成功", "您的表单已提交成功,附件为您的提交记录PDF文件", {attachments:[pdfFile],name:"Test Case" }); } // 辅助函数:从Google Drive文件链接中提取文件ID function getFileIdFromUrl(url) { const match = url.match(/[-\w]{25,}/); return match ? match[0] : null; } function createPDF(info){ const pdfFolder= DriveApp.getFolderById("pdfFolderID"); const tempFolder=DriveApp.getFolderById("tempFolderID"); const templateDoc=DriveApp.getFileById("TemplateDOc"); const newTempFile= templateDoc.makeCopy(tempFolder); const openDoc= DocumentApp.openById(newTempFile.getId()); const body=openDoc.getBody(); // 原有文本替换逻辑 body.replaceText("{Fn}", info['Name'][0]); // 新增图片插入逻辑 // 注意:此处「上传照片」替换为你Google Form里的图片上传字段的实际名称 const imageUrl = info['上传照片'][0]; const imageId = getFileIdFromUrl(imageUrl); if(imageId) { const imageBlob = DriveApp.getFileById(imageId).getBlob(); // 查找占位符位置 const rangeElement = body.findText("{UploadedImage}"); if(rangeElement) { const element = rangeElement.getElement(); const parent = element.getParent(); const childIndex = parent.getParent().getChildIndex(parent); // 插入图片,设置宽度为600像素,高度自适应,可根据需要调整 const insertedImage = parent.getParent().insertImage(childIndex + 1, imageBlob); const width = insertedImage.getWidth(); const height = insertedImage.getHeight(); const maxWidth = 600; if(width > maxWidth) { const ratio = height / width; insertedImage.setWidth(maxWidth); insertedImage.setHeight(maxWidth * ratio); } // 删除占位符 element.removeFromParent(); } } openDoc.saveAndClose(); const blobPDF= newTempFile.getAs(MimeType.PDF); const pdfFile= pdfFolder.createFile(blobPDF).setName(info['Name'][0]+ "_职位申请文件" ); tempFolder.removeFile(newTempFile); return pdfFile; }
注意事项
- 请确保脚本运行账号拥有Form上传图片目录的访问权限,默认情况下Form绑定的账号有权限访问所有用户提交的上传文件
- 可根据自己的文档排版需求调整插入图片的最大宽度参数
maxWidth - 如果需要插入多张图片,可复制图片插入逻辑,对应不同的字段名和模板占位符即可
内容的提问来源于stack exchange,提问作者mohitji
相关产品推荐
相关产品推荐

