如何将提取的图像从pdf写入文件

时间:2017-06-13 19:56:56

标签: java

希望这很简单。

我正在使用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();
                        }
                    }
                }
    }
}
}

2 个答案:

答案 0 :(得分:1)

您没有关闭输出流,文件名始终相同。

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

try-with-resources将自动关闭out。不确定key是否可用作文件名部分。

答案 1 :(得分:0)

image.write2OutputStream(out);image对象中的字节写入out FileOutputStream对象,但它不会刷新out的缓冲区。

添加它应该做的工作:

out.flush();