How To Get Fonts From Docx In Java

...
public class DocxHelper {

    // gets all font names
    public static List<String> getAllDocxFonts(XWPFDocument docx)
            throws XmlException, IOException {

        if(docx==null)
        {
            return null;
        }

        // collection of found font names
        List<String> listOfFonts = new ArrayList<String>();

        // get fonts from existing styles + default fonts
        listOfFonts = getAllDocxStylesFonts(docx);

        // get fonts from paragraphs
        for (String paragraphFont : getAllDocxParagraphFonts(docx)) {
            if (!listOfFonts.contains(paragraphFont)) {
                listOfFonts.add(paragraphFont);
            }
        }
        return listOfFonts;
    }

    // collects all document paragraphs
    private static List<XWPFParagraph> getAllDocxParagraphs(XWPFDocument docx)
            throws XmlException, IOException {

        // found paragraphs
        List<XWPFParagraph> allParagraphs = new ArrayList<XWPFParagraph>();

        // docx body elements
        List<IBodyElement> allDocxBodyElements = docx.getBodyElements();

        // iterate through body elements
        for (IBodyElement docxBodyElement : allDocxBodyElements) {
            // get XWPFParagraph
            if (docxBodyElement instanceof XWPFParagraph) {
                XWPFParagraph paragraph = (XWPFParagraph) docxBodyElement;
                allParagraphs.add(paragraph);
            }

            // get XWPFTable
            if (docxBodyElement instanceof XWPFTable) {
                XWPFTable table = (XWPFTable) docxBodyElement;
                // iterate through table rows
                for (int i = 0; i < table.getNumberOfRows(); i++) {
                    XWPFTableRow row = table.getRow(i);
                    List<XWPFTableCell> rowcells = row.getTableCells();
                    // iterate through table row cells
                    for (XWPFTableCell xwpfTableCell : rowcells) {
                        // get all cell paragraphs ind iterate through
                        for (XWPFParagraph paragraph : xwpfTableCell
                                .getParagraphs()) {
                            allParagraphs.add(paragraph);
                        }
                    }
                }
            }
        }
        return allParagraphs;
    }

    // collects fonts used in styles
    private static List<String> getAllDocxStylesFonts(XWPFDocument docx)
            throws XmlException, IOException {

        // collection of found font names
        List<String> listOfFonts = new ArrayList<String>();

        // get default document fonts
        if (docx.getStyle().getDocDefaults() != null) {
            if (docx.getStyle().getDocDefaults().getRPrDefault() != null
                    && docx.getStyle().getDocDefaults().getRPrDefault()
                            .getRPr() != null) {
                CTFonts ctdefaultFont = docx.getStyle().getDocDefaults()
                        .getRPrDefault().getRPr().getRFonts();
                if (ctdefaultFont != null && ctdefaultFont.getAscii() != null) {
                    // get also EastAsia, CS and HAnsi 
                    listOfFonts.add(ctdefaultFont.getAscii().trim());
                }
            }
        }

        // get all styles from DOCX document
        List<CTStyle> styles = docx.getStyle().getStyleList();

        // get fonts defined in styles
        if (styles != null) {
            // iterate through found styles
            for (CTStyle style : styles) {
                if (style.getRPr() != null) {
                    CTFonts ctfont = style.getRPr().getRFonts();
                    if (ctfont != null) {
                        // get also EastAsia, CS and HAnsi 
                        if (ctfont.getAscii() != null) {
                            if (!listOfFonts.contains(ctfont.getAscii().trim())) {
                                listOfFonts.add(ctfont.getAscii().trim());
                            }
                        }
                    }
                }
            }
        }
        return listOfFonts;
    }

    // collects fonts used in paragraphs
    private static List<String> getAllDocxParagraphFonts(XWPFDocument docx)
            throws XmlException, IOException {

        // collection of found font names
        List<String> listOfFonts = new ArrayList<String>();

        // iterate through all docx paragraphs
        for (XWPFParagraph paragraph : getAllDocxParagraphs(docx)) {
            // get runs
            List<XWPFRun> runsList = paragraph.getRuns();
            // iterate through runs
            for (XWPFRun run : runsList) {
                if (run.getFontFamily() != null
                        && !run.getFontFamily().isEmpty()) {
                    if (!listOfFonts.contains(run.getFontFamily())) {
                        listOfFonts.add(run.getFontFamily());
                    }
                }
            }
        }
        return listOfFonts;
    }
}

 ...

Requirement Engineering, Business Analysis, Agile, Analysis and Design with UML, Java/J2EE, Liferay, Javascript, Embedded C++, MDD, Executable UML, Project Management


© 2017 JULIUSURBAN.NET