2013-03-14 3 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), запрос на Google приложения-скрипта API для «Разделить и объединить pdf-страницы», был открыт с июля 2011 года. – Mogsdad

+0

Интересно ... может быть, в настоящее время это невозможно. ??? – user1518316

+0

Вы видели [это приложение] (http://pdfmerge.w69b.com/) не скрипт, а хороший диск, который использует :-) –

ответ

0

Ваш код ведет себя точно так же, как вы его закодировали. blobs - массив, а когда вы делаете blobs.pop(), вы получаете последний элемент в массиве (который является вашим последним PDF).

Что вы должны сделать, это объединить капли, а не в массив, но в одном объекте blob. Однако, я не знаю, как это может быть сделано в ГАС

0

Метод .getBytes() возвращает двоичный массив для каждого файла, так что вы создали массив массивов с:

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

Вместо этого я бы объединил массив для текущего элемента в цикле с накопительным массивом, который растет с каждой итерацией цикла. Затем, после выхода из цикла, содержимое аккумуляторной решетки может быть передано в .newBlob() или .setBytes()

+0

Я не придумал способ конкретизации массива blob. Любые дополнительные мысли/фрагменты кода? – user1518316

1

Многостраничный pdf-файл, определенно, не является простой конкатенацией нескольких файлов PDF-файла ... Я сомневаюсь, что вы можете получить какой-либо результат с этим подход, даже если я признаю, что это похоже на соблазнение ...

Я тоже искал что-то подобное, но безуспешно.

+1

Итак, где вы можете что-нибудь придумать? Я не могу понять, как конкатенировать массив blob. – user1518316

+0

нет ... к сожалению, я не ... –

0

Вот код, чтобы объединить капли, но, как сказал Серж, на самом деле это не работает, и 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); 

    } 
Смежные вопросы