Vous pouvez utiliser PyPdf2 s PdfMerger
classe.
Concaténation de fichiers
Vous pouvez simplement concaténer en utilisant l'option append
méthode.
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()
Vous pouvez passer des handles de fichiers au lieu de chemins de fichiers si vous le souhaitez.
Fusion de fichiers
Si vous voulez un contrôle plus fin de la fusion, il existe une merge
de la méthode PdfMerger
qui vous permet de spécifier un point d'insertion dans le fichier de sortie, ce qui signifie que vous pouvez insérer les pages n'importe où dans le fichier. Le site append
peut être considérée comme une merge
où le point d'insertion est la fin du fichier.
par exemple
merger.merge(2, pdf)
Ici nous insérons le pdf entier dans la sortie mais à la page 2.
Gammes de pages
Si vous souhaitez contrôler les pages qui sont ajoutées à partir d'un fichier particulier, vous pouvez utiliser la commande pages
argument de mot-clé de append
y merge
en passant un tuple de la forme (start, stop[, step])
(comme l'ordinaire range
fonction).
par exemple
merger.append(pdf, pages=(0, 3)) # first 3 pages
merger.append(pdf, pages=(0, 6, 2)) # pages 1,3, 5
Si vous spécifiez un intervalle non valide, vous obtiendrez un IndexError
.
Nota: également que, pour éviter que des dossiers ne restent ouverts, la PdfFileMerger
doit être appelée lorsque le fichier fusionné a été écrit. Cela garantit que tous les fichiers sont fermés (entrée et sortie) en temps voulu. Il est dommage que PdfFileMerger
n'est pas implémenté en tant que gestionnaire de contexte, nous pouvons donc utiliser la fonction with
pour éviter de passer à côté d'un problème explicite et obtenir une protection facile contre les exceptions.
Vous pouvez également consulter le pdfcat
script fourni dans le cadre de pypdf2. Vous pouvez potentiellement éviter d'avoir à écrire du code.
Le github de PyPdf2 a également comprend un exemple de code démontrant la fusion.
PyMuPdf
Une autre bibliothèque qui vaut peut-être le coup d'œil est PyMuPdf qui semble être activement maintenu. La fusion est tout aussi simple
Depuis la ligne de commande :
python -m fitz join -o result.pdf file1.pdf file2.pdf file3.pdf
et du 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")
Avec de nombreuses options, détaillées dans les projets wiki .