2017-08-08 1 views
1

Mes amis, j'utilise PDFBox 2.0.6. J'ai réussi à extraire des images du fichier pdf, mais en ce moment, il crée une image pour une seule page pdf. Mais le problème est qu'il peut y avoir un non. d'images dans une page pdf, Et je veux que chaque image incorporée devrait être extraite comme une seule image elle-même.Extraire plusieurs images intégrées à partir d'une seule page PDF en utilisant PDFBox

Voici le code,

import java.awt.image.BufferedImage; 
import java.io.File; 
import javax.imageio.ImageIO; 
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.rendering.PDFRenderer; 

public class DemoPdf { 

    public static void main(String args[]) throws Exception { 
     //Loading an existing PDF document 
     File file = new File("C:/Users/ADMIN/Downloads/Vehicle_Photographs.pdf"); 
     PDDocument document = PDDocument.load(file); 
     //Instantiating the PDFRenderer class 
     PDFRenderer renderer = new PDFRenderer(document); 
     File imageFolder = new File("C:/Users/ADMIN/Desktop/image"); 

     for (int page = 0; page < document.getNumberOfPages(); ++page) { 
      //Rendering an image from the PDF document 
      BufferedImage image = renderer.renderImage(page); 
      //Writing the image to a file 
      ImageIO.write(image, "JPEG", new File(imageFolder+"/" + page +".jpg")); 
      System.out.println("Image created"+ page); 
     } 
     //Closing the document 
     document.close(); 
    } 

} 

Est-il possible que je peux PDFBox extraire toutes les images intégrées sous forme d'images séparées, Merci

+1

https://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java?view=markup –

+0

2.0.7 a été publié. –

Répondre

2

Oui. Il est possible d'extraire toutes les images de toutes les pages en pdf.

Vous pouvez vous référer à ce lien, extract images from pdf using PDFBox.

L'idée de base ici est d'étendre la classe avec PDFStreamEngine et de surcharger la méthode processOperator. Appelez PDFStreamEngine.processPage pour toutes les pages. Et si l'objet qui a été passé à processOperator est un objet image, obtenez BufferedImage à partir de l'objet et enregistrez-le.

+0

Merci, Malikarjun.Il a tout expliqué –

+0

Sachez que si l'exemple est joliment écrit et que la réponse est bonne, elle n'a pas les fonctionnalités de l'outil officiel (voir lien dans mon autre commentaire). L'outil officiel évite les doublons et peut également détecter les images en ligne et enregistrer les fichiers jpg 1: 1 comme jpg. –