Как получить более конкретную информацию о шрифте, используя API-интерфейс poi XWPF? когда я использую один файл шрифта Calibri для проверки, fontName, который я получаю, равен нулю, а размер шрифта равен -1
Я использую этот код для тестирования одного файла шрифта 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();
}
}
}
1 ответ
Это размер шрифта по умолчанию и проблема шрифта по умолчанию. Используйте следующий метод, чтобы получить текст макета по умолчанию напрямую, а затем узнать размер шрифта по умолчанию, шрифт по умолчанию и выравнивание по умолчанию.
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;
}