2011-08-10 7 views
9

मैं पीडीएफ फाइल से छवियों को निकालने की कोशिश कर रहा हूं। मैं एक वेब पर उदाहरण के लिए, यह ठीक काम किया पाया:सही क्रम में iText के साथ पीडीएफ से छवियों को निकालने के लिए कैसे?

PdfReader reader; 

    File file = new File("example.pdf"); 
    reader = new PdfReader(file.getAbsolutePath()); 
    for (int i = 0; i < reader.getXrefSize(); i++) { 
     PdfObject pdfobj = reader.getPdfObject(i); 
     if (pdfobj == null || !pdfobj.isStream()) { 
      continue; 
     } 
     PdfStream stream = (PdfStream) pdfobj; 
     PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE); 
     if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) { 
      byte[] img = PdfReader.getStreamBytesRaw((PRStream) stream); 
      FileOutputStream out = new FileOutputStream(new File(file.getParentFile(), String.format("%1$05d", i) + ".jpg")); 
      out.write(img); 
      out.flush(); 
      out.close(); 
     } 
    } 

जो मुझे सभी छवियों को दे दी है, लेकिन छवियों गलत क्रम में थे। मेरा अगला प्रयास इस तरह देखा:

for (int i = 0; i <= reader.getNumberOfPages(); i++) { 
    PdfDictionary d = reader.getPageN(i); 
    PdfIndirectReference ir = d.getAsIndirectObject(PdfName.CONTENTS); 
    PdfObject o = reader.getPdfObject(ir.getNumber()); 
    PdfStream stream = (PdfStream) o; 
    // rest from example above 
} 

हालांकि o.isStream() == सच है, मैं केवल मिल/लंबाई और/फ़िल्टर और धारा केवल 100 बाइट्स लंबा है। कोई छवि बिल्कुल नहीं मिलती है।

मेरा प्रश्न सही होगा कि पीडीएफ फाइल से सभी छवियों को सही क्रम में प्राप्त करने का सही तरीका क्या होगा।

उत्तर

5

मुझे अन्य जगहों का उत्तर मिला, अर्थात् iText मेलिंग सूची।

निम्नलिखित कोड मेरे लिए काम करता है:

PDDocument document = null; 
document = PDDocument.load(inFile); 
List pages = document.getDocumentCatalog().getAllPages(); 
Iterator iter = pages.iterator(); 
while (iter.hasNext()) { 
      PDPage page = (PDPage) iter.next(); 
      PDResources resources = page.getResources(); 
      Map pageImages = resources.getImages(); 
      if (pageImages != null) { 
       Iterator imageIter = pageImages.keySet().iterator(); 
       while (imageIter.hasNext()) { 
        String key = (String) imageIter.next(); 
        PDXObjectImage image = (PDXObjectImage) pageImages.get(key); 
        image.write2OutputStream(/* some output stream */); 
       } 
      } 
} 
+0

भी पंछी की PDXObjectImage हिस्सा है? ऐसा लगता है कि यह –

+4

@FilipeCorreia nratx यह उल्लेख करने के लिए भूल गया कि वह अपाचे पीडीएफबॉक्स पर स्विच कर रहा है। – matt

+0

कुछ पीडीएफ फाइलों के लिए लाइन 'PDResources संसाधन = page.getResources(); '' PDResources संसाधन = page.findResources(); ' – Tim

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