Verketten Sie schnell eine große Anzahl kleiner PDF-Dateien

538
iBug

Ich arbeite unter Windows 10. Ich habe 2.000 PDF-Dateien, jede hat zwei oder drei Seiten (mit genau einer Seite leer) und ist nur 40 bis 50 KB groß, was weniger als 100 MiB ergibt. Ich möchte alle Seiten in allen Dateien zu einer einzigen PDF-Datei zusammenfassen. Der aktuelle Ansatz, den ich verwende, ist Acrobat DC → Extras → Dateien kombinieren. Ich ziehe alle Dateien in das Werkzeug und drücke Start. Nach einiger Einschätzung finde ich, dass dies mehr als 12 Stunden dauert (Core i7-4710HQ-Laptop, 16 GiB RAM und SSD). Das ist ziemlich unpraktisch für mich. Gibt es einen schnelleren Weg?

0

2 Antworten auf die Frage

1
user1016274

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.

Ich möchte gerne Windows Subsystem für Linux verwenden (das ist meine tägliche Arbeitsplattform). Ich werde es morgen ausprobieren. iBug vor 6 Jahren 0
Guten In weniger als einer halben Minute waren 2.000 PDF-Dateien fertig. Ich werde auf einige benutzerfreundliche Lösungen warten, bevor ich diese Antwort akzeptiere. iBug vor 6 Jahren 0
0
C0deDaedalus

Es gibt andere Alternativen zu Acrobat, die Sie ausprobieren können. Diese Tools können Ihnen irgendwie helfen.

1. PDFSam

  • Zusammenführen und Teilen einer PDF-Datei bei angegebenen Seitenzahlen, auf einer bestimmten Lesezeichenebene oder in Dateien mit einer bestimmten Größe
  • Seiten aus PDF extrahieren
  • Drehen Sie PDF-Dateien, jede Seite oder nur die ausgewählten Seiten
  • Fügen Sie PDF-Dateien zusammen und nehmen Sie die Seiten abwechselnd aneinander.

2. PDFMerge

  • Sicheres Zusammenführen und Verarbeiten von Dateien
  • Bietet eine Online-Plattform zum Zusammenführen von PDFs
  • Auch DEsktop Version verfügbar

3. PDFtk

  • Ein einfaches, aber sehr leistungsfähiges Toolkit
  • Kommt mit einem Befehlszeilentool, mit dem Sie problemlos mit mehreren PDFs auf der Befehlszeile interagieren können.

Im Moment würde ich vorschlagen, dass Sie pdftk verwenden, da das Befehlszeilentool sehr leistungsfähig ist und eine Menge Zeit und Mühe spart.

Sie können die Liste mit jedem anderen Werkzeug bearbeiten.

Ich hätte den Python-Code im Vergleich zu einem Befehlszeilentool verwendet. iBug vor 6 Jahren 0