gpt4 book ai didi

java - Apache POI - 如何检索 "rect"对象内的 "pict"对象

转载 作者:行者123 更新时间:2023-12-02 08:49:37 26 4
gpt4 key购买 nike

我正在尝试使用 Apache POI 将 Word 文档转换为 HTML。我有一个 Word 文档,段落后有一条水平线。水平线的 OOXML 如下所示:

          <w:p w14:paraId="721E1052" w14:textId="05637367" w:rsidR="002D1248" w:rsidRPr="00BB3E82" w:rsidRDefault="00B3113F" w:rsidP="00797596">
<w:pPr>
<w:rPr>
<w:rFonts w:eastAsia="Times New Roman" w:cs="Courier New"/>
<w:snapToGrid w:val="0"/>
<w:color w:val="000000"/>
<w:lang w:eastAsia="fi-FI"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:eastAsia="Times New Roman" w:cs="Courier New"/>
<w:snapToGrid w:val="0"/>
<w:color w:val="000000"/>
<w:lang w:eastAsia="fi-FI"/>
</w:rPr>
<w:pict w14:anchorId="534EEFD0">
<v:rect id="_x0000_i1025" style="width:0;height:1.5pt" o:hralign="center" o:hrstd="t" o:hr="t" fillcolor="#a0a0a0" stroked="f"/>
</w:pict>
</w:r>
</w:p>

对应于这条水平线,我想在HTML中添加一个HR标签。但是,我无法检索“pict”内的“rect”元素。这是我到目前为止所尝试过的:

List<org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture> pics = run.getCTR().getPictList();
if(pics!=null) {
log.debug("Size of pics = "+pics.size());
for (org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture pic : pics) {
Node picNode = pic.getDomNode();
CTGroup ctGroup = CTGroup.Factory.parse(picNode);
if(ctGroup!=null) {
log.debug("Size of rects= "+ctGroup.getRectList().size());
}
}

上面的代码给出:图片大小 = 1矩形的大小= 0我不知道为什么会这样。任何帮助理解如何检索“矩形”对象的帮助将不胜感激。谢谢。

最佳答案

您无法从 org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture dom 节点解析 com.microsoft.schemas.vml.CTGroup 元素。

但是所有ooxml-schemas对象都继承自org.apache.xmlbeans.XmlObject。因此,他们可以使用 XmlObject.selectChildren 通过元素 URI 和元素本地名称来选择子项。 。我们需要知道的是 com.microsoft.schemas.vml.* 的命名空间 URI 是“urn:schemas-microsoft-com:vml”。

示例:

import java.io.FileInputStream;

import org.apache.poi.xwpf.usermodel.*;

import org.apache.xmlbeans.XmlObject;

import java.util.List;

public class WordReadCTPictureContent {

public static void main(String[] args) throws Exception {

String inFilePath = "./HRBetweenParagraphs.docx";

XWPFDocument document = new XWPFDocument(new FileInputStream(inFilePath));

for (XWPFParagraph paragraph : document.getParagraphs()) {
for (XWPFRun run : paragraph.getRuns()) {

List<org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture> pics = run.getCTR().getPictList();
System.out.println("Size of pics = " + pics.size());
for (org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture pic : pics) {
//select com.microsoft.schemas.vml.CTRect children by elementUri and elementLocalName
XmlObject[] rects = pic.selectChildren("urn:schemas-microsoft-com:vml", "rect");
System.out.println("Count of rects = " + rects.length);
for (XmlObject obj : rects) {
com.microsoft.schemas.vml.CTRect rect = (com.microsoft.schemas.vml.CTRect)obj;
//now we can work with found com.microsoft.schemas.vml.CTRect
System.out.println("Id of found rect = " + rect.getId());
}

}

}
}

document.close();
}

}

关于java - Apache POI - 如何检索 "rect"对象内的 "pict"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60869553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com