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
相关产品推荐
相关产品推荐

