首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Google脚本在ConvertAPI中合并PDF

使用Google脚本在ConvertAPI中合并PDF
EN

Stack Overflow用户
提问于 2022-03-30 02:54:29
回答 1查看 281关注 0票数 1

我试图通过ConvertAPI合并两个来自Google的PDF文件和下面的代码。pdf1和pdf2都是文件对象。

代码语言:javascript
复制
function mergePDFs(pdf1,pdf2){
  const formData = ""

  formData['Files[0]'] = pdf1.getBlob();
  formData['Files[1]'] = pdf2.getBlob();

  Logger.log(formData['Files[0]']);
  Logger.log(formData);

  endpoint = "https://v2.convertapi.com/convert/pdf/to/merge?Secret=XXXXXXXXXXXXX&StoreFile=true"

  var options = {
    'method' : 'post',
    'payload' : formData,
    'muteHttpExceptions': true
  };

  Logger.log(UrlFetchApp.fetch(endpoint,options));
}

收到以下错误代码:

代码语言:javascript
复制
{"Code":4000,"Message":"Parameter validation error.","InvalidParameters":{"Files":["Files array item count must be greater than 0."]}}

应该注意的是,Logger.log()语句都是空的。在我看来,pdf1和pdf2分配给formData[‘文件索引’]并不是

由于我不熟悉这个语法,所以我对下面的行做了很大的修改,但是它是在另一个堆栈溢出柱上引用的。

代码语言:javascript
复制
  formData['Files[0]'] = pdf1.getBlob();
  formData['Files[1]'] = pdf2.getBlob();

我还发现,无论声明为数组还是字符串,formData的声明都是无关紧要的。

最后,来自ConvertAPI的相关文件说:

要转换的文件。值可以是URL或文件内容。如果在>查询或多部分内容参数中使用,则必须以索引>如文件、文件1、Files2.

主函数的下列行与所述函数相关:

代码语言:javascript
复制
  //lodgingRecieptId is set to a url
  const receiptFile = DriveApp.getFileById(lodgingReceiptId);

  ...

  const copyID = frontPage.makeCopy().getId();
  const copyDoc = DocumentApp.openById(copyID)
  copyDoc.setName("MPD | " + sheet.getLastRow());
  const body = copyDoc.getBody();

  //find and replace in template copy
  body.replaceText("{{AMOUNT}}",amount)
  body.replaceText("{{CURRENT_DATE}}",current_date)
  body.replaceText("{{LOCATION}}",location)
  body.replaceText("{{PURPOSE}}",purpose);
  body.replaceText("{{DEPART_DATE}}",formatLeaveDate);
  body.replaceText("{{RETURN_DATE}}",formatReturnDate);
  body.replaceText("{RSB}   ",rsb);
  body.replaceText("{{DAYS}}",days);
  body.replaceText("{{MPD_AMOUNT}}",mpdAmount);

  const docBlob = copyDoc.getAs('application/pdf');
  docBlob.setName(copyDoc.getName() + ".pdf");
  const copyPdf = DriveApp.createFile(docBlob);

  //merge lodging receipt and template copy ——> Save id
  mergePDFs(copyPdf,receiptFile)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-30 03:11:24

从您的显示脚本和你出示的正式文件,下面的修改如何?

修改脚本:

请用你的秘密替换<YOUR SECRET HERE>

代码语言:javascript
复制
function mergePDFs(pdf1, pdf2) {
  var fileValues = [pdf1.getBlob(), pdf2.getBlob()].map((e, i) => ({
    "Name": e.getName() || `sample${i + 1}`,
    "Data": Utilities.base64Encode(e.getBytes())
  }));
  var data = { "Parameters": [{ "Name": "Files", "FileValues": fileValues }, { "Name": "StoreFile", "Value": true }] };
  var endpoint = "https://v2.convertapi.com/convert/pdf/to/merge?Secret=<YOUR SECRET HERE>";
  var options = {
    'method': 'post',
    'payload': JSON.stringify(data),
    'contentType': "application/json",
    'muteHttpExceptions': true
  };
  var res = UrlFetchApp.fetch(endpoint, options);
  var outputPDFURL = JSON.parse(res.getContentText()).Files[0].Url;
  var outputFile = UrlFetchApp.fetch(outputPDFURL).getBlob().setName("sampleOutput.pdf");
  DriveApp.createFile(outputFile);
}

注意:

  • 在这个修改中,它假设您的秘密对于使用这个API是有效的,pdf1pdf2是文件对象或HTTPResponse数据的对象。请小心这件事。

参考文献:

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

https://stackoverflow.com/questions/71670970

复制
相关文章

相似问题

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