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

Google表单转PDF:如何通过Apps Script添加指定ID的图片?

问题

我通过Google Apps Script将Google表单提交的信息,借助Google Document转换为PDF文件。目前已实现文本内容的替换与添加,但不清楚如何添加指定ID的图片。需要添加的图片文件ID为:

1I63WRYGP169inM1TvCJIaMSTBozaNZygGrdvPLcTLrechAzrVZWmjWKVuMTKM92vZDV7p1JU

现有代码

var docFile = DriveApp.getFileById('1cc1xjtE6WyYjVVwY95earN6xht2mP01EEPhAyC-yFHE');
var TempFolder = DriveApp.getFolderById('1vaXCrOJAg1x2JCzEng9nSPn6om8dWmib');
var PDFFolder = DriveApp.getFolderById('16r-564UEEuBcyfTIX0xnjJRk6bFJjzL1');

var ss = SpreadsheetApp.openById('1kZFrbnjgVnq7wB4mFYAMCjFiDB2PAfkmbYGvhLg_U00');
var sh = ss.getSheetByName('Form Yanıtları 1');
var data = sh.getRange(ss.getLastRow(),1,1,9).getValues()
data.forEach(r=>{
  var item1 = r[1]
  var item2 = r[2]
  var item3 = r[3]
  var item4 = r[4]
  var item5 = r[5]
  var item6 = r[6]
  var item7 = r[7]
  var item8 = r[8]
  var item9 = r[9]

  item6 = LanguageApp.translate(Utilities.formatDate(item6,'GMT+7','dd MMMM yyyy'),'en','tr').split(' ').map((a,i) =>{if(i != 2 || parseInt(a)>2100){return a}; a = parseInt(a); return a}).join(' ')

  item7 = Utilities.formatDate(item7, 'GMT+3', 'HH:mm'); // Denetim başlama saati
  item8 = Utilities.formatDate(item8, 'GMT+3', 'HH:mm'); // Denetim bitiş saati

  CreatePDF(docFile,TempFolder,PDFFolder,item1,item2,item3,item4,item5,item6,item7,item8,item9)
})
}

function CreatePDF(docFile,TempFolder,PDFFolder,item1,item2,item3,item4,item5,item6,item7,item8,item9){
var tempFile = docFile.makeCopy(TempFolder)
var tempDoc = DocumentApp.openById(tempFile.getId())
tempDoc.getBody().replaceText("{MAĞAZA ADI}",item2)
tempDoc.getBody().replaceText("{DENETİMİ YAPAN}",item3)
tempDoc.getBody().replaceText("{İLGİLİ HAFTA}",item4)
tempDoc.getBody().replaceText("{MAĞAZA PUANI}",item5)
tempDoc.getBody().replaceText("{DENETİM TARİHİ}",item6)
tempDoc.getBody().replaceText("{DENETİM BAŞLAMA SAATİ}",item7)
tempDoc.getBody().replaceText("{DENETİM BİTİŞ SAATİ}",item8)
tempDoc.getBody().replaceText("{BİR ÖNCEKİ DENETİMİ YAPAN}",item9)
tempDoc.saveAndClose()
TempFolder.removeFile(tempFile)

var PdfContent = tempFile.getAs(MimeType.PDF)
var PdfFile = PDFFolder.createFile(PdfContent).setName(item2)

MailApp.sendEmail(item1, item2 + ' ŞUBE', 'DENETİM FORMU..', {
  attachments: [PdfFile.getAs(MimeType.PDF)]
});
}
解决方案

要在生成的PDF中插入指定ID的图片,可通过DocumentApp的insertImage方法实现,推荐两种插入方式:替换模板占位符(固定位置)或直接追加到文档末尾。

修改后的CreatePDF函数

function CreatePDF(docFile,TempFolder,PDFFolder,item1,item2,item3,item4,item5,item6,item7,item8,item9){
  // 定义要插入的图片ID
  const TARGET_IMAGE_ID = "1I63WRYGP169inM1TvCJIaMSTBozaNZygGrdvPLcTLrechAzrVZWmjWKVuMTKM92vZDV7p1JU";
  
  var tempFile = docFile.makeCopy(TempFolder);
  var tempDoc = DocumentApp.openById(tempFile.getId());
  var body = tempDoc.getBody();

  // 原有文本替换逻辑
  body.replaceText("{MAĞAZA ADI}",item2);
  body.replaceText("{DENETİMİ YAPAN}",item3);
  body.replaceText("{İLGİLİ HAFTA}",item4);
  body.replaceText("{MAĞAZA PUANI}",item5);
  body.replaceText("{DENETİM TARİHİ}",item6);
  body.replaceText("{DENETİM BAŞLAMA SAATİ}",item7);
  body.replaceText("{DENETİM BİTİŞ SAATİ}",item8);
  body.replaceText("{BİR ÖNCEKİ DENETİMİ YAPAN}",item9);

  // 插入图片逻辑
  try {
    const imageFile = DriveApp.getFileById(TARGET_IMAGE_ID);
    
    // 方式1:替换模板中的占位符{IMAGE_PLACEHOLDER}(推荐)
    const placeholder = body.findText("{IMAGE_PLACEHOLDER}");
    if (placeholder) {
      const textElement = placeholder.getElement();
      const parentElement = textElement.getParent();
      const insertIndex = parentElement.getChildIndex(textElement);
      // 在占位符位置插入图片
      parentElement.insertImage(insertIndex, imageFile);
      // 删除占位符文本
      textElement.removeFromParent();
    } else {
      // 方式2:如果无占位符,直接在文档末尾插入图片
      body.appendImage(imageFile);
    }

    // 可选:调整图片尺寸(设置宽度为400px,高度自动按比例适配)
    const images = body.getImages();
    const insertedImage = images[images.length - 1];
    insertedImage.setWidth(400);

  } catch (error) {
    console.error("图片插入失败:" + error.message);
  }

  tempDoc.saveAndClose();
  TempFolder.removeFile(tempFile);

  var PdfContent = tempFile.getAs(MimeType.PDF);
  var PdfFile = PDFFolder.createFile(PdfContent).setName(item2);

  MailApp.sendEmail(item1, item2 + ' ŞUBE', 'DENETİM FORMU..', {
    attachments: [PdfFile.getAs(MimeType.PDF)]
  });
}

关键说明

  1. 占位符准备:提前在Google文档模板中添加{IMAGE_PLACEHOLDER}文本,放在你希望图片出现的位置,这样插入的图片会精准替换该位置。
  2. 图片获取:通过DriveApp.getFileById(TARGET_IMAGE_ID)获取指定图片文件,确保脚本拥有该图片的访问权限。
  3. 尺寸调整:使用setWidth方法设置图片宽度,高度会自动按原比例调整,避免图片显示异常。
  4. 异常处理:添加try-catch块捕获图片获取或插入时的错误,防止整个PDF生成流程中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:29:52