【问题标题】:Google Spreadsheet to pdf with watermark in Google scriptGoogle电子表格到带有Google脚本中水印的pdf
【发布时间】:2015-05-13 16:09:17
【问题描述】:

我想转换带有水印/背景图像的电子表格,然后发送 + 保存生成的 pdf 转换为 pdf 有效,但我不知道是否/如何将图像放入生成的 pdf。

这就是我现在得到的:

function ExportAndSent(subject, filename, email) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var message = "A message";
  
  var tempSpreadsheet = SpreadsheetApp.create(filename);
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet = ss.getActiveSheet();
  sheet.copyTo(tempSpreadsheet);
  
  tempSpreadsheet.deleteActiveSheet();
  
  var pdf = DriveApp.getFileById(tempSpreadsheet.getId()).getAs(MimeType.PDF);
  var pdfBytes = pdf.getBytes();
  var attach = {fileName:(filename + ".pdf"),content:pdfBytes, mimeType:MimeType.PDF};
  
  // Here we need to put a watermark
  
  // Send and export
  MailApp.sendEmail(email, subject, message, {attachments:[attach]});
  DriveApp.createFile(pdf);
  
  // Delete Temporary
  DriveApp.getFileById(tempSpreadsheet.getId()).setTrashed(true);
}

【问题讨论】:

    标签: google-apps-script google-sheets pdf-generation google-spreadsheet-api


    【解决方案1】:

    电子表格似乎已转换为 PDF。第三方服务可用于添加水印以打开 PDF 并为其添加水印。 PDF WebAPI 是您可以使用的免费服务。下面我整理了一个可以接收 PDF 并为其添加水印的功能。水印目前被硬编码为“watermark.jpg”,但可以更改。从上面的代码来看,函数应该在以下几行之间调用:

    var pdf = DriveApp.getFileById(tempSpreadsheet.getId()).getAs(MimeType.PDF);
    var pdfBytes = pdf.getBytes();

    “pdf”变量应该作为输入,“pdfBytes”可以取appendWatermark()的返回值。

    您需要注册一个免费的PDF WebAPI 帐户才能获得 ID 和密钥。

    function appendWatermark(inputPDF) {
    
      var fileBlob = inputPDF.copyBlob();
    
      var decorationData = [{
        "watermarkSettings": {
          "opacity": 50,
          "source": {
            "file": "watermark.jpg",
            "page": 1
          },
          "scale": {
            "type": "relative",
            "percent": 90
          },
          "location": "top",
          "rotation": "0"
        }
      }];
    
      var applicationData = {
        "id": "",
        "key": ""
      };
    
      var payload = {
        "application": JSON.stringify(applicationData),
        "input": fileBlob,
        "decorationData": JSON.stringify(decorationData),
        "resource": DriveApp.getFilesByName("watermark.jpg").next().getBlob()
      };
    
      var options = {
        "method": "post",
        "payload": payload
      };
    
      var response = UrlFetchApp.fetch("https://pdfprocess.datalogics.com/api/actions/decorate/document", options);
    
      return response.getBytes;
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多