2017-06-13 69 views
0

希望這很簡單。如何將提取的圖像從pdf寫入文件

我正在使用pdfbox從pdf中提取圖像。我想將圖像寫入文件夾。我似乎沒有得到任何輸出(該文件夾具有讀寫權限)。

我可能不會正確書寫輸出流,我認爲。

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDPage; 
import org.apache.pdfbox.pdmodel.PDResources; 
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage; 
public final class JavaImgExtactor 
{ 

    public static void main(String[] args) throws IOException{ 
     Stuff(); 
    } 

    @SuppressWarnings("resource") 
    public static void Stuff() throws IOException{ 
     File inFile = new File("/Users/sebastianzeki/Documents/Images Captured with Proc Data Audit.pdf"); 
    PDDocument document = new PDDocument(); 
      //document=null; 
    try { 
     document = PDDocument.load(inFile); 
    } catch (Exception e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    List pages = document.getDocumentCatalog().getAllPages(); 
    Iterator iter = pages.iterator(); 
    while (iter.hasNext()) { 
       PDPage page = (PDPage) iter.next(); 
       System.out.println("page"+page); 
       PDResources resources = page.getResources(); 
       Map pageImages = resources.getImages(); 
       if (pageImages != null) { 

        Iterator imageIter = pageImages.keySet().iterator(); 
        System.out.println("Success"+imageIter); 
        while (imageIter.hasNext()) { 

         String key = (String) imageIter.next(); 
         PDXObjectImage image = (PDXObjectImage) pageImages.get(key); 
         FileOutputStream out = new FileOutputStream("/Users/sebastianzeki/Documents/ImgPDF.jpg"); 
         try { 
          image.write2OutputStream(out); 

         } catch (Exception e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 
       } 
    } 
} 
} 

回答

0

image.write2OutputStream(out);image對象寫入字節到outFileOutputStream對象,但它不沖洗的out緩衝區。

添加它應該做的工作:

out.flush(); 
1

您不關閉輸出流,和文件名總是相同的。

try (FileOutputStream out = new FileOutputStream("/Users/sebastianzeki/Documents/ImgPDF" + key + ".jpg") { 
    write2OutputStream(out); 
} (Exception e) { 
    printStackTrace(); 
} 

試用資源將自動關閉out。不確定key是否可用作文件名稱部分。

+0

我認爲它比這更基礎,因爲while(imageIter.hasNext())後我沒有得到任何System.out.println結果。我是不是將圖像添加到集合中? –

+0

@ SebastianZeki也許圖像不在這個層面,或者是內嵌圖像 - 你應該分享PDF。更好:使用當前版本2.0.6,並使用源代碼下載中的ExtractImages.java源代碼。 –

+0

請參閱[ExtractImages](https://pdfbox.apache.org/1.8/commandline.html) –