web-dev-qa-db-fra.com

Conversion d'un PDF en une série d'images avec Python

J'essaie d'utiliser Python pour convertir un multi-page PDF en une série de JPEG. Je peux diviser le PDF en pages individuelles assez facilement avec les outils disponibles, mais je n'ai pas réussi à trouver quoi que ce soit qui puisse convertir des PDF en images.

PIL ne fonctionne pas, car il ne peut pas lire les PDF. Les deux options que j'ai trouvées utilisent GhostScript ou ImageMagick via le Shell. Ce n'est pas une option viable pour moi, car ce programme doit être multiplateforme, et je ne peux pas être sûr que l'un de ces programmes sera disponible sur les machines sur lesquelles il sera installé et utilisé.

Existe-t-il des bibliothèques Python qui peuvent le faire?

46
Jaearess
20
Adam Rosenfield

Voici ce qui a fonctionné pour moi en utilisant le module python ghostscript (installé par '$ pip install ghostscript')):

import ghostscript

def pdf2jpeg(pdf_input_path, jpeg_output_path):
    args = ["pdf2jpeg", # actual value doesn't matter
            "-dNOPAUSE",
            "-sDEVICE=jpeg",
            "-r144",
            "-sOutputFile=" + jpeg_output_path,
            pdf_input_path]
    ghostscript.Ghostscript(*args)

J'ai également installé Ghostscript 9.18 sur mon ordinateur et cela n'aurait probablement pas fonctionné autrement.

7
Idan Yacobi

Vous ne pouvez pas éviter la dépendance Ghostscript. Même Imagemagick s'appuie sur Ghostscript pour ses fonctions de lecture PDF. La raison en est la complexité du format PDF: un PDF ne contient pas seulement des informations bitmap, mais surtout des formes vectorielles, des transparents, etc. De plus, il est assez complexe de comprendre lesquels de ces objets apparaissent sur quelle page.

Ainsi, le rendu correct d'une page PDF est clairement hors de portée pour une bibliothèque Python pure.

La bonne nouvelle est que Ghostscript est préinstallé sur de nombreuses fenêtres et systèmes Linux, car il est également nécessaire à toutes ces PDF imprimantes (sauf Adobe Acrobat).

4
Franz

Si vous utilisez Linux, certaines versions sont livrées avec un utilitaire de ligne de commande appelé 'pdftopbm'. Découvrez netpbm

1
Jay
1
mattbasta