Comment lire un fichier PDF en Java
Il n'est pas difficile de lire des fichiers PDF en Java en utilisant des bibliothèques facilement disponibles. La lecture de fichiers PDF vous permet d'écrire des programmes Java capables de traiter le texte de ces fichiers. Une option pour lire les fichiers PDF est la bibliothèque PDFBox gratuite et open source disponible auprès d'Apache. La plate-forme de développement Java Eclipse facilite ce travail et gère les bibliothèques que vous allez télécharger. Vous devez être familiarisé avec la programmation Java pour utiliser ces bibliothèques Java.
Rassembler les bibliothèques nécessaires
Étape 1
Téléchargez le JDK Java à partir du site Web de Sun. Il s'agit d'un fichier exécutable que vous pouvez installer sur votre système en l'exécutant. Des versions sont disponibles pour Windows, Mac et Linux. Cliquez sur le bouton rouge "Télécharger". Enregistrez un fichier appelé "jdk-6uxx-windows-xxx.exe" lorsque vous y êtes invité. Enregistrez ce fichier, puis double-cliquez dessus pour lancer le programme d'installation Java.
Étape 2
Téléchargez le système de développement Eclipse et décompressez-le dans un répertoire de niveau supérieur. Sélectionnez "Eclipse IDE pour les développeurs Java". Cela lancera le téléchargement de "eclipse-java-galileo-SR2-win32.zip". Double-cliquez sur le fichier pour le décompresser une fois le téléchargement terminé. Sélectionnez l'emplacement du répertoire racine "C:" pour décompresser Eclipse.
Étape 3
Démarrez Eclipse en double-cliquant sur "eclipse.exe" dans le répertoire que vous venez de créer en décompressant le fichier zip eclipse. Dans le système Eclipse, créez un projet nommé "PrintPdf". Sélectionnez "Fichier" puis "Nouveau" puis "Projet Java". Tapez le nom du projet "PrintPdf" dans la boîte de dialogue qui apparaît. Assurez-vous que le bouton radio est sélectionné et indique "Créer des dossiers séparés pour les fichiers source et de classe". Cliquez sur "Terminer".
Étape 4
Créez un dossier "lib" dans votre projet "PrintPdf". Faites un clic droit sur le projet "PrintPdf" et sélectionnez "Nouveau" puis "Dossier". Entrez le nom "lib" et cliquez sur "Terminer".
Étape 5
Téléchargez Apache "PDFBox.jar" depuis le site Apache et copiez-le dans le répertoire lib que vous venez de créer. Sur la même page Web, téléchargez le fichier "fontbox-nn.jar" et le fichier "jempbox-nn.jar". Dans chaque cas, lorsque vous cliquez sur ce fichier jar, vous accédez à une page où vous pouvez sélectionner l'un des nombreux serveurs pouvant fournir ce fichier. Choisissez chacun d'eux et chaque fichier jar sera téléchargé. Copiez chaque fichier jar dans le répertoire lib que vous venez de créer.
Étape 6
Téléchargez le package Apache log4j.jar de la même manière et copiez le fichier log4j.jar dans le répertoire. La bibliothèque Apache PDFBox utilise cette bibliothèque de journalisation Apache, ce fichier doit donc être présent.
Étape 7
Téléchargez le package Apache Commons Discovery sous forme de fichier zip. Double-cliquez sur le fichier zip, sélectionnez le "commons-discovery-nn.jar" et extrayez-le dans le répertoire lib.
Étape 8
Dans Eclipse, cliquez sur le répertoire "lib" et appuyez sur "F5". Assurez-vous que tous les fichiers jar que vous avez ajoutés sont affichés.
Étape 9
Faites un clic droit sur le projet PrintPDF et sélectionnez "Propriétés". Sélectionnez "Java Build Path" et sélectionnez l'onglet "Bibliothèques". Cliquez sur "Add jars" et allez dans le répertoire lib que vous venez de créer, et ajoutez "commons-logging-nn.jar" "fontbox-nn.jar," "jempbox-nn.jar," "log4j-nn.jar" ," et "pdfbox-nn.jar." Cliquez sur "OK".
Écrire le code pour lire les PDF
Étape 1
Faites un clic droit sur le dossier "src" de votre projet "PrintPDF" et sélectionnez "Nouveau" et le "Package". Créez un package en utilisant n'importe quel nom significatif. Par exemple, nommez le package "com.pdf.util". Cliquez sur "Terminer".
Étape 2
Faites un clic droit sur le nom du package que vous venez de créer et sélectionnez "Nouveau" puis "Classe". Créez une classe nommée "PDFTextParser". Assurez-vous de cocher la case marquée "public static void main..." afin que le système crée une méthode "main".
Étape 3
Modifiez la méthode "main" dans la classe "PDFTextParser" pour qu'elle contienne le code suivant :
public static void main(String args[]){ PDFTextParser pdf =new PDFTextParser("data/javaPDF.pdf") ALLER //imprimer les résultats System.out.println(pdf.getParsedText()) ALLER }
Notez que le fichier que vous souhaitez imprimer est énoncé dans le constructeur de PDFTextParser ("data/JavaPDF.pdf"). Il pourrait tout aussi bien s'agir d'un argument de ligne de commande :
PDFTextParser pdf = new PDFTextParser(argv[0])
ALLER
ou sélectionné à partir d'une interface graphique.
Il crée une instance de la classe PDFTextParser, puis appelle sa méthode "getParsedText".
Étape 4
Insérez le code suivant juste en dessous de la première ligne de classe "public class PDFTextParser" qui a été créée pour vous.
analyseur privé PDFParser =null GO
// Extract text from PDF Document public PDFTextParser(String fileName) { File file = new File(fileName)
GO if (!file.isFile()) { System.err.println("File " + fileName + " does not exist.") GO } //Configurer une instance de l'analyseur PDF try { parser =new PDFParser(new FileInputStream( file)) GO } catch (IOException e) { System.err.println("Impossible d'ouvrir l'analyseur PDF. " + e.getMessage()) GO } } //------------- ------------------ public String getParsedText() { PDDocument pdDoc =null ALLER COSDocument cosDoc =null;
String parsedText =null; ALLER
try { PDFTextStripper pdfStripper = new PDFTextStripper()
ALLER parser.parse() ALLER cosDoc =parser.getDocument() ALLER pdDoc =nouveau PDDocument(cosDoc) ALLER
//get list of all pages List<PDPage> list = pdDoc.getDocumentCatalog().getAllPages()
ALLER
//note that you can print out any pages you want //by choosing different values of the start and end page pdfStripper.setStartPage(1); //1-based int length = list.size(); //total number of pages pdfStripper.setEndPage(length); //last page //get the text for the pages selected parsedText = pdfStripper.getText(pdDoc)
GO } catch (IOException e) { System.err .println("Une exception s'est produite lors de l'analyse du document PDF." + e.getMessage()) GO } finally { try { if (cosDoc !=null) cosDoc.close() ALLER si (pdDoc !=null) pdDoc.close() ALLER } catch (IOException e) { e.printStackTrace() ALLER } }
return parsedText GO }
Étape 5
Exécutez le programme. Faites un clic droit sur la classe PDFTextParser et cliquez sur "Exécuter en tant que" puis sur "Programme Java". Le programme devrait s'exécuter et imprimer le contenu textuel du fichier PDF que vous avez entré dans votre code.
Supprimer le message d'erreur de démarrage de Log4j
Étape 1
Créez un fichier de configuration pour supprimer le message d'erreur log4j du système de journalisation Java créé lorsqu'il ne trouve pas de fichier de configuration au démarrage. Faites un clic droit sur le dossier "src" du projet PrintPDF et sélectionnez "Nouveau" puis "Fichier". Nommez le fichier "log4j.properties" Eclipse affichera un écran vide pour ce nouveau fichier.
Étape 2
Collez les lignes suivantes dans l'écran vide représentant le fichier "log4j.properties".
Définissez le niveau de l'enregistreur racine sur DEBUG et son seul appender sur A1. log4j.rootLogger=AVERTISSEMENT, A1
A1 est défini pour être un ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender
A1 utilise PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
Étape 3
Enregistrez le fichier "log4j.properties". La présence de ce fichier dans le répertoire "src" de niveau supérieur supprimera le message de démarrage log4j et tous les messages de journalisation triviaux. Le système log4j n'imprimera que les erreurs réelles.
Astuce
Il existe également un certain nombre de packages commerciaux que vous pouvez utiliser pour extraire du texte à partir de fichiers PDF, mais ils ne sont pas bon marché.