2013-08-12 11 views
15

पर कनवर्ट करें मैं पीडीएफ दस्तावेज को छवि में परिवर्तित करना चाहता था। मैं Ghost4j का उपयोग कर रहा था।एक पीडीएफ फ़ाइल को छवि

समस्या: Ghost4J रनटाइम पर gsdll32.dll फ़ाइल की आवश्यकता है, और मैं नहीं dll फ़ाइल का उपयोग करना चाहते हैं।

प्रश्न 1: ghost4j में डीएल के बिना छवि को परिवर्तित करने के लिए कोई तरीका है?

प्रश्न 2: मुझे पीडीएफबॉक्स एपीआई में समाधान मिला। org.apache.pdfbox.pdmodel.PDPagep have method convertToImage() 'जो पीडीएफ पेज को छवि प्रारूप में परिवर्तित करता है।

PDDocument doc = PDDocument.load(new File("/document.pdf")); 
List<PDPage>pages = 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(); 

मेरे पास पीडीएफ दस्तावेज़ पर केवल टेक्स्ट है। और मेरे पास यह कोड है जब मैं इस कोड को चलाता हूं:

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.drawString(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.<clinit>(FontManager.java:53) 
    ... 13 more 

उत्तर

25

आप आसानी से 04-Request-Headers.pdf फ़ाइल पेजों को छवि प्रारूप में परिवर्तित कर सकते हैं।

पीडीएफ बॉक्स का उपयोग कर जावा में छवि प्रारूप में सभी पीडीएफ पृष्ठों को कनवर्ट करें। jpg, jpeg, png, bmp, gif प्रारूप में छवि के

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(String[] args) { 
     try { 
     String sourceDir = "C:/Documents/04-Request-Headers.pdf"; // Pdf files are read from this folder 
     String 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<PDPage> list = document.getDocumentCatalog().getAllPages(); 
      System.out.println("Total files to be converted -> "+ list.size()); 

      String 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(); 
    } 
} 
} 

संभावित रूपांतरण:

जार आवश्यक pdfbox-1.8.3.jar

या Maven निर्भरता

<dependency> 
    <groupId>org.apache.pdfbox</groupId> 
    <artifactId>pdfbox</artifactId> 
    <version>1.8.3</version> 
</dependency> 

यहाँ समाधान है।

नोट: मैंने मुख्य रूप से उपयोग किए गए छवि प्रारूपों का उल्लेख किया है।

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")); 

कंसोल आउटपुट:

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 
+1

मुझे यह त्रुटि मिल रही है मई 26, 2015 11:43:31 पूर्वाह्न org.apache.pdfbox.util.PDFStreamEngine प्रक्रियाऑपरेटर जानकारी: असमर्थित/अक्षम ऑपरेशन: बीडीसी मई 26, 2015 11:43: 31 पूर्वाह्न org.apache.pdfbox.util.PDFStreamEngine प्रक्रियाऑपरेटर जानकारी: असमर्थित/disab नेतृत्व ऑपरेशन: ईएमसी मैं पीडीएफबॉक्स 1.8.9 जार –

+0

का उपयोग कर रहा हूं यह पीडीएफबॉक्स के नवीनतम संस्करण के लिए थोड़ा अलग है। पीडीएफ रेंडर क्लास का प्रयोग करें। –

+0

पीडीएफ जिसमें टेक्स्ट और छवि सामग्री दोनों में कोई समस्या है। मैंने देखा है कि अंतिम छवि (इनपुट पीडीएफ फ़ाइल के) उत्पन्न होने के बाद टेक्स्ट डेटा छोड़ा जाता है, केवल छवि भाग (पृष्ठभूमि छवि आदि की तरह) प्रदर्शित होता है। इस संबंध में किसी भी मदद की सराहना की है। – yeppe

4

पीडीएफबॉक्स पर रास्ता देशी बाइंडिंग से बचने का एक अच्छा तरीका है। PDFBox से PDFImageWriter का उपयोग करने का प्रयास करें, मैंने कुछ पंक्तियों में इसके साथ ऐसा किया और यह पूरी तरह से काम किया। आपको पीडीएफ दस्तावेज़ निकालना है और इसके साथ लेखक का उपयोग करना है।

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

सभी पृष्ठों के लिए।

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

देखें: PDFImageWriter Javadoc

+1

यह एक ही अपवाद है! :( – grep

+0

'imageImageWriter'' ImageIO' से अधिक भरोसेमंद है? मैं 'ImageIO' का उपयोग करना पसंद करूंगा क्योंकि यह आसान लगता है ... जब तक यह विश्वसनीय नहीं है – mmcrae

+0

मेरे अनुभव से, यह पीडीएफ से कोई भी छवि नहीं लिखता है, क्या आप पुष्टि करें? मेरे पास मेरे पीडीएफ पर एक छवि है, और यह पीएनजी – mmcrae

3

शायद आप भ्रष्ट पीडीएफ फाइल बदलने की कोशिश की है। मुझे वही त्रुटियां हैं जब पीडीएफ फ़ाइल में जेपीएक्सएनकोडेड स्ट्रीम शामिल हैं।

+0

पर लिखता है। कई पीडीएफ पार्सर्स में अब jbig2 डिकोडर्स हैं जो –

6

आप NonSequentialParser उपयोग करने के लिए कुछ पीडीएफ फाइलों के साथ त्रुटियों से बचने के (वृद्धिशील अद्यतन के साथ) की कोशिश कर सकते हैं:

PDDocument डॉक = PDDocument.loadNonSeq (नई फ़ाइल ("/ document.pdf"));

+0

को संभालने में सक्षम होना चाहिए, यह मेरे लिए उपयोगी था –

0
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 String PDFWAY;  
    private static String OUTPUT_PREFIX; 
    private static String PASSWORD; 
    private static int START_PAGE=1; 
    private static int END_PAGE=Integer.MAX_VALUE; 
    private static String IMAGE_FORMAT="jpg"; 
    private static String COLOR="rgb"; 
    private static int RESOLUTION=256; 
    private static int IMAGETYPE=24; 
    private static String filename; 
    private static String filePath=""; 
} 
0

त्रुटि के लिए:

org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: unsupported/disabled operation

आप अपाचे से अलग वर्ग रास्ते में fontbox-1.7.1 जार शामिल करने की ज़रूरत पीडीएफबॉक्स जार जो आपकी समस्या को ठीक करेगा क्योंकि पीडीएफबॉक्स आंतरिक रूप से फ़ॉन्टबॉक्स-1.7.1

का उपयोग करता है
+0

"INFO: असमर्थित/अक्षम ऑपरेशन" INFO हानिरहित है और इसे अनदेखा किया जा सकता है। और किसी को भी 1.7.1 का उपयोग नहीं करना चाहिए। वर्तमान संस्करण 2.0.8 है। –

संबंधित मुद्दे