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

Google表单生成含上传原图的DMCA通知PDF的问题求解

解决方案

你当前脚本中拿到的AttachOrig是上传图片的Google Drive访问链接,直接做文本替换当然只能显示链接,需要先提取链接对应的文件ID,调取图片blob后插入到文档模板的对应位置即可,修改步骤如下:

步骤1:提前调整Google Doc模板

把你原来模板里标注要放图片位置的{{AttachOrig}}占位符单独放在一个段落里,不要和其他文本放在同一行,方便后续定位替换。

步骤2:修改Apps Script代码

修改后的完整代码如下,核心增加了从Drive链接提取文件ID、定位占位符、插入图片的逻辑:

function onSubmit(e) {  
  const rg = e.range;  
  console.log(rg.getA1Notation());  
  const sh = rg.getSheet();    

  // 获取所有表单提交数据
  // 注意:取值依赖表头,如果表头修改了这里也要同步更新
  const Email= e.namedValues['Email Address'][0];  
  const LinkOrig = e.namedValues['Link(s) for where the original work appears'][0];  
  const AttachOrig = e.namedValues['Copies of the original copyrighted work'][0];  
  const Domain = e.namedValues['Infringing Domain'][0];  
  const LinkInfring = e.namedValues['Link(s) for where infringing image appears online'][0];  
  const Contact = e.namedValues['Contact Information'][0];  
  const WHOIS = e.namedValues['WHOIS Search results'][0];  
  const Date = e.namedValues['Date'][0];  
  const Location = e.namedValues['Where are you based?'][0];    

  // 从模板创建新的DMCA文档
  // 文件夹ID(保存位置)和文件ID(模板ID+新文档ID)
  const DMCAFolderID = 'folderidhere';  
  const DMCALibFolder = DriveApp.getFolderById(DMCAFolderID);    

  const TemplateFileID = 'templateidhere';  
  const newFilename = 'DMCA Notice -' + TemplateFileID + 'Domain';    

  // 复制模板文件
  const newTemplateFileID = DriveApp.getFileById(TemplateFileID).makeCopy(newFilename, DMCALibFolder).getId();  

  // 读取DMCA通知的文档内容
  var document = DocumentApp.openById(newTemplateFileID);  
  var body = document.getBody();    

  // 替换所有普通文本占位符
  body.replaceText('{{LinkOrig}}', LinkOrig);  
  body.replaceText('{{LinkInfring}}', LinkInfring);  
  body.replaceText('{{ContactInfo}}', Contact);  
  body.replaceText('{{WHOISResults}}', WHOIS);  
  body.replaceText('{{date}}', Date);  
  body.replaceText('{{location}}', Location);  

  // 新增:插入上传的版权作品图片
  // 从上传链接提取图片文件ID
  const imgFileId = AttachOrig.split('id=')[1];
  const imgBlob = DriveApp.getFileById(imgFileId).getBlob();
  // 定位{{AttachOrig}}占位符的位置
  const findPlaceholder = body.findText('{{AttachOrig}}');
  if (findPlaceholder) {
    const elem = findPlaceholder.getElement();
    const parentPara = elem.getParent().asParagraph();
    // 删除占位符文本
    elem.removeFromParent();
    // 插入图片,可调整width和height参数控制图片显示大小,单位为像素
    const insertedImg = parentPara.appendInlineImage(imgBlob);
    insertedImg.setWidth(500);
    insertedImg.setHeight(300);
  }

  document.saveAndClose();
  // 配置邮件参数
  var subject = 'DMCA Notice - ' + Domain;
  var msgHtml = "您好,<br/><br/>请查看附件中的DMCA通知。<br/><br/>此致<br/>运营团队<br/>" ;
  var attachment = DriveApp.getFileById(newTemplateFileID);
  // 发送带附件的邮件
  GmailApp.sendEmail(Email, subject, msgHtml, {htmlBody: msgHtml, attachments: [attachment.getAs(MimeType.PDF)]});  
}

注意事项

  • 如果表单支持上传多张图片,需要把AttachOrig的取值改成遍历数组,依次插入多张图片即可
  • 图片的宽高参数可以根据你模板的排版需求自行调整,避免图片超出页面边界
  • 确保Google Form的文件上传权限配置正确,脚本运行账号对上传的图片文件有访问权限

内容的提问来源于stack exchange,提问作者taleesita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:06:03