在我的一个项目中,我需要使用Apache POI从.doc文件中读取图像。对于每一行,都有一个包含图像(一,二,三等)的单元格,我需要将其与文本数据一起读出。
所以我尝试了以下代码
FileInputStream fileInputStream = new FileInputStream(file);
POIFSFileSystem poifsFileSystem = new POIFSFileSystem(fileInputStream);
HWPFDocument doc = new HWPFDocument(poifsFileSystem);
Range range = doc.getRange();
PicturesTable pictureTable = doc.getPicturesTable();
PicturesSource pictures = new PicturesSource(doc);
Paragraph tableParagraph = range.getParagraph(0);
Table table = range.getTable(tableParagraph);
TableRow row = table.getRow(0);
TableCell cell1 = row.getCell(0);
for (int j = 0; j < cell1.getParagraph(0).numCharacterRuns(); j++) {
CharacterRun cr = cell1.getParagraph(0).getCharacterRun(j);
if (pictureTable.hasPicture(cr)) {
logger.debug("Has picture If--");
Picture picture = pictures.getFor(cr);
logger.debug("pictures Description--" + picture.getDescription());
}
}
现在我能够读取特定单元格的图像,但问题是我无法读取单元格的所有图像意味着,我能够在文本和图像之间读取图像之间的文本,但是我无法读取文本后面的图像。示例&#34; image_1 ---一些文字--- image_2一些文字--- .image_3&#34;。现在在这种情况下,我无法只读取image_3。我该怎么办,所以我也可以阅读image_3。我搜索了很多,但直到现在都没有运气。希望有人知道这样做的方法。 提前致谢。
答案 0 :(得分:1)
使用HWPFDocument,我也遇到了问题。如果您有机会在处理之前将Word文档更改为docx,这是一个适用于XWPFDocuments的示例:
FileInputStream fileInputStream = new FileInputStream(file);
XWPFDocument doc = new XWPFDocument(fileInputStream);
for (XWPFTable tbl : doc.getTables()) {
for (XWPFTableRow row : tbl.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph para : cell.getParagraphs()) {
for (XWPFRun run : para.getRuns()) {
for (XWPFPicture pic : run.getEmbeddedPictures()) {
System.out.println(pic.getPictureData());
}
}
}
}
}
}