从Google Apps脚本中的字符串创建PDF

时间:2014-09-06 23:59:26

标签: pdf google-apps-script

我确信这也是我没有得到的东西,因为我没有得到一般概念。我正在尝试使用我之前构建的字符串在Google云端硬盘中创建PDF。

var oPdfCreator = {
    hFolderHandle: DocsList.getFolderById('0B1rbQnVtcj5CNWNmekFWMG9DZzA'),
    hPdfHandle: "",

    mToastFeedback: function () {
      SpreadsheetApp.getActiveSpreadsheet().toast('Finished');
    }
};

oPdfCreator.hPdfHandle = oPdfCreator.hFolderHandle.createFile('test.pdf',   Utilities.newBlob(oInvoice.sInvoiceBody).getBytes(), 'application/pdf');

这不起作用,PDF格式不正确,如果我没有得到这个概念,我就无法开始怀疑。

再次感谢您的回答。


好的答案让我走上正轨。它真的非常接近我想做的事情,我希望能够直接用pdf内容创建一个blob,但我意识到这更容易和可读。我们都同意可读代码更好!

var oPdfCreator = {
  hFolderHandle: DocsList.getFolderById('0B1rbQnVtcj5CNWNmekFWMG9DZzA'),
  hTempHtmlHandle: "",
  hPdfHandle: "",

  mToastFeedback: function () {
      SpreadsheetApp.getActiveSpreadsheet().toast('Finished');
  }
};
oPdfCreator.hTempHtmlHandle = oPdfCreator.hFolderHandle.createFile('test.html',  oInvoice.sInvoiceBody, 'text/html');
oPdfCreator.hPdfHandle = oPdfCreator.hFolderHandle.createFile(oPdfCreator.hTempHtmlHandle.getAs('application/pdf')).rename('test.pdf');
DocsList.getFileById(oPdfCreator.hTempHtmlHandle.getId()).setTrashed(true);

function fProcessRequest () {
  oInvoice.mProcessInvoice();
  oPdfCreator.mToastFeedback();
}

1 个答案:

答案 0 :(得分:1)

我尝试了两种方法来获得你想要的结果,一种方法不起作用而另一种方法成功但我不确定它是否适用于你的特定用例。

尝试一下,告诉我们会发生什么。在这两个函数中,我创建了一个临时文件,当转换成功时我会立即删除它。

第一个函数仅使用DriveApp并尝试创建中间纯文本文件,但最终转换失败:

function test1() {
  var pdfContent = 'test pdf content\n\nThis is a normal text in a pdf file';
  var intermediate = DriveApp.createFile('tempFile',pdfContent,MimeType.PLAIN_TEXT);
  var blob = intermediate.getAs(MimeType.PDF);
  Logger.log(blob.getContentType());
  var pdfFile = DriveApp.createFile(blob);
  DriveApp.getFileById(intermediate.getId()).setTrashed(true);
}

第二个函数假定文件内容是“纯文本”并使用DocumnentApp创建中间文件...此转换(再次使用DriveApp)可以工作,我得到一个有效的pdf文件。

function test2() {
  var pdfContent = 'test pdf content\n\nThis is a normal text in a pdf file';
  var intermediate = DocumentApp.create('otherTest');
  intermediate.getBody().editAsText().appendText(pdfContent);
  intermediate.saveAndClose();
  var id = intermediate.getId();
  var blob = DriveApp.getFileById(id).getAs(MimeType.PDF);
  Logger.log(blob.getContentType());
  var pdfFile = DriveApp.createFile(blob);
  DriveApp.getFileById(id).setTrashed(true);
}