web-dev-qa-db-fra.com

Apache PDFBox convertit le pdf en images

Quelqu'un peut-il me donner un exemple d'utilisation d'Apache PDFBox pour convertir un fichier PDF en différentes images (une pour chaque page du fichier PDF)? Merci d'avance

47
user3423568

Solution pour les versions 1.8. *:

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 la page 1.8 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 se trouve dans un téléchargement/artefact séparé (pdf-tools). Lisez la page des dépendances 2. avant de commencer votre construction, vous aurez besoin de fichiers jar supplémentaires pour les PDF contenant des images jbig2, pour pouvoir les enregistrer sur des images tiff et pour lire les fichiers cryptés.

Assurez-vous d’utiliser la dernière version de la version du JDK que vous utilisez, c’est-à-dire si vous utilisez jdk8, n’utilisez pas la version 1.8.0_5, utilisez la version 1.8.0_191 ou la version la plus récente au moment de la lecture. Les premières versions étaient très lentes.

94
Tilman Hausherr

sans aucune dépendance supplémentaire, vous pouvez simplement utiliser la classe PDFToImage déjà incluse 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
kittyminky

Je l'ai essayé aujourd'hui avec PdfBox 2.0.15.

import org.Apache.pdfbox.pdmodel.*;
import org.Apache.pdfbox.rendering.*;
import Java.awt.image.*;
import Java.io.*;
import javax.imageio.*;


public static void PDFtoJPG (String in, String out) throws Exception
{
    PDDocument pd = PDDocument.load (new File (in));
    PDFRenderer pr = new PDFRenderer (pd);
    BufferedImage bi = pr.renderImageWithDPI (0, 300);
    ImageIO.write (bi, "JPEG", new File (out)); 
}
0
chris01
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, je me sers de la bibliothèque Apache pdfbox-2.0.8, commons-logging-1.2 et fontbox-2.0.8

HEUREUX CODAGE :)

0
rashedmedisys