Comment fusionner/ré-assembler des fichiers PDF grâce à PyPDF2 ?

Contexte

Ce script a été développé et utilisé pour Python 3 (3.5) sous Windows 8.1 x64

Je suppose que la librairie PyPDF2 est installé et prête à l'emploi

Si ce n'est pas le cas installé la avec la commande

pip install pypdf2

Objectifs du script et Utilisation

Ré-assembler des fichiers PDF dont l'arborescence se présente sous la forme suivante :

  • Dossier_racine
    • Sous dossier 1
      • page-1.pdf
      • page-2.pdf
      • page-3.pdf
    • Sous dossier 2
      • page-1.pdf
      • page-2.pdf
    • Sous-dossier 3
      • page-1.pdf
      • page-2.pdf
      • page-3.pdf
      • page-4.pdf

En sortie le script vous fournira des fichiers PDF nommé de cette façon :

  • Dossier_racine
    • Sous dossier 1
      • page-1.pdf
      • page-2.pdf
      • page-3.pdf
    • Sous dossier 2
      • page-1.pdf
      • page-2.pdf
    • Sous-dossier 3
      • page-1.pdf
      • page-2.pdf
      • page-3.pdf
      • page-4.pdf
    • Sous dossier 1.pdf
    • Sous dossier 2.pdf
    • Sous dossier 3.pdf

Les fichiers générés par le script : “Sous dossier 1.pdf”, “Sous dossier 2.pdf”, “Sous dossier 3.pdf” contiendront les pages contenues dans les sous-dossiers du même nom.

La seule variable à fournir est celle correspondante au “dossier_racine”, attention sous Windows à bien penser à doubler le “\\”

Le code source

## Script ayant pour objectif de reassembler les PDF presents dans des sous-dossiers du dossier "dossier_racine",
## Les PDF reassembles sont ecrit a la racine de "dossier_racine"
## Utile pour PDF monopage a re-assembler (exemple courrier de plusieurs pages scanne page par page ou ebook...
##
## Pre-requis : PyPDF2 (pip install pypdf2) ET python 3
## Date : 20/12/2015
## Auteur : Julien Toutain
 
from PyPDF2 import PdfFileMerger
import os
 
dossier_racine = "C:\\test"          
 
def lancer_reassemblage(dossier_source):
 
    liste_contenu_dossier_src = os.listdir(dossier_source)
 
    for sous_dossier in liste_contenu_dossier_src:
        merger = PdfFileMerger()
        liste_contenu_sous_dossier = os.listdir(dossier_source+"\\"+sous_dossier)
 
        for fichier in liste_contenu_sous_dossier:
            inputpdf = open(dossier_source+"\\"+sous_dossier+"\\"+fichier, "rb")
            merger.append(fileobj = inputpdf, pages = (0,1))
            inputpdf = ""
            outputpdf = open(dossier_source+"\\"+sous_dossier+".pdf", "wb")
 
        merger.write(outputpdf)  
        merger.close() 
 
if __name__ == '__main__':
    print('reassemblage demarre')
    lancer_reassemblage(dossier_racine)
    print('reassemblage termine')