From 8b2539c99fa7ec06690290933749f6f90a5619ca Mon Sep 17 00:00:00 2001 From: wany <13995595726@qq.com> Date: Tue, 4 Mar 2025 17:24:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=90=88=E5=90=8C=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E4=B8=8A=E4=BC=A0=E4=B8=8D=E6=94=AF=E6=8C=81docx?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ssjygl-xsct-service/pom.xml | 402 ++--- .../core/styles/XWPFStylesDocument.java | 1515 +++++++++++++++++ 2 files changed, 1727 insertions(+), 190 deletions(-) create mode 100644 ssjygl-xsct-service/src/main/java/org/apache/poi/xwpf/converter/core/styles/XWPFStylesDocument.java diff --git a/ssjygl-xsct-service/pom.xml b/ssjygl-xsct-service/pom.xml index 28df341..66f3dd8 100644 --- a/ssjygl-xsct-service/pom.xml +++ b/ssjygl-xsct-service/pom.xml @@ -4,222 +4,244 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - 4.0.0 + 4.0.0 - com.cowr.ssjygl-xsct-service - ssjygl-xsct-service - 1.0 - jar + com.cowr.ssjygl-xsct-service + ssjygl-xsct-service + 1.0 + jar - 砂石经营管理-浠水城投-云端服务 - http://www.example.com + 砂石经营管理-浠水城投-云端服务 + http://www.example.com - - UTF-8 - 1.8 - 1.8 - + + UTF-8 + 1.8 + 1.8 + - - - - ali-maven - http://maven.aliyun.com/nexus/content/groups/public - - true - - - true - always - fail - - - + + + + ali-maven + http://maven.aliyun.com/nexus/content/groups/public + + true + + + true + always + fail + + + - - - com.cowr.ssjygl-xsct-common - ssjygl-xsct-common - 1.0 - compile - + + + com.cowr.ssjygl-xsct-common + ssjygl-xsct-common + 1.0 + compile + - - com.jfinal - jfinal - 4.9 - + + com.jfinal + jfinal + 4.9 + - - com.jfinal - cos - 2020.4 - + + com.jfinal + cos + 2020.4 + - - com.jfinal - jfinal-undertow - 2.1 - + + com.jfinal + jfinal-undertow + 2.1 + - - mysql - mysql-connector-java - 8.0.16 - + + mysql + mysql-connector-java + 8.0.16 + - - com.alibaba - druid - 1.1.22 - + + com.alibaba + druid + 1.1.22 + - - com.alibaba - fastjson - 1.2.79 - + + com.alibaba + fastjson + 1.2.79 + - - eu.bitwalker - UserAgentUtils - 1.21 - + + eu.bitwalker + UserAgentUtils + 1.21 + - - log4j - log4j - 1.2.16 - + + log4j + log4j + 1.2.16 + - - io.netty - netty-all - 4.1.48.Final - + + io.netty + netty-all + 4.1.48.Final + - - org.quartz-scheduler - quartz - 2.3.2 - + + org.quartz-scheduler + quartz + 2.3.2 + - - de.ruedigermoeller - fst - 2.56 - + + de.ruedigermoeller + fst + 2.56 + - - redis.clients - jedis - 2.9.0 - + + redis.clients + jedis + 2.9.0 + - - fr.opensagres.xdocreport - xdocreport - 1.0.6 - + + fr.opensagres.xdocreport + xdocreport + 1.0.6 + - - org.apache.poi - poi - 4.1.2 - + + org.apache.poi + poi + 4.1.2 + - - org.apache.poi - poi-scratchpad - 4.1.2 - + + org.apache.poi + poi-scratchpad + 4.1.2 + - - org.apache.poi - poi-ooxml - 4.1.2 - + + org.apache.poi + poi-ooxml + 4.1.2 + - - org.apache.poi - poi-ooxml-schemas - 4.1.2 - + + org.apache.poi + poi-ooxml-schemas + 4.1.2 + - - org.apache.poi - ooxml-schemas - 1.4 - + + org.apache.poi + ooxml-schemas + 1.4 + - - - org.slf4j - slf4j-nop - 1.7.25 - - compile - + + + org.slf4j + slf4j-nop + 1.7.25 + + compile + - + - - ssjygl-xsct-service - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - 1.8 - 1.8 - UTF-8 - - -parameters - - - - - + + ssjygl-xsct-service + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.1 + + 1.8 + 1.8 + UTF-8 + + -parameters + + + + + - - - org.apache.maven.plugins - maven-assembly-plugin - 3.1.0 - - - make-assembly - package - - single - + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + make-assembly + package + + single + - - - ${project.artifactId} - - false - - true - - - package.xml - - - ${project.build.directory}/ - - - - - - - + + + ${project.artifactId} + + false + + true + + + package.xml + + + ${project.build.directory}/ + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + ** + + + **/org/apache/poi/xwpf/converter/core/styles/XWPFStylesDocument.class + + + + + + + + diff --git a/ssjygl-xsct-service/src/main/java/org/apache/poi/xwpf/converter/core/styles/XWPFStylesDocument.java b/ssjygl-xsct-service/src/main/java/org/apache/poi/xwpf/converter/core/styles/XWPFStylesDocument.java new file mode 100644 index 0000000..af6afeb --- /dev/null +++ b/ssjygl-xsct-service/src/main/java/org/apache/poi/xwpf/converter/core/styles/XWPFStylesDocument.java @@ -0,0 +1,1515 @@ +/** + * Copyright (C) 2011-2015 The XDocReport Team + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package org.apache.poi.xwpf.converter.core.styles; + +import org.apache.poi.xwpf.converter.core.Color; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.xwpf.converter.core.BorderSide; +import org.apache.poi.xwpf.converter.core.ParagraphLineSpacing; +import org.apache.poi.xwpf.converter.core.TableCellBorder; +import org.apache.poi.xwpf.converter.core.TableHeight; +import org.apache.poi.xwpf.converter.core.TableWidth; +import org.apache.poi.xwpf.converter.core.openxmlformats.IOpenXMLFormatsPartProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphAlignmentValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphBackgroundColorValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphBorderBottomValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphBorderLeftValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphBorderRightValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphBorderTopValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphIndentationFirstLineValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphIndentationHangingValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphIndentationLeftValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphIndentationRightValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphLineSpacingValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphNumPrValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphSpacingAfterValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphSpacingBeforeValueProvider; +import org.apache.poi.xwpf.converter.core.styles.paragraph.ParagraphTabsValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunBackgroundColorValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunFontColorValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunFontFamilyAsciiValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunFontFamilyEastAsiaValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunFontFamilyHAnsiValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunFontSizeValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunFontStyleBoldValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunFontStyleItalicValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunFontStyleStrikeValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunTextHighlightingValueProvider; +import org.apache.poi.xwpf.converter.core.styles.run.RunUnderlineValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableAlignmentValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableBorderBottomValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableBorderInsideHValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableBorderInsideVValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableBorderLeftValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableBorderRightValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableBorderTopValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableIndentationValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableMarginBottomValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableMarginLeftValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableMarginRightValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableMarginTopValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.TableWidthValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellBackgroundColorValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellBorderBottomValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellBorderInsideHValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellBorderInsideVValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellBorderLeftValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellBorderRightValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellBorderTopValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellGridSpanValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellMarginBottomValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellMarginLeftValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellMarginRightValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellMarginTopValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellNoWrapValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellTextDirectionValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellVMergeValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellVerticalAlignmentValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.cell.TableCellWidthValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.row.TableRowHeaderValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.row.TableRowHeightValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.row.TableRowMarginBottomValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.row.TableRowMarginLeftValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.row.TableRowMarginRightValueProvider; +import org.apache.poi.xwpf.converter.core.styles.table.row.TableRowMarginTopValueProvider; +import org.apache.poi.xwpf.converter.core.utils.DxaUtil; +import org.apache.poi.xwpf.converter.core.utils.StringUtils; +import org.apache.poi.xwpf.usermodel.ParagraphAlignment; +import org.apache.poi.xwpf.usermodel.UnderlinePatterns; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFParagraph; +import org.apache.poi.xwpf.usermodel.XWPFRelation; +import org.apache.poi.xwpf.usermodel.XWPFRun; +import org.apache.poi.xwpf.usermodel.XWPFSettings; +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; +import org.apache.poi.xwpf.usermodel.XWPFTableRow; +import org.apache.xmlbeans.XmlException; +import org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocDefaults; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFont; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNumPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTString; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyle; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTabs; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPrBase; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPrEx; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblStylePr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextDirection; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTwipsMeasure; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.FontsDocument; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc.Enum; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.SettingsDocument; + +public class XWPFStylesDocument +{ + + public static final Object EMPTY_VALUE = new Object(); + + private static final float DEFAULT_TAB_STOP_POINT = DxaUtil.dxa2points( 720f ); + + private final Map stylesByStyleId; + + private CTStyle defaultParagraphStyle; + + private CTStyle defaultTableStyle; + + private final Map values; + + private CTStyle defaultCharacterStyle; + + private CTStyle defaultNumberingStyle; + + private Map tableInfos; + + private Float defaultTabStop; + + private CTSettings ctSettings; + + private List themeDocuments; + + private final Map> fontsAltName; + + private final Map fontsToUse; + + private CTStyles styles; + + public XWPFStylesDocument( XWPFDocument document ) + throws XmlException, IOException + { + this( document, true ); + } + + public XWPFStylesDocument( XWPFDocument document, boolean lazyInitialization ) + throws XmlException, IOException + { + this( document.getStyle(), getFontsDocument( document ), getThemeDocuments( document ), + getCTSettings( document ), lazyInitialization ); + } + + public XWPFStylesDocument( IOpenXMLFormatsPartProvider provider ) + throws Exception + { + this( provider, true ); + } + + public XWPFStylesDocument( IOpenXMLFormatsPartProvider provider, boolean lazyInitialization ) + throws Exception + { + this( provider.getStyle(), provider.getFontsDocument(), provider.getThemeDocuments(), provider.getSettings(), + lazyInitialization ); + } + + public XWPFStylesDocument( CTStyles styles, List fontsDocuments, List themeDocuments, + CTSettings ctSettings, boolean lazyInitialization ) + throws XmlException, IOException + { + this.styles = styles; + this.stylesByStyleId = new HashMap(); + this.values = new HashMap(); + this.fontsAltName = updateFonts( fontsDocuments ); + this.fontsToUse = new HashMap(); + this.themeDocuments = themeDocuments; + this.ctSettings = ctSettings; + if ( lazyInitialization ) + { + initialize(); + } + } + + private Map> updateFonts( List fontsDocuments ) + { + Map> fontsAltName = new HashMap>(); + // Compute fonts alt name + // see spec 17.8.3.1 altName (Alternate Names for Font) + for ( FontsDocument fontsDocument : fontsDocuments ) + { + CTString altName = null; + List fonts = fontsDocument.getFonts().getFontList(); + for ( CTFont font : fonts ) + { + altName = font.getAltName(); + if ( altName != null && StringUtils.isNotEmpty( altName.getVal() ) ) + { + List altNames = new ArrayList(); + // This element specifies a set of alternative names which can be used to locate the font + // specified by the parent + // element. This set of alternative names is stored in a comma-delimited list, with all + // adjacent commas ignored (i.e. + // a value of Name A, Name B is equivalent to Name A,,,,,,,,, Name B). + String[] names = altName.getVal().split( "," ); + String name = null; + for ( int i = 0; i < names.length; i++ ) + { + name = names[i]; + if ( StringUtils.isNotEmpty( name ) ) + { + altNames.add( name ); + } + } + fontsAltName.put( font.getName(), altNames ); + } + } + } + return fontsAltName; + } + + protected void initialize() + throws XmlException, IOException + { + List s = styles.getStyleList(); + for ( CTStyle style : s ) + { + org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff.Enum isDefault = style.getDefault(); + org.openxmlformats.schemas.wordprocessingml.x2006.main.STStyleType.Enum type = style.getType(); + + boolean isDefaultStyle = + ( isDefault != null && isDefault.intValue() == org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff.INT_X_1 ); + if ( isDefaultStyle ) + { + // default + if ( type != null ) + { + switch ( type.intValue() ) + { + case org.openxmlformats.schemas.wordprocessingml.x2006.main.STStyleType.INT_CHARACTER: + defaultCharacterStyle = style; + break; + case org.openxmlformats.schemas.wordprocessingml.x2006.main.STStyleType.INT_NUMBERING: + defaultNumberingStyle = style; + break; + case org.openxmlformats.schemas.wordprocessingml.x2006.main.STStyleType.INT_PARAGRAPH: + defaultParagraphStyle = style; + break; + case org.openxmlformats.schemas.wordprocessingml.x2006.main.STStyleType.INT_TABLE: + defaultTableStyle = style; + break; + } + } + + } + visitStyle( style, isDefaultStyle ); + stylesByStyleId.put( style.getStyleId(), style ); + } + } + + protected void visitStyle( CTStyle style, boolean defaultStyle ) + { + + } + + public CTStyle getDefaultParagraphStyle() + { + return defaultParagraphStyle; + } + + public CTStyle getStyle( String styleId ) + { + return stylesByStyleId.get( styleId ); + } + + public CTDocDefaults getDocDefaults() + { + try + { + return styles.getDocDefaults(); + } + catch ( Exception e ) + { + return null; + } + } + + // -------------------- Paragraph + + /** + * @param docxParagraph + * @return + */ + public Float getSpacingBefore( XWPFParagraph docxParagraph ) + { + return ParagraphSpacingBeforeValueProvider.INSTANCE.getValue( docxParagraph, this ); + } + + public Float getSpacingBefore( CTPPr pPr ) + { + return ParagraphSpacingBeforeValueProvider.INSTANCE.getValue( pPr ); + } + + public Float getSpacingBefore( CTP paragraph, CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.paragraph.ParagraphSpacingBeforeValueProvider.INSTANCE.getValue( paragraph, + table, + this ); + } + + public Float getSpacingAfter( XWPFParagraph docxParagraph ) + { + return ParagraphSpacingAfterValueProvider.INSTANCE.getValue( docxParagraph, this ); + } + + public Float getSpacingAfter( CTPPr pPr ) + { + return ParagraphSpacingAfterValueProvider.INSTANCE.getValue( pPr ); + } + + public Float getSpacingAfter( CTP paragraph, CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.paragraph.ParagraphSpacingAfterValueProvider.INSTANCE.getValue( paragraph, + table, + this ); + } + + public Float getIndentationLeft( XWPFParagraph paragraph ) + { + return ParagraphIndentationLeftValueProvider.INSTANCE.getValue( paragraph, this ); + } + + public Float getIndentationLeft( CTPPr pPr ) + { + return ParagraphIndentationLeftValueProvider.INSTANCE.getValue( pPr ); + } + + public Float getIndentationLeft( CTP paragraph, CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.paragraph.ParagraphIndentationLeftValueProvider.INSTANCE.getValue( paragraph, + table, + this ); + } + + public Float getIndentationRight( XWPFParagraph paragraph ) + { + return ParagraphIndentationRightValueProvider.INSTANCE.getValue( paragraph, this ); + } + + public Float getIndentationRight( CTPPr pPr ) + { + return ParagraphIndentationRightValueProvider.INSTANCE.getValue( pPr ); + } + + public Float getIndentationRight( CTP paragraph, CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.paragraph.ParagraphIndentationRightValueProvider.INSTANCE.getValue( paragraph, + table, + this ); + } + + public Float getIndentationFirstLine( XWPFParagraph paragraph ) + { + return ParagraphIndentationFirstLineValueProvider.INSTANCE.getValue( paragraph, this ); + } + + public Float getIndentationFirstLine( CTPPr pPr ) + { + return ParagraphIndentationFirstLineValueProvider.INSTANCE.getValue( pPr ); + } + + public Float getIndentationFirstLine( CTP paragraph, CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.paragraph.ParagraphIndentationFirstLineValueProvider.INSTANCE.getValue( paragraph, + table, + this ); + } + + public Float getIndentationHanging( XWPFParagraph paragraph ) + { + return ParagraphIndentationHangingValueProvider.INSTANCE.getValue( paragraph, this ); + } + + public Float getIndentationHanging( CTPPr pPr ) + { + return ParagraphIndentationHangingValueProvider.INSTANCE.getValue( pPr ); + } + + public Float getIndentationHanging( CTP paragraph, CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.paragraph.ParagraphIndentationHangingValueProvider.INSTANCE.getValue( paragraph, + table, + this ); + } + + public Color getBackgroundColor( XWPFParagraph paragraph ) + { + return ParagraphBackgroundColorValueProvider.INSTANCE.getValue( paragraph, this ); + } + + public Color getBackgroundColor( CTPPr pPr ) + { + return ParagraphBackgroundColorValueProvider.INSTANCE.getValue( pPr ); + } + + /** + * @param paragraph + * @return + */ + public ParagraphAlignment getParagraphAlignment( XWPFParagraph paragraph ) + { + return ParagraphAlignmentValueProvider.INSTANCE.getValue( paragraph, this ); + } + + public ParagraphAlignment getParagraphAlignment( CTPPr pPr ) + { + return ParagraphAlignmentValueProvider.INSTANCE.getValue( pPr ); + } + + public ParagraphAlignment getParagraphAlignment( CTP paragraph, CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.paragraph.ParagraphAlignmentValueProvider.INSTANCE.getValue( paragraph, + table, + this ); + } + + public CTBorder getBorderTop( XWPFParagraph docxParagraph ) + { + return ParagraphBorderTopValueProvider.INSTANCE.getValue( docxParagraph, this ); + } + + public CTBorder getBorderTop( CTPPr pPr ) + { + return ParagraphBorderTopValueProvider.INSTANCE.getValue( pPr ); + } + + public CTBorder getBorderBottom( XWPFParagraph docxParagraph ) + { + return ParagraphBorderBottomValueProvider.INSTANCE.getValue( docxParagraph, this ); + } + + public CTBorder getBorderBottom( CTPPr pPr ) + { + return ParagraphBorderBottomValueProvider.INSTANCE.getValue( pPr ); + } + + public CTBorder getBorderLeft( XWPFParagraph docxParagraph ) + { + return ParagraphBorderLeftValueProvider.INSTANCE.getValue( docxParagraph, this ); + } + + public CTBorder getBorderLeft( CTPPr pPr ) + { + return ParagraphBorderLeftValueProvider.INSTANCE.getValue( pPr ); + } + + public CTBorder getBorderRight( XWPFParagraph docxParagraph ) + { + return ParagraphBorderRightValueProvider.INSTANCE.getValue( docxParagraph, this ); + } + + public CTBorder getBorderRight( CTPPr pPr ) + { + return ParagraphBorderRightValueProvider.INSTANCE.getValue( pPr ); + } + + public CTTabs getParagraphTabs( XWPFParagraph docxParagraph ) + { + return ParagraphTabsValueProvider.INSTANCE.getValue( docxParagraph, this ); + } + + public CTTabs getParagraphTabs( CTPPr pPr ) + { + return ParagraphTabsValueProvider.INSTANCE.getValue( pPr ); + } + + public ParagraphLineSpacing getParagraphSpacing( XWPFParagraph docxParagraph ) + { + return ParagraphLineSpacingValueProvider.INSTANCE.getValue( docxParagraph, this ); + } + + public ParagraphLineSpacing getParagraphSpacing( CTPPr pPr ) + { + return ParagraphLineSpacingValueProvider.INSTANCE.getValue( pPr ); + } + + public ParagraphLineSpacing getParagraphSpacing( CTP paragraph, CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.paragraph.ParagraphLineSpacingValueProvider.INSTANCE.getValue( paragraph, + table, + this ); + } + + public CTNumPr getParagraphNumPr( XWPFParagraph docxParagraph ) + { + return ParagraphNumPrValueProvider.INSTANCE.getValue( docxParagraph, this ); + } + + public CTNumPr getParagraphNumPr( CTPPr pPr ) + { + return ParagraphNumPrValueProvider.INSTANCE.getValue( pPr ); + } + + // -------------------- Run + + /** + * @param run + * @return + */ + public String getFontFamilyAscii( XWPFRun run ) + { + return RunFontFamilyAsciiValueProvider.INSTANCE.getValue( run, this ); + } + + public String getFontFamilyAscii( CTRPr rPr ) + { + return RunFontFamilyAsciiValueProvider.INSTANCE.getValue( rPr, this ); + } + + public String getFontFamilyAscii( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunFontFamilyAsciiValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public String getFontFamilyEastAsia( XWPFRun run ) + { + return RunFontFamilyEastAsiaValueProvider.INSTANCE.getValue( run, this ); + } + + public String getFontFamilyEastAsia( CTRPr rPr ) + { + return RunFontFamilyEastAsiaValueProvider.INSTANCE.getValue( rPr, this ); + } + + public String getFontFamilyEastAsia( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunFontFamilyEastAsiaValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public String getFontFamilyHAnsi( XWPFRun run ) + { + return RunFontFamilyHAnsiValueProvider.INSTANCE.getValue( run, this ); + } + + public String getFontFamilyHAnsi( CTRPr rPr ) + { + return RunFontFamilyHAnsiValueProvider.INSTANCE.getValue( rPr, this ); + } + + public String getFontFamilyHAnsi( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunFontFamilyHAnsiValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public Float getFontSize( XWPFRun run ) + { + return RunFontSizeValueProvider.INSTANCE.getValue( run, this ); + } + + public Float getFontSize( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunFontSizeValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public Float getFontSize( CTRPr rPr ) + { + return RunFontSizeValueProvider.INSTANCE.getValue( rPr, this ); + } + + public Boolean getFontStyleBold( XWPFRun run ) + { + return RunFontStyleBoldValueProvider.INSTANCE.getValue( run, this ); + } + + public Boolean getFontStyleBold( CTRPr rPr ) + { + return RunFontStyleBoldValueProvider.INSTANCE.getValue( rPr, this ); + } + + public Boolean getFontStyleBold( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunFontStyleBoldValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public Boolean getFontStyleItalic( XWPFRun run ) + { + return RunFontStyleItalicValueProvider.INSTANCE.getValue( run, this ); + } + + public Boolean getFontStyleItalic( CTRPr rPr ) + { + return RunFontStyleItalicValueProvider.INSTANCE.getValue( rPr, this ); + } + + public Boolean getFontStyleItalic( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunFontStyleItalicValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public Boolean getFontStyleStrike( XWPFRun run ) + { + return RunFontStyleStrikeValueProvider.INSTANCE.getValue( run, this ); + } + + public Boolean getFontStyleStrike( CTRPr rPr ) + { + return RunFontStyleStrikeValueProvider.INSTANCE.getValue( rPr, this ); + } + + public Boolean getFontStyleStrike( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunFontStyleStrikeValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public Color getFontColor( XWPFRun run ) + { + return RunFontColorValueProvider.INSTANCE.getValue( run, this ); + } + + public Color getFontColor( CTRPr rPr ) + { + return RunFontColorValueProvider.INSTANCE.getValue( rPr, this ); + } + + public Color getFontColor( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunFontColorValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public UnderlinePatterns getUnderline( CTRPr rPr ) + { + return RunUnderlineValueProvider.INSTANCE.getValue( rPr, this ); + } + + public UnderlinePatterns getUnderline( XWPFRun run ) + { + return RunUnderlineValueProvider.INSTANCE.getValue( run, this ); + } + + public UnderlinePatterns getUnderline( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunUnderlineValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public Color getBackgroundColor( XWPFRun run ) + { + return RunBackgroundColorValueProvider.INSTANCE.getValue( run, this ); + } + + public Color getBackgroundColor( CTRPr rPr ) + { + return RunBackgroundColorValueProvider.INSTANCE.getValue( rPr, this ); + } + + public Color getBackgroundColor( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunBackgroundColorValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + public Color getTextHighlighting( XWPFRun run ) + { + return RunTextHighlightingValueProvider.INSTANCE.getValue( run, this ); + } + + public Color getTextHighlighting( CTRPr rPr ) + { + return RunTextHighlightingValueProvider.INSTANCE.getValue( rPr, this ); + } + + public Color getTextHighlighting( CTR run, CTP paragraph ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.run.RunTextHighlightingValueProvider.INSTANCE.getValue( run, + paragraph, + this ); + } + + // ------------------------ Table + + /** + * @param table + * @return + */ + public TableWidth getTableWidth( XWPFTable table ) + { + return TableWidthValueProvider.INSTANCE.getValue( table, this ); + } + + public TableWidth getTableWidth( CTTblPr tblPr ) + { + return TableWidthValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableWidth getTableWidth( CTTblPrBase tblPr ) + { + return TableWidthValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableWidth getTableWidth( CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.table.TableWidthValueProvider.INSTANCE.getValue( table, + this ); + } + + public ParagraphAlignment getTableAlignment( XWPFTable table ) + { + return TableAlignmentValueProvider.INSTANCE.getValue( table, this ); + } + + public ParagraphAlignment getTableAlignment( CTTblPr tblPr ) + { + return TableAlignmentValueProvider.INSTANCE.getValue( tblPr ); + } + + public ParagraphAlignment getTableAlignment( CTTblPrBase tblPr ) + { + return TableAlignmentValueProvider.INSTANCE.getValue( tblPr ); + } + + public ParagraphAlignment getTableAlignment( CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.table.TableAlignmentValueProvider.INSTANCE.getValue( table, + this ); + } + + public Float getTableIndentation( XWPFTable table ) + { + return TableIndentationValueProvider.INSTANCE.getValue( table, this ); + } + + public Float getTableIndentation( CTTblPr tblPr ) + { + return TableIndentationValueProvider.INSTANCE.getValue( tblPr ); + } + + public Float getTableIndentation( CTTblPrBase tblPr ) + { + return TableIndentationValueProvider.INSTANCE.getValue( tblPr ); + } + + public Float getTableIndentation( CTTbl table ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.table.TableIndentationValueProvider.INSTANCE.getValue( table, + this ); + } + + public TableCellBorder getTableBorderTop( XWPFTable table ) + { + return TableBorderTopValueProvider.INSTANCE.getValue( table, this ); + } + + public TableCellBorder getTableBorderTop( CTTblPr tblPr ) + { + return TableBorderTopValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderTop( CTTblPrBase tblPr ) + { + return TableBorderTopValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderBottom( XWPFTable table ) + { + return TableBorderBottomValueProvider.INSTANCE.getValue( table, this ); + } + + public TableCellBorder getTableBorderBottom( CTTblPr tblPr ) + { + return TableBorderBottomValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderBottom( CTTblPrBase tblPr ) + { + return TableBorderBottomValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderLeft( XWPFTable table ) + { + return TableBorderLeftValueProvider.INSTANCE.getValue( table, this ); + } + + public TableCellBorder getTableBorderLeft( CTTblPr tblPr ) + { + return TableBorderLeftValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderLeft( CTTblPrBase tblPr ) + { + return TableBorderLeftValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderRight( XWPFTable table ) + { + return TableBorderRightValueProvider.INSTANCE.getValue( table, this ); + } + + public TableCellBorder getTableBorderRight( CTTblPr tblPr ) + { + return TableBorderRightValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderRight( CTTblPrBase tblPr ) + { + return TableBorderRightValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderInsideH( XWPFTable table ) + { + return TableBorderInsideHValueProvider.INSTANCE.getValue( table, this ); + } + + public TableCellBorder getTableBorderInsideH( CTTblPr tblPr ) + { + return TableBorderInsideHValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderInsideH( CTTblPrBase tblPr ) + { + return TableBorderInsideHValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderInsideV( XWPFTable table ) + { + return TableBorderInsideVValueProvider.INSTANCE.getValue( table, this ); + } + + public TableCellBorder getTableBorderInsideV( CTTblPr tblPr ) + { + return TableBorderInsideVValueProvider.INSTANCE.getValue( tblPr ); + } + + public TableCellBorder getTableBorderInsideV( CTTblPrBase tblPr ) + { + return TableBorderInsideVValueProvider.INSTANCE.getValue( tblPr ); + } + + public Float getTableMarginTop( XWPFTable table ) + { + return TableMarginTopValueProvider.INSTANCE.getValue( table, this ); + } + + public Float getTableMarginTop( CTTblPrBase tcPr ) + { + return TableMarginTopValueProvider.INSTANCE.getValue( tcPr ); + } + + public Float getTableMarginBottom( XWPFTable table ) + { + return TableMarginBottomValueProvider.INSTANCE.getValue( table, this ); + } + + public Float getTableMarginBottom( CTTblPrBase tcPr ) + { + return TableMarginBottomValueProvider.INSTANCE.getValue( tcPr ); + } + + public Float getTableMarginLeft( XWPFTable table ) + { + return TableMarginLeftValueProvider.INSTANCE.getValue( table, this ); + } + + public Float getTableMarginLeft( CTTblPrBase tcPr ) + { + return TableMarginLeftValueProvider.INSTANCE.getValue( tcPr ); + } + + public Float getTableMarginRight( XWPFTable table ) + { + return TableMarginRightValueProvider.INSTANCE.getValue( table, this ); + } + + public Float getTableMarginRight( CTTblPrBase tcPr ) + { + return TableMarginRightValueProvider.INSTANCE.getValue( tcPr ); + } + + // ------------------------ Table row + + /** + * @param row + * @return + */ + public TableHeight getTableRowHeight( XWPFTableRow row ) + { + return TableRowHeightValueProvider.INSTANCE.getValue( row, this ); + } + + /** + * @param + * @return + */ + public TableHeight getTableRowHeight( CTTrPr trPr ) + { + return TableRowHeightValueProvider.INSTANCE.getValue( trPr ); + } + + public Float getTableRowMarginTop( XWPFTableRow row ) + { + return TableRowMarginTopValueProvider.INSTANCE.getValue( row, this ); + } + + public Float getTableRowMarginTop( CTTblPrEx tblPrEx ) + { + return TableRowMarginTopValueProvider.INSTANCE.getValue( tblPrEx ); + } + + public Float getTableRowMarginBottom( XWPFTableRow row ) + { + return TableRowMarginBottomValueProvider.INSTANCE.getValue( row, this ); + } + + public Float getTableRowMarginBottom( CTTblPrEx tblPrEx ) + { + return TableRowMarginBottomValueProvider.INSTANCE.getValue( tblPrEx ); + } + + public Float getTableRowMarginLeft( XWPFTableRow row ) + { + return TableRowMarginLeftValueProvider.INSTANCE.getValue( row, this ); + } + + public Float getTableRowMarginLeft( CTTblPrEx tblPrEx ) + { + return TableRowMarginLeftValueProvider.INSTANCE.getValue( tblPrEx ); + } + + public Float getTableRowMarginRight( XWPFTableRow row ) + { + return TableRowMarginRightValueProvider.INSTANCE.getValue( row, this ); + } + + public Float getTableRowMarginRight( CTTblPrEx tblPrEx ) + { + return TableRowMarginRightValueProvider.INSTANCE.getValue( tblPrEx ); + } + + public boolean isTableRowHeader( XWPFTableRow row ) + { + return TableRowHeaderValueProvider.INSTANCE.getValue( row, this ); + } + + public boolean isTableRowHeader( CTRow row ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.table.row.TableRowHeaderValueProvider.INSTANCE.getValue( row, + this ); + } + + // ------------------------ Table cell + + /** + * @param cell + * @return + */ + public Enum getTableCellVerticalAlignment( XWPFTableCell cell ) + { + return TableCellVerticalAlignmentValueProvider.INSTANCE.getValue( cell, this ); + } + + public Color getTableCellBackgroundColor( XWPFTableCell cell ) + { + return TableCellBackgroundColorValueProvider.INSTANCE.getValue( cell, this ); + } + + public Color getTableCellBackgroundColor( CTTcPr tcPr ) + { + return TableCellBackgroundColorValueProvider.INSTANCE.getValue( tcPr ); + } + + public Color getTableCellBackgroundColor( CTTc cell ) + { + return org.apache.poi.xwpf.converter.core.openxmlformats.styles.table.cell.TableCellBackgroundColorValueProvider.INSTANCE.getValue( cell, + this ); + } + + public BigInteger getTableCellGridSpan( XWPFTableCell cell ) + { + return TableCellGridSpanValueProvider.INSTANCE.getValue( cell, this ); + } + + public BigInteger getTableCellGridSpan( CTTcPr tcPr ) + { + return TableCellGridSpanValueProvider.INSTANCE.getValue( tcPr ); + } + + public TableWidth getTableCellWith( XWPFTableCell cell ) + { + return TableCellWidthValueProvider.INSTANCE.getValue( cell, this ); + } + + public TableWidth getTableCellWith( CTTcPr tcPr ) + { + return TableCellWidthValueProvider.INSTANCE.getValue( tcPr ); + } + + public CTTextDirection getTextDirection( XWPFTableCell cell ) + { + return TableCellTextDirectionValueProvider.INSTANCE.getValue( cell, this ); + } + + public CTTextDirection getTextDirection( CTTcPr tcPr ) + { + return TableCellTextDirectionValueProvider.INSTANCE.getValue( tcPr ); + } + + public STMerge.Enum getTableCellVMerge( XWPFTableCell cell ) + { + return TableCellVMergeValueProvider.INSTANCE.getValue( cell, this ); + } + + public STMerge.Enum getTableCellVMerge( CTTcPr tcPr ) + { + return TableCellVMergeValueProvider.INSTANCE.getValue( tcPr ); + } + + /** + * Returns the table cell borders with conflicts. + * + * @param cell + * @param borderSide + * @return + * http://officeopenxml.com/WPtableCellBorderConflicts.php + */ + public TableCellBorder getTableCellBorderWithConflicts( XWPFTableCell cell, BorderSide borderSide ) + { + /** + * Conflicts between cell borders and table and table-level exception borders If the cell spacing is zero, then + * there is a conflict. The following rules apply as between cell borders and table and table-level exception + * (row) borders (Reference: ECMA-376, 3rd Edition (June, 2011), Fundamentals and Markup Language Reference + * 17.4.40.): + */ + + /** + * 1) If there is a cell border, then the cell border is displayed. + */ + + /** + * 2) If there is no cell border but there is a table-level exception border on the row, then that table-level + * exception border is displayed. + */ + + TableCellBorder border = getTableCellBorder( cell, borderSide ); + if ( border == null ) + { + XWPFTable table = cell.getTableRow().getTable(); + boolean borderInside = isBorderInside( cell, borderSide ); + if ( borderInside ) + { + border = getTableCellBorderInside( cell, borderSide ); + if ( border == null ) + { + border = getTableBorderInside( table, borderSide ); + } + } + if ( border == null && !borderInside ) + { + /** + * 3) If there is no cell or table-level exception border, then the table border is displayed. + */ + border = getTableBorder( table, borderSide ); + } + } + return border; + } + + public boolean isBorderInside( XWPFTableCell cell, BorderSide borderSide ) + { + TableCellInfo cellInfo = getTableCellInfo( cell ); + boolean borderInside = cellInfo.isInside( borderSide ); + return borderInside; + } + + public TableCellBorder getTableBorder( XWPFTable table, BorderSide borderSide ) + { + switch ( borderSide ) + { + case TOP: + return getTableBorderTop( table ); + case BOTTOM: + return getTableBorderBottom( table ); + case LEFT: + return getTableBorderLeft( table ); + case RIGHT: + return getTableBorderRight( table ); + } + return null; + } + + public TableCellBorder getTableBorderInside( XWPFTable table, BorderSide borderSide ) + { + switch ( borderSide ) + { + case TOP: + case BOTTOM: + return getTableBorderInsideH( table ); + default: + return getTableBorderInsideV( table ); + } + } + + public TableCellBorder getTableCellBorderInside( XWPFTableCell cell, BorderSide borderSide ) + { + switch ( borderSide ) + { + case TOP: + case BOTTOM: + return getTableCellBorderInsideH( cell ); + default: + return getTableCellBorderInsideV( cell ); + } + } + + public TableCellBorder getTableCellBorder( XWPFTableCell cell, BorderSide borderSide ) + { + switch ( borderSide ) + { + case TOP: + return getTableCellBorderTop( cell ); + case BOTTOM: + return getTableCellBorderBottom( cell ); + case LEFT: + return getTableCellBorderLeft( cell ); + case RIGHT: + return getTableCellBorderRight( cell ); + } + return null; + } + + public TableCellBorder getTableCellBorderTop( XWPFTableCell cell ) + { + return TableCellBorderTopValueProvider.INSTANCE.getValue( cell, this ); + } + + public TableCellBorder getTableCellBorderTop( CTTcPr tcPr ) + { + return TableCellBorderTopValueProvider.INSTANCE.getValue( tcPr ); + } + + public TableCellBorder getTableCellBorderBottom( XWPFTableCell cell ) + { + return TableCellBorderBottomValueProvider.INSTANCE.getValue( cell, this ); + } + + public TableCellBorder getTableCellBorderBottom( CTTcPr tcPr ) + { + return TableCellBorderBottomValueProvider.INSTANCE.getValue( tcPr ); + } + + public TableCellBorder getTableCellBorderLeft( XWPFTableCell cell ) + { + return TableCellBorderLeftValueProvider.INSTANCE.getValue( cell, this ); + } + + public TableCellBorder getTableCellBorderLeft( CTTcPr tcPr ) + { + return TableCellBorderLeftValueProvider.INSTANCE.getValue( tcPr ); + } + + public TableCellBorder getTableCellBorderRight( XWPFTableCell cell ) + { + return TableCellBorderRightValueProvider.INSTANCE.getValue( cell, this ); + } + + public TableCellBorder getTableCellBorderRight( CTTcPr tcPr ) + { + return TableCellBorderRightValueProvider.INSTANCE.getValue( tcPr ); + } + + public TableCellBorder getTableCellBorderInsideH( XWPFTableCell cell ) + { + return TableCellBorderInsideHValueProvider.INSTANCE.getValue( cell, this ); + } + + public TableCellBorder getTableCellBorderInsideH( CTTcPr tcPr ) + { + return TableCellBorderInsideHValueProvider.INSTANCE.getValue( tcPr ); + } + + public TableCellBorder getTableCellBorderInsideV( XWPFTableCell cell ) + { + return TableCellBorderInsideVValueProvider.INSTANCE.getValue( cell, this ); + } + + public TableCellBorder getTableCellBorderInsideV( CTTcPr tcPr ) + { + return TableCellBorderInsideVValueProvider.INSTANCE.getValue( tcPr ); + } + + public Float getTableCellMarginTop( XWPFTableCell cell ) + { + return TableCellMarginTopValueProvider.INSTANCE.getValue( cell, this ); + } + + public Float getTableCellMarginTop( CTTcPr tcPr ) + { + return TableCellMarginTopValueProvider.INSTANCE.getValue( tcPr ); + } + + public Float getTableCellMarginBottom( XWPFTableCell cell ) + { + return TableCellMarginBottomValueProvider.INSTANCE.getValue( cell, this ); + } + + public Float getTableCellMarginBottom( CTTcPr tcPr ) + { + return TableCellMarginBottomValueProvider.INSTANCE.getValue( tcPr ); + } + + public Float getTableCellMarginLeft( XWPFTableCell cell ) + { + return TableCellMarginLeftValueProvider.INSTANCE.getValue( cell, this ); + } + + public Float getTableCellMarginLeft( CTTcPr tcPr ) + { + return TableCellMarginLeftValueProvider.INSTANCE.getValue( tcPr ); + } + + public Float getTableCellMarginRight( XWPFTableCell cell ) + { + return TableCellMarginRightValueProvider.INSTANCE.getValue( cell, this ); + } + + public Float getTableCellMarginRight( CTTcPr tcPr ) + { + return TableCellMarginRightValueProvider.INSTANCE.getValue( tcPr ); + } + + public Boolean getTableCellNoWrap( XWPFTableCell cell ) + { + return TableCellNoWrapValueProvider.INSTANCE.getValue( cell, this ); + } + + public Boolean getTableCellNoWrap( CTTcPr tcPr ) + { + return TableCellNoWrapValueProvider.INSTANCE.getValue( tcPr ); + } + + public CTStyle getDefaultCharacterStyle() + { + return defaultCharacterStyle; + } + + public CTStyle getDefaultNumberingStyle() + { + return defaultNumberingStyle; + } + + public CTStyle getDefaultTableStyle() + { + return defaultTableStyle; + } + + public CTStyle getStyle( CTString basedOn ) + { + if ( basedOn == null ) + { + return null; + } + return getStyle( basedOn.getVal() ); + } + + public T getValue( String key ) + { + return (T) values.get( key ); + } + + public void setValue( String key, T value ) + { + values.put( key, value ); + } + + public TableCellInfo getTableCellInfo( XWPFTableCell cell ) + { + XWPFTable table = cell.getTableRow().getTable(); + return getTableInfo( table ).getCellInfo( cell ); + } + + public TableInfo getTableInfo( XWPFTable table ) + { + if ( tableInfos == null ) + { + tableInfos = new HashMap(); + } + TableInfo tableInfo = tableInfos.get( table ); + if ( tableInfo == null ) + { + tableInfo = new TableInfo( table, this ); + tableInfos.put( table, tableInfo ); + } + return tableInfo; + } + + public CTTblStylePr getTableStyle( String tableStyleID, + org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblStyleOverrideType.Enum type ) + { + CTStyle style = getStyle( tableStyleID ); + if ( style == null ) + { + return null; + } + // TODO cache it + List tblStylePrs = style.getTblStylePrList(); + for ( CTTblStylePr tblStylePr : tblStylePrs ) + { + if ( type.equals( tblStylePr.getType() ) ) + { + return tblStylePr; + } + } + return null; + } + + /** + * 17.15.1.25 defaultTabStop (Distance Between Automatic Tab Stops) This element specifies the value which shall be + * used as the multiplier to generate automatic tab stops in this document. Automatic tab stops refer to the tab + * stop locations which occur after all custom tab stops in the current paragraph have been surpassed. If this + * element is omitted, then automatic tab stops should be generated at 720 twentieths of a point (0.5") intervals + * across the displayed page. [Example: Consider a WordprocessingML document + * + * @return + */ + public float getDefaultTabStop() + { + if ( defaultTabStop == null ) + { + CTSettings settings = getCTSettings(); + if ( settings != null ) + { + CTTwipsMeasure value = settings.getDefaultTabStop(); + if ( value != null ) + { + if ( !value.isNil() ) + { + this.defaultTabStop = DxaUtil.dxa2points( value.getVal() ); + } + + } + } + if ( defaultTabStop == null ) + { + this.defaultTabStop = DEFAULT_TAB_STOP_POINT; + } + } + return defaultTabStop; + } + + public CTSettings getCTSettings() + { + return ctSettings; + } + + private static CTSettings getCTSettings( XWPFDocument document ) + { + + XWPFSettings settings = getSettings( document ); + if ( settings != null ) + { + try + { + InputStream inputStream = settings.getPackagePart().getInputStream(); + return SettingsDocument.Factory.parse( inputStream ).getSettings(); + } + catch ( Exception e ) + { + + } + } + return null; + } + + private static XWPFSettings getSettings( XWPFDocument document ) + { + for ( POIXMLDocumentPart p : document.getRelations() ) + { + String relationshipType = p.getPackagePart().getPackage().getRelationships().getRelationship(0).getRelationshipType(); + if ( relationshipType.equals( XWPFRelation.SETTINGS.getRelation() ) ) + { + return (XWPFSettings) p; + } + } + return null; + } + + public List getThemeDocuments() + { + return themeDocuments; + } + + private static List getThemeDocuments( XWPFDocument document ) + { + List themeDocuments = new ArrayList(); + + for ( POIXMLDocumentPart p : document.getRelations() ) + { + String relationshipType = p.getPackagePart().getPackage().getRelationships().getRelationship(0).getRelationshipType(); + if ( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme".equals( relationshipType ) ) + { + try + { + InputStream inputStream = p.getPackagePart().getInputStream(); + ThemeDocument theme = ThemeDocument.Factory.parse( inputStream ); + themeDocuments.add( theme ); + } + catch ( Throwable e ) + { + e.printStackTrace(); + } + } + } + + return themeDocuments; + } + + private static List getFontsDocument( XWPFDocument document ) + { + + List fontsDocuments = new ArrayList(); + + for ( POIXMLDocumentPart p : document.getRelations() ) + { + String relationshipType = p.getPackagePart().getPackage().getRelationships().getRelationship(0).getRelationshipType(); + // "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" + if ( XWPFRelation.FONT_TABLE.getRelation().equals( relationshipType ) ) + { + try + { + InputStream inputStream = p.getPackagePart().getInputStream(); + FontsDocument fontsDocument = FontsDocument.Factory.parse( inputStream ); + fontsDocuments.add( fontsDocument ); + } + catch ( Exception e ) + { + e.printStackTrace(); + } + + } + } + return fontsDocuments; + } + + public List getFontsAltName( String fontName ) + throws Exception + { + return fontsAltName.get( fontName ); + } + + public String getFontNameToUse( String fontName ) + { + return fontsToUse.get( fontName ); + } + + public void setFontNameToUse( String fontName, String altFfontName ) + { + fontsToUse.put( fontName, altFfontName ); + } + +}