Wenn Sie Python verwenden möchten, werden in diesem vorherigen Thread mehrere Python-Skripts beschrieben: https://stackoverflow.com/questions/3444645/merge-pdf-files
Aufgrund der Funktionsweise der Python-PDF-Bibliothek werden alle Dateien zuerst geöffnet und erst beim Schreiben der Ausgabedatei wird der Inhalt gelesen. Sie sollten daher mit einem hohen Speicherverbrauch rechnen. Umgehung wäre die Aufteilung der Dateien in mehrere Ordner.
Sie können dieses Skript problemlos erweitern, um beispielsweise alle PDFs in einem Teilbaum und alle seine Unterordner zu kombinieren.
Dieses Programm unterstützt optionale Flags für die ausführliche Ausgabe und das Überspringen der letzten Seite jeder Eingabedatei. Platzhalter für das Eingabedateimuster sind zulässig.
from argparse import ArgumentParser from glob import glob from PyPDF2 import PdfFileReader, PdfFileWriter def PDF_cat(files, output_filename, skiplastpage, verbose): # First open all the files, then produce the output file, and # finally close the input files. This is necessary because # the data isn't read from the input files until the write # operation. Thanks to # https://stackoverflow.com/questions/6773631/problem-with-closing-_ # python-pypdf-writing-getting-a-valueerror-i-o-operation/6773733 writer = PdfFileWriter() skip = 1 if skiplastpage else 0 # collect and open input files inp = [open(f,'rb') for f in glob(files) if f != output_filename] n = len(inp) print 'merging %d files' % n for i, fh in enumerate(inp, 1): reader = PdfFileReader(fh) for pg in range(reader.getNumPages() - skip): writer.addPage(reader.getPage(pg)) if verbose: print '%d/%d %s' % (i, n, fh.name) print('writing output file...') with open(output_filename, 'wb') as fout: writer.write(fout) # finallly... for fh in inp: fh.close() if __name__ == '__main__': parser = ArgumentParser() # add more options if you like parser.add_argument('-o', '--output', dest='output_filename', help='write merged PDF files to FILE', metavar='FILE') parser.add_argument(dest='files', help='PDF files to merge') parser.add_argument('-s', '--skiplastpage', dest='skiplastpage', action='store_true', help='skip last page of each merged PDF') parser.add_argument('-v', '--verbose', dest='verbose', action='store_true', help='show progress') parser.set_defaults(output_filename='mergedPDFs.pdf', files='.\*.pdf', skiplastpage=False, verbose=False) args = parser.parse_args() PDF_cat(args.files, args.output_filename, args.skiplastpage, args.verbose)
Ein Schnelltest: Das Zusammenführen von 501 identischen PDF-Dateien mit jeweils 91 KB nahm auf meinem Notebook 61 Sekunden, mit PDFtk.exe 83 Sekunden. Ausgabedateien hatten nicht die gleiche Größe, wurden jedoch identisch angezeigt.