无法使用Apache POI读取.doc文件的整个单元格

时间:2017-09-08 12:01:33

标签: java apache ms-word apache-poi

在我的一个项目中,我需要使用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。我搜索了很多,但直到现在都没有运气。希望有人知道这样做的方法。 提前致谢。

1 个答案:

答案 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());
                        }

                    }
                }
            }
        }
    }