使用iText从pdf文档中提取图像的最佳方法是什么?表示为byte []流?
" pdf"我得到的是服务器的byte []。我无法控制如何收到它。
我试图找出如何从多页pdf中提取所有图像,并将每个图像放入BufferedImage[]
。每个pdf页面上只有一个图像,所以如果我有一个10页长的pdf,我会有一个BufferedImage[10]
。 My initial implementation读入文件,然后转换。需求发生了变化,现在我必须尽可能地使用流。
我的旧实现不再起作用,因为MyImageRenderListener没有提供没有参数的构造函数(对于流不是必需的),我无法摆脱解析器,因为parser.processContent()
(将图像拉出)将监听器作为参数。
我希望有一个更好的解决方案,而不是我目前遇到问题的方向。
public static byte[] convert(byte[] in ) throws FileNotFoundException, IOException {
ByteArrayInputStream input = new ByteArrayInputStream(in);
ArrayList<BufferedImage> bimgArrL = getBufImgArr(input);
BufferedImage[] bim = new BufferedImage[bimgArrL.size()];
bimgArrL.toArray(bim);
// More code below, not important in this scenario
}
//used with streams
public static ArrayList<BufferedImage> getBufImgArr(final ByteArrayInputStream bais) throws IOException { // TODO: This needs to be a MemoryCacheRandomAccessInputStream
PdfReader reader = new PdfReader(bais);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
MyImageRenderListener listener = new MyImageRenderListener(); // This is the problem
for (int page = 1; page <= reader.getNumberOfPages(); page++) {
parser.processContent(page, listener);
}
reader.close();
return listener.getBimgArray();
}
public class MyImageRenderListener implements RenderListener {
protected String path = "";
protected ArrayList bimg = new ArrayList(); // Added this
public MyImageRenderListener(String path) {
this.path = path;
}
public ArrayList<BufferedImage> getBimgArray() { //
return bimg; // Added this
} //
public void renderImage(ImageRenderInfo renderInfo) {
try {
PdfImageObject image = renderInfo.getImage();
if (image == null) {
return;
}
bimg.add(image.getBufferedImage()); // Added this
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}