首页 > 解决方案 > 我想从谷歌文档中的谷歌电子表格数据库中获取带有图像的pdf作为模板

问题描述

我已经成功地生成了没有图像的 pdf,但是当我在电子表格中添加图片希望我可以在我的 pdf 文件中获取我的图片时,脚本不起作用。谁能帮助我脚本中的错误在哪里?//try image请使用导致我的脚本无法生成带图像的 pdf的标签检查我的脚本。

function buatPdf() {
  var docTemplate = DriveApp.getFileById('ID Template');
  var folderTujuan = DriveApp.getFolderById('ID Folder')
  
  //try image
  var replaceTextToImage = function(body, searchText, fileId) {
  var width = 100;
  var blob = DriveApp.getFileById(fileId).getBlob();
  var r = body.findText(searchText).getElement();
  r.asText().setText("");
  var img = r.getParent().asParagraph().insertInlineImage(0, blob);
  var w = img.getWidth();
  var h = img.getHeight();
  img.setWidth(width);
  img.setHeight(width * h / w);
  }
 
  var sheet = SpreadsheetApp
    .getActiveSpreadsheet()
    .getSheetByName('Data')
        
  var rows = sheet.getDataRange().getValues();
  
  rows.forEach(function(row, index){

    if (index === 0) return;
   
    var copy = docTemplate.makeCopy(`${row[0]} ${row[1]}` , folderTujuan)

    var doc = DocumentApp.openById(copy.getId())
    
    var body = doc.getBody();
    //photo
    var photoImage = (row[2]).split("=")[1]; //try image
    
    body.replaceText('{{IDstd}}', row[0]);
    body.replaceText('{{Name}}', row[1]);
    replaceTextToImage(body,'{{Photo}}', photoImage);//try image
    body.replaceText('{{Hobby}}', row[4]);
            
    doc.saveAndClose();

})
  
}

标签: google-apps-scriptgoogle-sheetspdf-generation

解决方案


当我看到您的脚本和您的示例图片(电子表格)时,我可以确认图片的 URLhttps://drive.google.com/file/d/###,,,const photoImage = (row[2]).split("=")[1];. 在这种情况下,很遗憾,我无法从您的图像中确认您的整个 URL,例如,当 URL 像https://drive.google.com/file/d/###,,,?key=value, photoImageis时value。我认为这可能是您的问题的原因。

当我从您当前的示例图像中想到修改点时,为了从 URL 中检索文件 ID,以下修改如何?

从:

const photoImage = (row[2]).split("=")[1];

至:

const photoImage = (row[2]).split("/")[5];
  • 这样,当您使用示例图像的 URL 时,可以检索文件 ID。但是,如果您没有读取文件的权限,则会发生错误。请注意这一点。

推荐阅读