Extraction des images contenues dans un pdf

Description

Pour des besoins personnels, j'ai eu besoin d'extraire les images contenues dans un PDF.
Tout le travail est fait par la librairie PDFBox d'Apache, mon application n'est qu'une interface.

On peut sélectionner un PDF et un répertoire d'extraction avant de lancer le traitement. Les images ne sont pas réencodées : le format d'origine est conservé (jpg, png, bmp...).

La limite du zip à 1Mo ne m'autorise pas à intégrer les librairies Apache nécessaires :
- commons-logging-1.1.1.jar
- pdfbox-1.5.0.jar

Il faudra donc les télécharger et les mettre dans le dossier "librairies" afin de faire fonctionner l'application sinon vous aurez le droit à une jolie NoClassDefFoundError.

Source / Exemple :


compteurImages = 0;

		presentation.setProgressionIndefinie();

		/*

  • on charge le PDF en memoire et on recupere la liste de ses pages
  • /
PDDocument pdf = PDDocument.load(fichierPdf); PDDocumentCatalog catalogue = pdf.getDocumentCatalog(); List pages = catalogue.getAllPages(); int nombrePages = pages.size(); presentation.setNombrePages(nombrePages); PDPage page; PDResources ressources; Map images; Set cles; Iterator iterateurCles; String cle; PDXObjectImage image; /*
  • on parcourt les pages du PDF
  • /
for (int numeroPage = 0; numeroPage < nombrePages; numeroPage++) { page = (PDPage) pages.get(numeroPage); presentation.setNumeroPage(numeroPage); /*
  • on recupere toutes les images de la page en cours
  • /
ressources = page.getResources(); images = ressources.getImages(); cles = images.keySet(); iterateurCles = cles.iterator(); /*
  • on extrait chaque image dans le dossier d'extraction
  • /
while (iterateurCles.hasNext()) { cle = (String) iterateurCles.next(); image = (PDXObjectImage) images.get(cle); image.write2file(repertoireExtraction.getPath() + "/image_extraite_" + FORMAT_COMPTEUR.format(compteurImages++)); } } /*
  • on n'oublie pas de fermer le PDF
  • /
pdf.close();

Conclusion :


Pas grand chose à dire, si ce n'est que le traitement est étonnamment lent (la faute à PDFBox ?).

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.