我的代码:
Document document = new Document("C:\\Users\\11964\\Desktop\\test.docx", loadOptions);
document.getCompatibilityOptions().optimizeFor(MsWordVersion.WORD_2019);
Node[] nodes = document.getChildNodes(NodeType.OFFICE_MATH,true).toArray();
for (Node node:nodes) {
if (node instanceof OfficeMath officeMath) {
if (officeMath.getAncestor(NodeType.OFFICE_MATH) == null) {
System.out.println(officeMath.getText());
}
}
}
document.save("tmp.docx");
我的文件:
test.docx (34.6 KB)
输出的时候少了一个字母β。请问是什么原因
@qhkyqhfe 并不总是能够将 OfficeMath 有意义地输出为文本。您可以尝试将公式打印为 MathML:
Document doc = new Document("C:\\Temp\\in.docx");
HtmlSaveOptions opt = new HtmlSaveOptions();
opt.setOfficeMathOutputMode(HtmlOfficeMathOutputMode.MATH_ML);
Iterable<OfficeMath> maths = doc.getChildNodes(NodeType.OFFICE_MATH, true);
for (OfficeMath m : maths)
{
if (m.getAncestor(NodeType.OFFICE_MATH) == null)
{
System.out.println(m.toString(opt));
}
}
您好。我尝试了多种方法,没有找到一个很好的方式获取原公式的表达式。请问应该如何从MathML中获取原公式呢
@qhkyqhfe 在您的文档中,β 不在 office 数学中。这就是你无法得到它的原因。
您应该把它移到办公室数学中,或者可以使用以下代码:
Document doc = new Document("test.docx");
Iterable<OfficeMath> maths = doc.getChildNodes(NodeType.OFFICE_MATH, true);
for (OfficeMath m : maths) {
if (m.getAncestor(NodeType.OFFICE_MATH) == null) {
StringBuilder formulaBuilder = new StringBuilder();
Node currentNode = m;
while (currentNode != null) {
formulaBuilder.append(currentNode.getText());
currentNode = currentNode.getNextSibling();
}
System.out.println(formulaBuilder.toString().trim());
break;
}
}
请注意,括号等一些属性只是用于在MS Word文档中显示的设置,因此我们无法在输出中显示它们。
请问如何在保留格式的前提下,正确合并若干个OfficeMath呢