Convertir un fichier PDF en image

Je voulais convertir un document PDF en image. J’utilisais Ghost4j.

Problème: Ghost4J a besoin du fichier gsdll32.dll au moment de l’exécution et je ne souhaite pas utiliser le fichier dll.

Question 1: y at-il un moyen, dans ghost4j, de convertir une image sans la dll?

Question 2: J’ai trouvé la solution dans l’API PDFBox. org.apache.pdfbox.pdmodel.PDPagep have method convertToImage () `qui convertit la page PDF au format Image.

 PDDocument doc = PDDocument.load(new File("/document.pdf")); Listpages = doc.getDocumentCatalog().getAllPages(); PDPage page = pages.get(0); BufferedImage image =page.convertToImage(); File outputfile = new File("/image.png"); ImageIO.write(image, "png", outputfile); doc.close(); 

Je n’ai que du texte sur le document PDF. et j’ai cette exception quand je lance ce code:

 Aug 12, 2013 6:00:24 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: BDC Exception in thread "main" java.lang.ExceptionInInitializerError at org.apache.pdfbox.pdmodel.font.PDTrueTypeFont.getawtFont(PDTrueTypeFont.java:481) at org.apache.pdfbox.pdmodel.font.PDSimpleFont.drawSsortingng(PDSimpleFont.java:109) at org.apache.pdfbox.pdfviewer.PageDrawer.processTextPosition(PageDrawer.java:235) at org.apache.pdfbox.util.PDFStreamEngine.processEncodedText(PDFStreamEngine.java:496) at org.apache.pdfbox.util.operator.ShowTextGlyph.process(ShowTextGlyph.java:62) at org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:554) at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:268) at org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:235) at org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:215) at org.apache.pdfbox.pdfviewer.PageDrawer.drawPage(PageDrawer.java:125) at org.apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.java:781) at org.apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.java:712) at ge.eid.esignature.adessa.pades.sign.PDFtoImage.main(PDFtoImage.java:25) Caused by: java.lang.IllegalArgumentException at java.nio.Buffer.position(Buffer.java:216) at sun.font.TrueTypeFont.lookupName(TrueTypeFont.java:1153) at sun.font.TrueTypeFont.getPostscriptName(TrueTypeFont.java:1205) at java.awt.Font.getPSName(Font.java:1156) at org.apache.pdfbox.pdmodel.font.FontManager.loadFonts(FontManager.java:101) at org.apache.pdfbox.pdmodel.font.FontManager.(FontManager.java:53) ... 13 more 

Vous pouvez facilement convertir les pages de fichiers 04-Request-Headers.pdf au format image.

Convertissez toutes les pages PDF au format image en Java à l’aide de PDF Box.

Jar requirejs pdfbox-1.8.3.jar

ou la dépendance maven

  org.apache.pdfbox pdfbox 1.8.3  

Voici la solution:

 package com.pdf.pdfbox.examples; import java.awt.image.BufferedImage; import java.io.File; import java.util.List; import javax.imageio.ImageIO; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; @SuppressWarnings("unchecked") public class ConvertPDFPagesToImages { public static void main(Ssortingng[] args) { try { Ssortingng sourceDir = "C:/Documents/04-Request-Headers.pdf"; // Pdf files are read from this folder Ssortingng destinationDir = "C:/Documents/Converted_PdfFiles_to_Image/"; // converted images from pdf document are saved here File sourceFile = new File(sourceDir); File destinationFile = new File(destinationDir); if (!destinationFile.exists()) { destinationFile.mkdir(); System.out.println("Folder Created -> "+ destinationFile.getAbsolutePath()); } if (sourceFile.exists()) { System.out.println("Images copied to Folder: "+ destinationFile.getName()); PDDocument document = PDDocument.load(sourceDir); List list = document.getDocumentCatalog().getAllPages(); System.out.println("Total files to be converted -> "+ list.size()); Ssortingng fileName = sourceFile.getName().replace(".pdf", ""); int pageNumber = 1; for (PDPage page : list) { BufferedImage image = page.convertToImage(); File outputfile = new File(destinationDir + fileName +"_"+ pageNumber +".png"); System.out.println("Image Created -> "+ outputfile.getName()); ImageIO.write(image, "png", outputfile); pageNumber++; } document.close(); System.out.println("Converted Images are saved at -> "+ destinationFile.getAbsolutePath()); } else { System.err.println(sourceFile.getName() +" File not exists"); } } catch (Exception e) { e.printStackTrace(); } } } 

Conversions possibles des images au format jpg, jpeg, png, bmp, gif .

Remarque: j’ai mentionné les formats d’image principalement utilisés.

 ImageIO.write(image , "jpg", new File( destinationDir +fileName+"_"+pageNumber+".jpg" )); ImageIO.write(image , "jpeg", new File( destinationDir +fileName+"_"+pageNumber+".jpeg" )); ImageIO.write(image , "png", new File( destinationDir +fileName+"_"+pageNumber+".png" )); ImageIO.write(image , "bmp", new File( destinationDir +fileName+"_"+pageNumber+".bmp" )); ImageIO.write(image , "gif", new File( destinationDir +fileName+"_"+pageNumber+".gif" )); 

Sortie de la console:

 Images copied to Folder: Converted_PdfFiles_to_Image Total files to be converted -> 13 Aug 06, 2014 1:35:49 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_1.png Aug 06, 2014 1:35:50 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_2.png Aug 06, 2014 1:35:51 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_3.png Aug 06, 2014 1:35:51 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_4.png Aug 06, 2014 1:35:52 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_5.png Aug 06, 2014 1:35:52 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_6.png Aug 06, 2014 1:35:53 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_7.png Aug 06, 2014 1:35:53 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_8.png Aug 06, 2014 1:35:54 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_9.png Aug 06, 2014 1:35:54 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_10.png Aug 06, 2014 1:35:54 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_11.png Aug 06, 2014 1:35:55 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_12.png Aug 06, 2014 1:35:55 PM org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation: i Image Created -> 04-Request-Headers_13.png Converted Images are saved at -> C:\Documents\Converted_PdfFiles_to_Image 

Vous pouvez essayer d’utiliser NonSequentialParser pour éviter les erreurs avec certains fichiers PDF (avec mises à jour incrémentielles):

PDDocument doc = PDDocument.loadNonSeq (nouveau fichier (“/ document.pdf”));

La façon de parcourir PDFBox est un bon moyen d’éviter les liaisons natives. Essayez d’utiliser le PDFImageWriter du PDFBox, j’ai fait la même chose en quelques lignes et cela a parfaitement fonctionné. Vous devez extraire le PDFDocument et utiliser le rédacteur avec celui-ci.

 PDFImageWriter.write(doc, "png", null, , Integer.MAX_VALUE, "picture"); 

Pour toutes les pages.

 PDFImageWriter.write(doc, "png", null, 0, 0, "picture"); 

Voir: PDFImageWriter Javadoc

Vous avez probablement essayé de convertir un fichier PDF corrompu. J’ai les mêmes erreurs lorsque le fichier PDF contient des stream JPXEncoded.

  try { PDDocument document = PDDocument.load(PdfInfo.getPDFWAY()); if (document.isEncrypted()) { document.decrypt(PdfInfo.getPASSWORD()); } if ("bilevel".equalsIgnoreCase(PdfInfo.getCOLOR())) { PdfInfo.setIMAGETYPE( BufferedImage.TYPE_BYTE_BINARY); } else if ("indexed".equalsIgnoreCase(PdfInfo.getCOLOR())) { PdfInfo.setIMAGETYPE(BufferedImage.TYPE_BYTE_INDEXED); } else if ("gray".equalsIgnoreCase(PdfInfo.getCOLOR())) { PdfInfo.setIMAGETYPE(BufferedImage.TYPE_BYTE_GRAY); } else if ("rgb".equalsIgnoreCase(PdfInfo.getCOLOR())) { PdfInfo.setIMAGETYPE(BufferedImage.TYPE_INT_RGB); } else if ("rgba".equalsIgnoreCase(PdfInfo.getCOLOR())) { PdfInfo.setIMAGETYPE(BufferedImage.TYPE_INT_ARGB); } else { System.exit(2); } PDFImageWriter imageWriter = new PDFImageWriter(); boolean success = imageWriter.writeImage(document, PdfInfo.getIMAGE_FORMAT(),PdfInfo.getPASSWORD(), PdfInfo.getSTART_PAGE(),PdfInfo.getEND_PAGE(),PdfInfo.getOUTPUT_PREFIX(),PdfInfo.getIMAGETYPE(),PdfInfo.getRESOLUTION()); if (!success) { System.exit(1); } document.close(); } catch (IOException | CryptographyException | InvalidPasswordException ex) { Logger.getLogger(PdfToImae.class.getName()).log(Level.SEVERE, null, ex); } public class PdfInfo { private static Ssortingng PDFWAY; private static Ssortingng OUTPUT_PREFIX; private static Ssortingng PASSWORD; private static int START_PAGE=1; private static int END_PAGE=Integer.MAX_VALUE; private static Ssortingng IMAGE_FORMAT="jpg"; private static Ssortingng COLOR="rgb"; private static int RESOLUTION=256; private static int IMAGETYPE=24; private static Ssortingng filename; private static Ssortingng filePath=""; } 

Pour l’erreur:

org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: opération non prise en charge / désactivée

Vous devez inclure fontar-1.7.1 jar dans le chemin d’access aux classes, à l’exception d’Apache pdfbox jar, qui résoudra votre problème, car PDFBox utilise en interne fontbox-1.7.1.

Vous pouvez facilement convertir un fichier PDF en image à l’aide de PDFBox . La méthode renderImageWithDPI de la classe PDFRenderer de PDFBox est utilisée pour convertir un fichier PDF en image.

 PDDocument doc=PDDocument.load(new File("filepath/sample.pdf")); PDFRenderer pdfRenderer = new PDFRenderer(doc); BufferedImage bffim = pdfRenderer.renderImageWithDPI(pageNo, 300, ImageType.RGB); Ssortingng fileName = "image-" + page + ".png"; ImageIOUtil.writeImage(bim, fileName, 300);