Javascript 将Google文档作为PDF附件发送电子邮件

Javascript 将Google文档作为PDF附件发送电子邮件,javascript,google-apps-script,google-docs-api,Javascript,Google Apps Script,Google Docs Api,abc@example.comAfter为此挣扎了一段时间,我正在向人群寻求帮助 我正在尝试将2个谷歌文档作为PDF附加到电子邮件中。我看到了很多关于谷歌工作表的例子,并且已经成功地将工作表的副本以PDF格式发送到电子邮件中,但我还不能将其移植到文档中 在多个不同的场景中,PDF附件是my的副本或的图像捕获。当我查看生成的链接(Logger.log)并使用它们时,会下载一份 下面是我尝试创建电子邮件附件的场景示例。请参阅函数emailDocAsPDF(),位于底部 提前感谢您对这个问题的指导 f

abc@example.comAfter为此挣扎了一段时间,我正在向人群寻求帮助

我正在尝试将2个谷歌文档作为PDF附加到电子邮件中。我看到了很多关于谷歌工作表的例子,并且已经成功地将工作表的副本以PDF格式发送到电子邮件中,但我还不能将其移植到文档中

在多个不同的场景中,PDF附件是my的副本或的图像捕获。当我查看生成的链接(Logger.log)并使用它们时,会下载一份

下面是我尝试创建电子邮件附件的场景示例。请参阅函数emailDocAsPDF(),位于底部

提前感谢您对这个问题的指导

function myFunctionUpdated() {

  var testTemplateId = searchDriveFile('Test Template');
  Logger.log('test template id = ' + testTemplateId);

  var fileName = 'Copy of Test Template'
  Logger.log(fileName);

  DriveApp.getFileById(testTemplateId).makeCopy(fileName);

  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = ss.getRange(1, 1, 3, 2).getValues();

  var copyNewTemplateId = searchDriveFile(fileName);

  var copyTemplate = DocumentApp.openById(copyNewTemplateId);
  var copyTemplateBody = copyTemplate.getBody().editAsText();

  for (i=0; i<range.length; i++) {
      copyTemplateBody.replaceText(range[i][0], range[i][1]);
  }

  copyTemplate.saveAndClose();

  emailDocAsPDF(fileName)
}


// Searched Google Drive for a file name and returns the file ID.
function searchDriveFile(fileName) {
  var files = DriveApp.searchFiles(
     'title = "'+ fileName +'"');
  while (files.hasNext()) {
    var file = files.next();
    var id = file.getId();
    return id;
  } 
}


// Send document in an email as PDF
function emailDocAsPDF(fileName) {

  var staticDoc = 'FILE-ID';

  var attachmentDoc = UrlFetchApp.fetch("https://docs.google.com/document/d/" + copyTemplateId + "/export?format=pdf");
  Logger.log("https://docs.google.com/document/d/" + copyTemplateId + "/export?format=pdf");

  var attachmentStaticDoc = UrlFetchApp.fetch("https://docs.google.com/document/d/" + staticDoc + "/export?format=pdf");
  Logger.log("https://docs.google.com/document/d/" + staticDoc + "/export?format=pdf");

  var fileBlob = [];

  fileBlob[0] = attachmentDoc.getBlob().getAs('application/pdf');
  fileBlob[1] = attachmentStaticDoc.getBlob().getAs('application/pdf');

  var body = "Bird is the WORD!! <br>" +
    "<a href='http://www.example.com'>Visit Example</a>";

   if (MailApp.getRemainingDailyQuota() > 0) 
    GmailApp.sendEmail("email@example.com", "Test Documents Email", body, {
      htmlBody: body,
      attachments:[fileBlob[0],fileBlob[1]]     
    });

}

要将任何类型的文档附加为PDF,请在文件上调用
getBlob
,使用
.getAs('application/PDF')
指定内容类型,并可以选择使用
setName
设置名称。仅此而已:

var doc = DriveApp.getFileById('ID_HERE');
var blob = doc.getBlob().getAs('application/pdf').setName('MyAttachment.pdf');
var recipient = 'user@example.com';
var subject = 'Email subject';
var body = 'Text here';
MailApp.sendEmail(recipient, subject, body, {attachments: [blob]});
您试图使用“通过URL查询导出为PDF”,这是一个文档记录不完整的功能,有时对图纸(设置导出区域的边界)有用,但对文档来说是不必要的,如果文档存在的话。上述方法适用于存储在Google Drive中的任何类型的内容


顺便说一句,发送电子邮件时最好使用
MailApp
而不是
GmailApp
,因为它将授权级别保持在您需要的级别:发送电子邮件。使用
GmailApp
,脚本还被授予访问和删除所有现有电子邮件的权限,这对于通过试用、出错和从Internet复制代码组成的脚本是不可取的

非常感谢您在通过电子邮件发送文档方面提供的帮助以及您对
MailApp
/
GmailApp
的建议。现在一切都很好!另外,我忘了提到“copyTemplate.saveAndClose();”更新模板文档后需要。这使我能够通过电子邮件发送更新的文档。
var doc = DriveApp.getFileById('ID_HERE');
var blob = doc.getBlob().getAs('application/pdf').setName('MyAttachment.pdf');
var recipient = 'user@example.com';
var subject = 'Email subject';
var body = 'Text here';
MailApp.sendEmail(recipient, subject, body, {attachments: [blob]});