我正在开发一个谷歌表单,其中有一些文本字段和图像字段。现在提交后,我能够生成文本响应的pdf。此外,回复的pdf将发送到应答者的电子邮件。
我已经参考了这个视频教程。
用于文本的脚本:
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, "Succesfuly filled the form ", {attachments:[pdfFile],name:"Test Case" });
}
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]);
openDoc.saveAndClose();
const blobPDF= newTempFile.getAs(MimeType.PDF);
const pdfFile= pdfFolder.createFile(blobPDF).setName(info['Name'][0]+ "_Application for the post" );
tempFolder.removeFile(newTempFile);
return pdfFile;
}
现在我正在寻找解决方案,以便答辩人在谷歌表单上提交的图像应插入到同一文档中,并自动发送邮件给答辩人。
这里也有类似的问题
为图像创建一个占位符,并通过从上传图像的url检索到的实际图像blob来替换它
假设图像的URL包含在对问题"Image"的响应中并且模板中的占位符名为"{Image}",则将function createPdf
修改为:
function createPDF(info){
...
const body=openDoc.getBody();
body.replaceText("{Fn}", info['Name'][0]);
var imageUrl = info['Image'][0];
var imagePlaceholder = "{Image}";
var id = imageUrl.match(/[w_-]{25,}/)[0];
var img = DriveApp.getFileById(id);
var position = body.findText(imagePlaceholder);
var element = position.getElement();
element.asText().setText("");
element.getParent().asParagraph().insertInlineImage(0, img.getBlob());
openDoc.saveAndClose();
...
}
这段代码的作用是:
- 本地化与上传图片URL对应的命名值
- 通过DriveApp 打开URL获取图像blob
- 在模板中找到为图像保留的占位符
- 将文本替换为空字符串
- 检索包含占位符 的元素
- 获取元素的父段
- 插入图像blob到父段落
换句话说,文本占位符被图像替换。