2017-06-13 35 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) –