如何将提取的图像从pdf写入文件
问题描述:
希望这很简单。如何将提取的图像从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();
}
}
}
}
}
}
答
image.write2OutputStream(out);
从image
对象写入字节到out
FileOutputStream
对象,但它不冲洗的out
缓冲区。
添加它应该做的工作:
out.flush();
答
您不关闭输出流,和文件名总是相同的。
try (FileOutputStream out = new FileOutputStream("/Users/sebastianzeki/Documents/ImgPDF" + key + ".jpg") {
write2OutputStream(out);
} (Exception e) {
printStackTrace();
}
试用资源将自动关闭out
。不确定key
是否可用作文件名称部分。
我认为它比这更基础,因为while(imageIter.hasNext())后我没有得到任何System.out.println结果。我是不是将图像添加到集合中? –
@ SebastianZeki也许图像不在这个层面,或者是内嵌图像 - 你应该分享PDF。更好:使用当前版本2.0.6,并使用源代码下载中的ExtractImages.java源代码。 –
请参阅[ExtractImages](https://pdfbox.apache.org/1.8/commandline.html) –