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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:36:07