Apache PDFBox convertir pdf en images

est-ce que quelqu'un peut me donner un exemple sur la façon D'utiliser Apache PDFBox pour convertir un pdf en différentes images (une pour chaque page du pdf). Merci à l'avance

42
demandé sur f_puras 2014-04-27 21:25:40

3 réponses

Solution pour 1.8.* versions:

PDDocument document = PDDocument.loadNonSeq(new File(pdfFilename), null);
List<PDPage> pdPages = document.getDocumentCatalog().getAllPages();
int page = 0;
for (PDPage pdPage : pdPages)
{ 
    ++page;
    BufferedImage bim = pdPage.convertToImage(BufferedImage.TYPE_INT_RGB, 300);
    ImageIOUtil.writeImage(bim, pdfFilename + "-" + page + ".png", 300);
}
document.close();

N'oubliez pas de lire le 1.8 page dépendances avant de faire votre construction.

Solution pour la version 2.0:

PDDocument document = PDDocument.load(new File(pdfFilename));
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); ++page)
{ 
    BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);

    // suffix in filename will be used as the file format
    ImageIOUtil.writeImage(bim, pdfFilename + "-" + (page+1) + ".png", 300);
}
document.close();

la classe ImageIOUtil est dans un téléchargement séparé / artefact (PDF-tools). Lire le 2.0 page dépendances avant de faire votre Compilation, vous aurez besoin de fichiers jar supplémentaires pour les fichiers PDF avec des images jbig2, pour sauvegarder des images tiff, et la lecture d'images cryptées fichier.

si vous utilisez JDK8, définissez -Dsun.java2d.cmm=sun.java2d.cmm.kcms.KcmsServiceProvider ou ce sera très lent.

82
répondu Tilman Hausherr 2018-02-27 08:31:28

si vous avez des dépendances supplémentaires, vous pouvez simplement utiliser PDFToImage classe déjà inclus dans PDFBox.

Kotlin:

PDFToImage.main(arrayOf<String>("-outputPrefix", "newImgFilenamePrefix", existingPdfFilename))

autres options de configuration: https://pdfbox.apache.org/docs/2.0.8/javadocs/org/apache/pdfbox/tools/PDFToImage.html

1
répondu kittyminky 2017-11-06 09:36:03
     public class PDFtoJPGConverter {

     public List<File> convertPdfToImage(File file, String destination) throws Exception {

    File destinationFile = new File(destination);

    if (!destinationFile.exists()) {
        destinationFile.mkdir();
        System.out.println("DESTINATION FOLDER CREATED -> " + destinationFile.getAbsolutePath());
    }else if(destinationFile.exists()){
        System.out.println("DESTINATION FOLDER ALLREADY CREATED!!!");
    }else{
        System.out.println("DESTINATION FOLDER NOT CREATED!!!");
    }

    if (file.exists()) {
        PDDocument doc = PDDocument.load(file);
        PDFRenderer renderer = new PDFRenderer(doc);
        List<File> fileList = new ArrayList<File>();

        String fileName = file.getName().replace(".pdf", "");
        System.out.println("CONVERTER START.....");

        for (int i = 0; i < doc.getNumberOfPages(); i++) {
            // default image files path: original file path
            // if necessary, file.getParent() + "/" => another path
            File fileTemp = new File(destination + fileName + "_" + i + ".jpg"); // jpg or png
            BufferedImage image = renderer.renderImageWithDPI(i, 200);
            // 200 is sample dots per inch.
            // if necessary, change 200 into another integer.
            ImageIO.write(image, "JPEG", fileTemp); // JPEG or PNG
            fileList.add(fileTemp);
        }
        doc.close();
        System.out.println("CONVERTER STOPTED.....");
        System.out.println("IMAGE SAVED AT -> " + destinationFile.getAbsolutePath());
        return fileList;
    } else {
        System.err.println(file.getName() + " FILE DOES NOT EXIST");
    }
    return null;
    }

      public static void main(String[] args) {

    try {
        PDFtoJPGConverter converter = new PDFtoJPGConverter();
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter your destination folder where save image \n");
        // Destination = D:/PPL/;
        String destination = sc.nextLine();

        System.out.print("Enter your selected pdf files name with source folder \n");
        String sourcePathWithFileName = sc.nextLine();
        // Source Path = D:/PDF/ant.pdf,D:/PDF/abc.pdf,D:/PDF/xyz.pdf
        if (sourcePathWithFileName != null || sourcePathWithFileName != "") {
            String[] files = sourcePathWithFileName.split(",");
            for (String file : files) {
                File pdf = new File(file);
                System.out.print("FILE:>> "+ pdf);
                converter.convertPdfToImage(pdf, destination);
            }
        }

    } catch (Exception ex) {
        ex.printStackTrace();
    }
  }

}

====================================

ici J'utilise Apache pdfbox-2.0.8, commons-logging-1.2 et fontbox-2.0.8 Library

HAPPY CODING :)

0
répondu rashedmedisys 2018-06-12 09:30:39