2017-06-13 15 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);outFileOutputStreamオブジェクトにimageオブジェクトからバイトを書き込みますが、それはoutのバッファをフラッシュしません。あなたは、出力ストリームをクローズしていない

out.flush(); 
1

、およびファイル名は常に同じです:

それが仕事をする必要があります。

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

try-with-resourcesは自動的に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)を参照してください。 –

関連する問題