5
我已经完成从PDF中提取文本,但现在我想提取图像。第一个问题是图像在每页文本之间。我想知道的是如何按顺序提取图像,即使文件是每页2列,以及如何确定图像放置在文本中的位置。如何在Android上使用iText从PDF文件中提取图像和文本
这是我尝试过的一些代码。
图像提取:
ExtractImages.java:
public static final String RESULT = "results/part4/chapter15/Img%s.%s";
public void extractImages(String filename)
throws IOException, DocumentException {
PdfReader reader = new PdfReader(filename);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
MyImageRenderListener listener = new MyImageRenderListener(RESULT);
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
parser.processContent(i, listener);
}
}
MyImageRenderListener:
public MyImageRenderListener(String path) {
this.path = path;
}
public void renderImage(ImageRenderInfo renderInfo) {
try {
String filename;
FileOutputStream os;
PdfImageObject image = renderInfo.getImage();
if (image == null) return;
filename = String.format(path, renderInfo.getRef().getNumber(), image.getFileType());
os = new FileOutputStream(filename);
os.write(image.getImageAsBytes());
os.flush();
os.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
代码过程的PDF并检查图像的内容,然后渲染这些图像到一个图像文件(.PNG,.JPG,等)。
我在这里得到的问题是,它不按顺序提取图像。我想要图像的顺序,所以我会知道什么图像首先在一页和最后。我怎么做?那么,是否有可能提取图像而不将其渲染到文件?我的目标是将图像显示在我的android应用程序中,而不是将它转换为文件。如果我不可能,那么当用户使用它时,我会坚持删除图像。
我的目的是要EXTRACT(NOT VIEW)来自PDF文件的文本和图像,并按顺序显示在android应用程序中。
正如前面对其他问题的回应所述,人们在PDF中查看元素(文本或图像)的顺序并不一定以PDF的形式在手边呈现。因此,要匹配通用PDF中的解析图像和解析文本,必须提取两者的位置,并使用启发式方法在文本中锚定图像。即使你只在制定时想要按顺序获取图像,也必须提取/了解结构(多列?),并根据该结构分析图像位置。而如果在两栏文档中有一个图像在中心? ;) – mkl