我正在使用poi从docx文件中提取内容,在处理一个文件时,所有图片都丢失了,我检查了这个文件的格式,发现结构异常:
<w:r>
<w:p xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
<w:r>
<w:drawing>
<wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251658240" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1">
<wp:simplePos x="0" y="0"/>
<wp:positionH relativeFrom="column">
<wp:align>center</wp:align>
</wp:positionH>
<wp:positionV relativeFrom="paragraph">
<wp:posOffset>2540</wp:posOffset>
</wp:positionV>
<wp:extent cx="5352176" cy="1837188"/>
<wp:wrapTopAndBottom/>
<wp:docPr id="9" name="media/GIUACAFYtDB.png"/>
<a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:nvPicPr>
<pic:cNvPr id="0" name="media/GIUACAFYtDB.png"/>
<pic:cNvPicPr/>
</pic:nvPicPr>
<pic:blipFill>
<a:blip r:embed="rId9"/>
<a:stretch>
<a:fillRect/>
</a:stretch>
</pic:blipFill>
<pic:spPr>
<a:xfrm>
<a:off x="0" y="0"/>
<a:ext cx="5352176" cy="1837188"/>
</a:xfrm>
<a:prstGeom prst="rect"/>
</pic:spPr>
</pic:pic>
</a:graphicData>
</a:graphic>
</wp:anchor>
</w:drawing>
</w:r>
</w:p>
</w:r>
段落元素位于run元素内。我称之为嵌入段落,但我找不到使用poi解析嵌入段落的方法。我如何处理这些数据?
public static List<XWPFPictureData> extractPictureData(XWPFRun wrun) {
List<XWPFPicture> pictures = wrun.getEmbeddedPictures();
List<XWPFPictureData> result = new ArrayList<>();
if(pictures != null && !pictures.isEmpty()) {
for (XWPFPicture picture : pictures) {
XWPFPictureData data = picture.getPictureData();
if(data != null) {
result.add(data);
}
}
return result;
}
CTR ctr = wrun.getCTR();
if(ctr.validate()) {
return result;
}
//this run does not obey openxml protocal.
XWPFDocument document = wrun.getDocument();
String xpath = "declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' " +
".//w:drawing";
XmlObject[] drawings = ctr.selectPath(xpath);
for (XmlObject drawing : drawings) {
String blipPath = "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' " +
".//a:blip";
XmlObject[] blips = drawing.selectPath(blipPath);
if(blips.length == 0) {
continue;
}
XmlObject blip = blips[0];
XmlObject blipId =
blip.selectAttribute("http://schemas.openxmlformats.org/officeDocument/2006/relationships"
, "embed");
if(blipId == null) {
continue;
}
String id = ((SimpleValue)blipId).getStringValue();
POIXMLDocumentPart relatedPart = document.getRelationById(id);
if (relatedPart instanceof XWPFPictureData) {
XWPFPictureData pictureData = (XWPFPictureData) relatedPart;
result.add(pictureData);
}
}
return result;
}
它并不能解决所有问题,但现在它解决了我的问题。我试图访问低级XmlObject,并为嵌入段落构造一个XWPFParagraph对象,但失败了。所以我只使用低级xml处理代码。
我试图通过ApachePOI阅读Microsoft word文档,发现提供了两种方便的方法来扫描文档,如getText()、getParagraphList()等。。但我的用例略有不同,我们希望扫描任何文档的方式是,它应该按照文档中出现的相同顺序为我们提供事件/信息,如标题、段落、表格。它将帮助我准备一个文档结构,比如, 其主要目的是保持标题和段落之间的关系,如原始文件所示。不确定,但像这样的东西
正如您在word文档中看到的,有许多带有要点的问题。现在,我正在尝试使用apache POI从文件中提取每个段落。这是我当前的代码 上述方法的问题在于它打印的是每一行而不是段落。此外,项目符号也从提取的字符串中删除。返回一个纯字符串。 谁能解释一下我做错了什么。也请建议如果你有一个更好的想法来解决它。
我需要从DOCX文件中提取文本和图像到文本文件(当然,将图像保存为图形文件)。使用下面的代码如何获取图像并将其保存为文本文件中的引用? 如果我使用: 我可以得到所有的图像,但有时一个图像被用在几个地方。我找不到从列表中获取特定图像的参考。以下是取自(从DOCX提取表)的示例代码:
示例单词内容为 Apache POI提供了API来给出段落和表的列表,但我无法阅读段落(测试用例)并立即查找该段落后面的表。 我尝试使用XWPFWordExtractor(读取所有文本)、bodyElementIterator(遍历所有主体元素),但大多数都给出了方法,该方法给出了段落列表和方法,该方法给出了文档中的所有表的列表。 我如何浏览所有段落,停在标题‘测试用例’之后的段落(第4段),然后
我需要使用Java Apache POI在excel中嵌入文件(格式为xlsx)。我找到了一个使用POI-HSSF在excel中嵌入文件(格式为xls)的示例 (使用Apache POI将文件嵌入到Excel中), 但此示例不适用于excel xlsx格式。有人知道使用是否可以做到这一点吗?
我找不到提取每个单元格中文本的方法