Ist es mit Python möglich, separate PDF-Dateien zusammenzuführen?
Angenommen, ich muss dies etwas weiter ausdehnen. Ich hoffe, Ordner in einem Verzeichnis zu durchlaufen und diesen Vorgang zu wiederholen.
Und ich fordere mein Glück heraus, aber ist es möglich, eine Seite auszuschließen, die in jedem der PDFs enthalten ist (meine Berichterstellung erstellt immer eine zusätzliche leere Seite).
Lösung des Problems
Sie können die PyPdf2 -PdfMerger
Klasse verwenden.
Dateiverkettung
Sie können Dateien einfach mit der Methode verketten.append
from PyPDF2 import PdfFileMerger
pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf']
merger = PdfFileMerger()
for pdf in pdfs:
merger.append(pdf)
merger.write("result.pdf")
merger.close()
Sie können Dateihandles anstelle von Dateipfaden übergeben, wenn Sie möchten.
Zusammenführen von Dateien
Wenn Sie eine feinkörnigere Steuerung des Zusammenführens wünschen, gibt es eine merge
Methode der PdfMerger
, mit der Sie einen Einfügepunkt in der Ausgabedatei angeben können, was bedeutet, dass Sie die Seiten an beliebiger Stelle in der Datei einfügen können. Die append
Methode kann man sich so vorstellen, dass merge
der Einfügepunkt das Ende der Datei ist.
z.B
merger.merge(2, pdf)
Hier fügen wir das gesamte PDF in die Ausgabe ein, jedoch auf Seite 2.
Seitenbereiche
Wenn Sie steuern möchten, welche Seiten aus einer bestimmten Datei angehängt werden, können Sie das pages
Schlüsselwortargument von append
and verwenden und dabei merge
ein Tupel im Formular übergeben (start, stop[, step])
(wie bei der regulären range
Funktion).
z.B
merger.append(pdf, pages=(0, 3)) # first 3 pages
merger.append(pdf, pages=(0, 6, 2)) # pages 1,3, 5
Wenn Sie einen ungültigen Bereich angeben, erhalten Sie eine IndexError
.
Hinweis: Um zu vermeiden, dass Dateien offen bleiben, PdfFileMerger
sollte die Methode s close aufgerufen werden, wenn die zusammengeführte Datei geschrieben wurde. Dadurch wird sichergestellt, dass alle Dateien (Ein- und Ausgabe) zeitnah geschlossen werden. Es ist eine Schande, dass PdfFileMerger
es nicht als Kontextmanager implementiert ist, also können wir das with
Schlüsselwort verwenden, den expliziten Close-Call vermeiden und eine einfache Ausnahmesicherheit erhalten.
Vielleicht möchten Sie sich auch das Skript ansehen, das pdfcat
als Teil von pypdf2 bereitgestellt wird. Sie können möglicherweise ganz auf das Schreiben von Code verzichten.
Der PyPdf2-Github enthält auch einige Beispielcodes, die das Zusammenführen demonstrieren.
PyMuPdf
Eine weitere Bibliothek, die vielleicht einen Blick wert ist, ist PyMuPdf. Das Zusammenführen ist ebenso einfach.
Von der Befehlszeile:
python -m fitz join -o result.pdf file1.pdf file2.pdf file3.pdf
und vom Code
import fitz
result = fitz.open()
for pdf in ['file1.pdf', 'file2.pdf', 'file3.pdf']:
with fitz.open(pdf) as mfile:
result.insertPDF(mfile)
result.save("result.pdf")
Mit vielen Optionen, detailliert im Projekt -Wiki.
Keine Kommentare:
Kommentar veröffentlichen