我使用此代码测试一个Times New Roman字体文件和一个Calibri字体文件。对于Times New Roman,代码可以返回字体名称但不能返回字体大小。至于Calibri,我无法获得字体名称或字体大小。我不知道发生了什么事......
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
public class test1 {
public static void main(String[] args) {
File file = new File("F:\\workspace\\zExtractInformationTest2\\bold.docx");
XWPFDocument document;
try {
document = new XWPFDocument(new FileInputStream(file));
List<XWPFParagraph> paraList = document.getParagraphs();
for (int index = 0; index < paraList.size(); index++) {
XWPFParagraph para = paraList.get(index);
for (XWPFRun run : para.getRuns()) {
String font = run.getFontName();
int fontSize = run.getFontSize();
String text = run.text();
boolean isBold = run.isBold();
System.out.println("run: "+font+"\t"+fontSize+"\t"+text+"\t"+isBold);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
这是默认字体大小&amp;默认字体问题。使用方法可以直接获取默认布局xml文本,然后就可以知道默认字体大小,默认字体和默认对齐方式。
private String[] getDefault() {
String[] defaultAttibts = new String[] { "", "", "" };
try {
CTStyles styles = document.getStyle();
if (styles.isSetDocDefaults()) {
String docDefaults = styles.getDocDefaults().xmlText();
if (docDefaults.contains("jc")) {
docDefaults = docDefaults.substring(docDefaults.indexOf("jc"));
docDefaults = docDefaults.substring(docDefaults.indexOf("=\"") + 2);
defaultAttibts[0] = docDefaults.substring(0, docDefaults.indexOf("\"")).toUpperCase();
}
if (docDefaults.contains("sz")) {
docDefaults = docDefaults.substring(docDefaults.indexOf("sz"));
docDefaults = docDefaults.substring(docDefaults.indexOf("=\"") + 2);
defaultAttibts[1] = docDefaults.substring(0, docDefaults.indexOf("\""));
}
if (docDefaults.contains("rFonts")) {
docDefaults = docDefaults.substring(docDefaults.indexOf("rFonts"));
docDefaults = docDefaults.substring(docDefaults.indexOf("=\"") + 2);
defaultAttibts[2] = docDefaults.substring(0, docDefaults.indexOf("\""));
}
}
CTStyle[] style = styles.getStyleArray();
for (CTStyle s : style) {
if (s.isSetDefault() && s.isSetType()) {
if (s.getType().toString().equals("paragraph") && s.getDefault().toString().equals("1")) {
String text = s.xmlText();
if (defaultAttibts[1] == "") {
text = text.substring(text.indexOf("sz"));
text = text.substring(text.indexOf("=\"") + 2);
defaultAttibts[1] = text.substring(0, text.indexOf("\""));
}
}
}
}
} catch (XmlException | IOException e) {
e.printStackTrace();
}
return defaultAttibts;
}