2013-03-14 194 views
1

我的代码存在一些问题。我试图循环访问包含许多PDF的驱动器文件夹,然后将它们合并到一个文件中。当我使用我的代码时,它只是为驱动器文件夹中的最后一个PDF创建一个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); 

    } 
+0

[问题699](http://code.google.com/p/google-apps-script-issues/issues/detail?id=699),对于谷歌应用程序脚本API来请求“拆分和合并pdf页面”,自2011年7月以来一直开放。 – Mogsdad 2013-03-15 15:04:51

+0

有趣......也许它目前无法完成。 – user1518316 2013-03-19 21:28:01

+0

你见过[这个应用程序](http://pdfmerge.w69b.com/)不是一个脚本,但一个不错的驱动器实用程序:-) – 2013-05-10 22:21:30

回答

0

您的代码的行为完全如何编码。 blobs是一个数组,当您执行blobs.pop()时,您将获得数组中的最后一项(这是您的最后一个PDF)。

你应该做的是连接blob,不是在一个数组中,而是在一个单一的blob对象中。 不过,我不知道如何能在GAS做

0

.getBytes()方法返回每个文件的二进制数组,所以你创造了什么是数组的一个数组:

blobs.push(files[i].getBlob().getBytes()); 

相反,我会将循环中当前项目的数组与每个循环迭代增长的累加器数组连接起来。然后,退出循环后,累加器阵列的内容可以传入.newBlob().setBytes()

+0

我没有想出一种方法来协调blob数组。任何额外的想法/代码片段? – user1518316 2013-03-19 21:26:24

1

多页pdf绝对不是多个pdf文件内容的简单连接...我怀疑你可以得到任何结果与此即使我承认这似乎引诱...

我一直在寻找类似的东西,但没有成功,直到现在。

+1

那么你能想出什么?我无法弄清楚如何协调blob数组。 – user1518316 2013-03-19 21:27:23

+0

不...不幸的是我没有... – 2013-03-19 22:06:07

0

下面是连接blob的代码,但像Serge提到的那样,它实际上并不工作,并且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); 

    } 
相关问题