如何在 java 中使用 docx4j 获得斜体样式?
How to get italic style using docx4j in java?
我想使用 docx4j api 在 word 文件数据上应用斜体样式。但是我不明白,任何人都可以帮助我。
rPr.getI() 和 rPr.getICs() 不适合它...
下面是我输入的 docx 文件文本....
参考资料
Curry, R. A. 和 Tempkin, B. B. (2010)。 超声检查:正常结构和功能解剖学简介(第 3 版)。圣路易斯:桑德斯。
Frank, E., & Long, B. (2011)。 Merrill 的定位和射线照相程序图谱(第 12 版)。圣路易斯:莫斯比。
在这个文件中我有 Maintitle 包含斜体样式的字符样式,斜体不直接应用....
try {
File docxFile = new File("/Users/gwmc-062/Desktop/temp/test.docx");
WordprocessingMLPackage wProcessorPackage = WordprocessingMLPackage.load(docxFile);
MainDocumentPart documentPart = wProcessorPackage.getMainDocumentPart();
Document wmlDocumentEl = (Document) documentPart.getJaxbElement();
Body body = wmlDocumentEl.getBody();
List<Object> paraList = TraversalUtil.getChildrenImpl(body);
for (Object paraObj : paraList) {
String paraStyle = null;
boolean paraStyleFlag = false;
if (paraObj.getClass().getName().equalsIgnoreCase("org.docx4j.wml.P")) {
String paraText = XmlUtils.unwrap(paraObj).toString();
PPr pPr = ((P) XmlUtils.unwrap(paraObj)).getPPr();
if (pPr != null && pPr.getPStyle() != null) {
paraStyle = pPr.getPStyle().getVal();
paraStyleFlag = true;
}
List<Object> paraWRList = TraversalUtil.getChildrenImpl(paraObj);
for (Object paraWR : paraWRList) {
String charStyle = "";
boolean charStyleFlag = false, isItalic = false, isBold = false;
if (paraWR.getClass().getName().equalsIgnoreCase("org.docx4j.wml.R")) {
RPr rPr = ((R) XmlUtils.unwrap(paraWR)).getRPr();
if (rPr != null && rPr.getRStyle() != null) {
charStyle = rPr.getRStyle().getVal();
if (charStyle.toLowerCase().contains("italic"))
isItalic = true;
}
if(rPr != null && (rPr.getI() != null || rPr.getICs() != null)){
isItalic = true;
}
if(rPr != null && (rPr.getB() != null || rPr.getBCs() != null)){
isBold = true;
}
List<Object> textList = TraversalUtil.getChildrenImpl(paraWR);
for (Object tObj : textList) {
Object textObject = XmlUtils.unwrap(tObj);
String className = textObject.getClass().getName();
if (className.equalsIgnoreCase("org.docx4j.wml.Text")) {
String textContent = ((Text) textObject).getValue();
}
}
}
}//END paraWR LOOP...
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
The actual solution is:-
Style tStyle = (Style)rPr.getParent();
if( tStyle.getRPr().getI().isVal()){
isItalic = true;
}
我想使用 docx4j api 在 word 文件数据上应用斜体样式。但是我不明白,任何人都可以帮助我。
rPr.getI() 和 rPr.getICs() 不适合它...
下面是我输入的 docx 文件文本....
参考资料
Curry, R. A. 和 Tempkin, B. B. (2010)。 超声检查:正常结构和功能解剖学简介(第 3 版)。圣路易斯:桑德斯。
Frank, E., & Long, B. (2011)。 Merrill 的定位和射线照相程序图谱(第 12 版)。圣路易斯:莫斯比。
在这个文件中我有 Maintitle 包含斜体样式的字符样式,斜体不直接应用....
try {
File docxFile = new File("/Users/gwmc-062/Desktop/temp/test.docx");
WordprocessingMLPackage wProcessorPackage = WordprocessingMLPackage.load(docxFile);
MainDocumentPart documentPart = wProcessorPackage.getMainDocumentPart();
Document wmlDocumentEl = (Document) documentPart.getJaxbElement();
Body body = wmlDocumentEl.getBody();
List<Object> paraList = TraversalUtil.getChildrenImpl(body);
for (Object paraObj : paraList) {
String paraStyle = null;
boolean paraStyleFlag = false;
if (paraObj.getClass().getName().equalsIgnoreCase("org.docx4j.wml.P")) {
String paraText = XmlUtils.unwrap(paraObj).toString();
PPr pPr = ((P) XmlUtils.unwrap(paraObj)).getPPr();
if (pPr != null && pPr.getPStyle() != null) {
paraStyle = pPr.getPStyle().getVal();
paraStyleFlag = true;
}
List<Object> paraWRList = TraversalUtil.getChildrenImpl(paraObj);
for (Object paraWR : paraWRList) {
String charStyle = "";
boolean charStyleFlag = false, isItalic = false, isBold = false;
if (paraWR.getClass().getName().equalsIgnoreCase("org.docx4j.wml.R")) {
RPr rPr = ((R) XmlUtils.unwrap(paraWR)).getRPr();
if (rPr != null && rPr.getRStyle() != null) {
charStyle = rPr.getRStyle().getVal();
if (charStyle.toLowerCase().contains("italic"))
isItalic = true;
}
if(rPr != null && (rPr.getI() != null || rPr.getICs() != null)){
isItalic = true;
}
if(rPr != null && (rPr.getB() != null || rPr.getBCs() != null)){
isBold = true;
}
List<Object> textList = TraversalUtil.getChildrenImpl(paraWR);
for (Object tObj : textList) {
Object textObject = XmlUtils.unwrap(tObj);
String className = textObject.getClass().getName();
if (className.equalsIgnoreCase("org.docx4j.wml.Text")) {
String textContent = ((Text) textObject).getValue();
}
}
}
}//END paraWR LOOP...
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
The actual solution is:-
Style tStyle = (Style)rPr.getParent();
if( tStyle.getRPr().getI().isVal()){
isItalic = true;
}