我有我的代码的一些问题。 我通过包含多个PDF文件,然后合并这些到一个文件中的云端硬盘文件夹试图循环。 当我使用我的代码,它只是创造了在硬盘文件夹中的最后一个PDF PDF和预期不把它们合并在一起。
function MergeFiles(){
var folder = DocsList.getFolderById('myFolderID');
var files = folder.getFiles();
var blobs = [];
for( var i in files )
blobs.push(files[i].getBlob().getBytes());
Logger.log(blobs.push(files[i].getBlob().getBytes()));
var myPDF = Utilities.newBlob(blobs.pop(), "application/pdf", "newPDF.pdf");
folder.createFile(myPDF);
}
多页面PDF绝对不是多个PDF文件内容的简单拼接......我怀疑,你可以得到任何结果,这种做法即使我承认这一点似乎引诱...
我一直在寻找类似的东西也,但没有成功,直到如今。
我也有同样的问题,而且我暂时使用一个RESTful API合并的PDF文件: https://www.convertapi.com/pdf-to-merge
function merge() { var folder = DriveApp.getFolderById('<ID FOLDER>'); // folder with files pdf var files = folder.getFiles(); // get all files pdf var formData = {}; var index = 0; while(files.hasNext()) { var file = files.next(); formData['Files[' + index + ']'] = file.getBlob(); index++; } var options = { 'method' : 'post', 'payload' : formData, 'muteHttpExceptions': true }; var response = UrlFetchApp.fetch('https://v2.convertapi.com/pdf/to/merge?Secret=<YOUR SECRET>', options); if(response.getResponseCode() == 200) { var contentText = JSON.parse(response.getContentText()); var blob = Utilities.base64Decode(contentText.Files[0].FileData); folder.createFile(Utilities.newBlob(blob, 'application/pdf', 'merge.pdf')); } }
该.getBytes()
方法返回每个文件的二进制数组,所以你创造了什么是一个数组的数组:
blobs.push(files[i].getBlob().getBytes());
相反,我会串连在与蓄能器阵列与每个循环迭代生长的循环当前项目的数组。 然后,退出循环后累加器阵列中的内容可以被传递到.newBlob()
或.setBytes()
这里是来串联斑点的代码,但像塞尔提到的,它实际上并没有工作,和PDF出来损坏。
function MergeFiles(){
var folder = DocsList.getFolderById('myFolderID');
var files = folder.getFiles();
var blobs = "";
for( var i in files )
blobs=blobs+(files[i].getBlob().getBytes());
Logger.log(blobs);
var myPDF = Utilities.newBlob(blobs, "application/pdf", "newPDF.pdf");
folder.createFile(myPDF);
}
您的代码究竟是如何表现你就编码为。 blobs
是一个数组,当你做一个blobs.pop()
您所得到的数组中的最后一个项目(这是你最后的PDF)。
你应该做的是串联的斑点,而不是在一个数组,但在一个单一的blob
对象。 但是,我不知道如何能在GAS完成