首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成以Google表单提交的图像响应的PDF,并将附件PDF发送给应答者

如何生成以Google表单提交的图像响应的PDF,并将附件PDF发送给应答者
EN

Stack Overflow用户
提问于 2021-10-13 09:08:18
回答 1查看 133关注 0票数 0

我正在开发一个google表单,其中包含一些文本字段和图像字段。现在,在提交后,我能够生成pdf的文本反应。此外,pdf的答复是发送给答复者的电子邮件。

我提到过这个视频教程

用于文本的脚本:

代码语言:javascript
复制
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;    
}

现在,我正在寻找解决方案,以便将答辩人在谷歌表单上提交的图像插入到同一文档中,并将自动邮件发送给答辩人。

类似的问题也被问到这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-13 14:41:43

为图像创建一个占位符,并通过从上传图像的url检索的实际图像blob替换它。

假设图像的URL包含在对" image“问题的响应中,并且模板中的占位符称为"{Image}",那么修改function createPdf如下:

代码语言:javascript
复制
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插入父段落

换句话说,文本占位符将被图像替换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69552686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档