Если вопрос заключается в том, как извлечь /word/theme/theme1.xml
из файловой системы *.docx
, как ее проанализировать, а затем извлечь из нее <a:minorFont><a:latin...
, то это можно решить следующим образом:
Сначала используйте методы OPCPackage , чтобы получить часть пакета /word/theme/theme1.xml
.
...
XWPFDocument document = new XWPFDocument(new FileInputStream("./WordExample.docx"));
OPCPackage oPCPackage = document.getPackage();
PackagePartName partName = PackagingURIHelper.createPartName("/word/theme/theme1.xml");
PackagePart themePart = oPCPackage.getPart(partName);
...
Затем, если у нас есть PackagePart
, выполните синтаксический анализ в org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument
, Затем используйте методы org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument
, чтобы получить дочерние элементы этого.
...
ThemeDocument themeDocument = ThemeDocument.Factory.parse(themePart.getInputStream());
CTOfficeStyleSheet theme = themeDocument.getTheme();
CTBaseStyles themeElements = theme.getThemeElements();
CTFontScheme fontScheme = themeElements.getFontScheme();
CTFontCollection minorFont = fontScheme.getMinorFont();
CTTextFont latin = minorFont.getLatin();
...
К сожалению, нет API
документации org.openxmlformats.schemas.*
publi c. Итак, чтобы получить такое, нам нужно скачать источники ooxml-schemas
(например, из https://repo1.maven.org/maven2/org/apache/poi/ooxml-schemas/1.4/) и затем использовать javadoc
для создания API
документации из источников.
Полный пример:
import java.io.FileInputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.openxml4j.opc.*;
import org.openxmlformats.schemas.drawingml.x2006.main.*;
public class WordGetThemeDocument {
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument(new FileInputStream("./WordExample.docx"));
OPCPackage oPCPackage = document.getPackage();
PackagePartName partName = PackagingURIHelper.createPartName("/word/theme/theme1.xml");
PackagePart themePart = oPCPackage.getPart(partName);
System.out.println(themePart);
ThemeDocument themeDocument = ThemeDocument.Factory.parse(themePart.getInputStream());
CTOfficeStyleSheet theme = themeDocument.getTheme();
CTBaseStyles themeElements = theme.getThemeElements();
CTFontScheme fontScheme = themeElements.getFontScheme();
CTFontCollection minorFont = fontScheme.getMinorFont();
CTTextFont latin = minorFont.getLatin();
System.out.println(latin);
String typeFace = latin.getTypeface();
System.out.println(typeFace);
document.close();
}
}