From c5f6dfa68e04c5a42b64b3f862756b9c990665dc Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Sat, 12 Dec 2020 23:15:20 +0000 Subject: [PATCH] Bug 56205 - Upgrade OOXML schema to 3rd edition (transitional) git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1884368 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 4 +- src/java/org/apache/poi/util/Units.java | 38 +- .../ooxml-lite/java9/module-info.class | Bin 1528 -> 1599 bytes .../ooxml-lite/java9/module-info.java | 1 + .../apache/poi/ooxml/util/POIXMLUnits.java | 265 +++++ .../poi/poifs/crypt/dsig/SignatureLine.java | 2 +- .../poi/xddf/usermodel/XDDFColorHsl.java | 5 +- .../poi/xddf/usermodel/XDDFColorPreset.java | 7 +- .../xddf/usermodel/XDDFColorRgbPercent.java | 33 +- .../poi/xddf/usermodel/XDDFDashStop.java | 5 +- .../poi/xddf/usermodel/XDDFGradientStop.java | 3 +- .../XDDFLineJoinMiterProperties.java | 3 +- .../poi/xddf/usermodel/XDDFPoint2D.java | 5 +- .../xddf/usermodel/XDDFRelativeRectangle.java | 11 +- .../usermodel/XDDFTileInfoProperties.java | 9 +- .../usermodel/chart/XDDFArea3DChartData.java | 7 +- .../usermodel/chart/XDDFBar3DChartData.java | 13 +- .../usermodel/chart/XDDFBarChartData.java | 13 +- .../usermodel/chart/XDDFLine3DChartData.java | 7 +- .../poi/xddf/usermodel/chart/XDDFView3D.java | 13 +- .../usermodel/text/XDDFBodyProperties.java | 9 +- .../usermodel/text/XDDFBulletSizePercent.java | 5 +- .../poi/xddf/usermodel/text/XDDFFont.java | 10 +- .../usermodel/text/XDDFNormalAutoFit.java | 5 +- .../usermodel/text/XDDFSpacingPercent.java | 3 +- .../poi/xddf/usermodel/text/XDDFTabStop.java | 3 +- .../usermodel/text/XDDFTextParagraph.java | 5 +- .../poi/xddf/usermodel/text/XDDFTextRun.java | 13 +- .../apache/poi/xslf/usermodel/XSLFColor.java | 24 +- .../poi/xslf/usermodel/XSLFComment.java | 5 +- .../poi/xslf/usermodel/XSLFFreeformShape.java | 8 +- .../poi/xslf/usermodel/XSLFGradientPaint.java | 14 +- .../poi/xslf/usermodel/XSLFGraphicFrame.java | 5 +- .../poi/xslf/usermodel/XSLFGroupShape.java | 35 +- .../poi/xslf/usermodel/XSLFPictureShape.java | 8 +- .../poi/xslf/usermodel/XSLFSimpleShape.java | 6 +- .../poi/xslf/usermodel/XSLFTabStop.java | 9 +- .../apache/poi/xslf/usermodel/XSLFTable.java | 15 +- .../poi/xslf/usermodel/XSLFTableRow.java | 4 +- .../poi/xslf/usermodel/XSLFTextParagraph.java | 13 +- .../poi/xslf/usermodel/XSLFTextRun.java | 19 +- .../poi/xslf/usermodel/XSLFTextShape.java | 13 +- .../poi/xslf/usermodel/XSLFTexturePaint.java | 24 +- .../poi/xssf/extractor/XSSFImportFromXML.java | 27 +- .../poi/xssf/usermodel/XSSFClientAnchor.java | 57 +- .../apache/poi/xssf/usermodel/XSSFFont.java | 7 +- .../xssf/usermodel/XSSFFontFormatting.java | 2 +- .../xssf/usermodel/XSSFRichTextString.java | 11 +- .../poi/xssf/usermodel/XSSFSignatureLine.java | 5 +- .../poi/xssf/usermodel/XSSFTextParagraph.java | 85 +- .../poi/xssf/usermodel/XSSFTextRun.java | 18 +- .../poi/xssf/usermodel/XSSFVMLDrawing.java | 2 +- .../usermodel/helpers/XSSFSingleXmlCell.java | 39 +- .../usermodel/helpers/XSSFXmlColumnPr.java | 9 +- .../org/apache/poi/xwpf/model/WMLHelper.java | 33 - .../xwpf/model/XWPFHeaderFooterPolicy.java | 33 +- .../xwpf/usermodel/ParagraphAlignment.java | 27 +- .../org/apache/poi/xwpf/usermodel/TOC.java | 6 +- .../usermodel/XWPFDefaultParagraphStyle.java | 14 +- .../xwpf/usermodel/XWPFDefaultRunStyle.java | 14 +- .../poi/xwpf/usermodel/XWPFDocument.java | 27 +- .../poi/xwpf/usermodel/XWPFParagraph.java | 80 +- .../apache/poi/xwpf/usermodel/XWPFRun.java | 66 +- .../poi/xwpf/usermodel/XWPFSettings.java | 55 +- .../apache/poi/xwpf/usermodel/XWPFTable.java | 18 +- .../poi/xwpf/usermodel/XWPFTableCell.java | 12 +- .../poi/xwpf/usermodel/XWPFTableRow.java | 18 +- .../OfficeOpenXML-XMLSchema-Transitional.zip | Bin 0 -> 99115 bytes .../poi/schemas/OfficeOpenXML-XMLSchema.zip | Bin 222730 -> 0 bytes .../OpenPackagingConventions-XMLSchema.zip | Bin 3349 -> 3037 bytes .../opc/internal/TestContentTypeManager.java | 17 +- .../poi/xddf/usermodel/TestXDDFColor.java | 3 + .../poi/xssf/usermodel/TestXSSFFont.java | 9 +- .../usermodel/TestXSSFRichTextString.java | 2 +- .../xssf/usermodel/TestXSSFVMLDrawing.java | 4 +- .../usermodel/charts/TestXSSF3DChartData.java | 112 ++ .../poi/xwpf/usermodel/TestXWPFParagraph.java | 22 +- .../poi/xwpf/usermodel/TestXWPFRun.java | 106 +- .../poi/xwpf/usermodel/TestXWPFTable.java | 968 ++++++++---------- 79 files changed, 1440 insertions(+), 1167 deletions(-) create mode 100644 src/ooxml/java/org/apache/poi/ooxml/util/POIXMLUnits.java delete mode 100644 src/ooxml/java/org/apache/poi/xwpf/model/WMLHelper.java create mode 100644 src/ooxml/resources/org/apache/poi/schemas/OfficeOpenXML-XMLSchema-Transitional.zip delete mode 100644 src/ooxml/resources/org/apache/poi/schemas/OfficeOpenXML-XMLSchema.zip create mode 100644 src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSF3DChartData.java diff --git a/build.xml b/build.xml index cedd489825..d7d5ae12cb 100644 --- a/build.xml +++ b/build.xml @@ -326,13 +326,13 @@ under the License. - + - + diff --git a/src/java/org/apache/poi/util/Units.java b/src/java/org/apache/poi/util/Units.java index 599e443f63..1aad77db8b 100644 --- a/src/java/org/apache/poi/util/Units.java +++ b/src/java/org/apache/poi/util/Units.java @@ -29,11 +29,17 @@ public class Units { public static final int EMU_PER_POINT = 12700; public static final int EMU_PER_CENTIMETER = 360000; + /** 72 points per inch (dpi) */ + public static final int EMU_PER_INCH = 12700*72; + + /** EMU_PER_POINT/20 */ + public static final int EMU_PER_DXA = 635; + /** * Master DPI (576 pixels per inch). * Used by the reference coordinate system in PowerPoint (HSLF) */ - public static final int MASTER_DPI = 576; + public static final int MASTER_DPI = 576; /** * Pixels DPI (96 pixels per inch) @@ -43,7 +49,7 @@ public class Units { /** * Points DPI (72 pixels per inch) */ - public static final int POINT_DPI = 72; + public static final int POINT_DPI = 72; /** @@ -59,7 +65,7 @@ public class Units { /** * Column widths are in fractional characters, this is the EMU equivalent. - * One character is defined as the widest value for the integers 0-9 in the + * One character is defined as the widest value for the integers 0-9 in the * default font. */ public static final int EMU_PER_CHARACTER = (int) (EMU_PER_PIXEL * DEFAULT_CHARACTER_WIDTH); @@ -72,7 +78,7 @@ public class Units { public static int toEMU(double points){ return (int)Math.rint(EMU_PER_POINT*points); } - + /** * Converts pixels to EMUs * @param pixels pixels @@ -88,15 +94,15 @@ public class Units { * @return points */ public static double toPoints(long emu){ - return (double)emu/EMU_PER_POINT; + return (emu == -1) ? -1.d : (double)emu/EMU_PER_POINT; } - + /** * Converts a value of type FixedPoint to a floating point * * @param fixedPoint value in fixed point notation * @return floating point (double) - * + * * @see [MS-OSHARED] - 2.2.1.6 FixedPoint */ public static double fixedPointToDouble(int fixedPoint) { @@ -104,13 +110,13 @@ public class Units { int f = fixedPoint & 0xFFFF; return (i + f/65536d); } - + /** * Converts a value of type floating point to a FixedPoint * * @param floatPoint value in floating point notation * @return fixedPoint value in fixed points notation - * + * * @see [MS-OSHARED] - 2.2.1.6 FixedPoint */ public static int doubleToFixedPoint(double floatPoint) { @@ -133,7 +139,7 @@ public class Units { points /= POINT_DPI; return (int)Math.rint(points); } - + public static int pointsToPixel(double points) { points *= PIXEL_DPI; points /= POINT_DPI; @@ -178,7 +184,7 @@ public class Units { public static int charactersToEMU(double characters) { return (int) characters * EMU_PER_CHARACTER; } - + /** * @param columnWidth specified in 256ths of a standard character * @return equivalent EMUs @@ -186,12 +192,8 @@ public class Units { public static int columnWidthToEMU(int columnWidth) { return charactersToEMU(columnWidth / 256d); } - - /** - * @param twips (1/20th of a point) typically used for row heights - * @return equivalent EMUs - */ - public static int TwipsToEMU(short twips) { - return (int) (twips / 20d * EMU_PER_POINT); + + public static double toDXA(long emu) { + return (emu == -1) ? -1.d : (double)emu/EMU_PER_DXA; } } diff --git a/src/multimodule/ooxml-lite/java9/module-info.class b/src/multimodule/ooxml-lite/java9/module-info.class index 8cc8de8e16230c6b9a81cb76673c4ab07b96850b..f6cd8ef67d2023bba092608b3a473ea0ae09b04c 100644 GIT binary patch delta 611 zcmX|;KTjJ$5XIm44jb$PV&7sg1{+BDk2%``6GDhkQX?7)+KYXLLl^^x5vjr_Ksxpd z&>=-iq@+xdh$2lsMM}z)hyrCigfzdI_vY>FN_(65VNL$J|MnfgB3{K1AtV~jT5HcM z`1|!HA-XQgMn~Anr)eqiL&i1grqd~UwgrfcunN3u8+@oWKQG(Of@rV6S31yK7 ze)YI@#P1o`pCfC$U{aTioVJW{?x(qb%gbg7uQ{F78%CeLGJ4o55Z?T^Zj2PC9o~?W zNWtvpNQtoW7)b{F46nBN{=f?qo)Z>ivSnuY;G#Y>D|}#yP!ap5nPq!f|29{-uIS;8 znGXhk(N~xl;c6gy#s!_C;_Vg#u%z|~p9oVzB}@wkgoDB%VNN(A91}hhP6(%jGr$XO V=0wa3i^8&SL0A#CbHGcX;4iEPY4!jB delta 586 zcmX}pNlqJ45C-7?`E_H1F*tM?V+;N8@kq!K};_sckeRY9|>zP!zDB6 zhv&6WX0tLV^ah+UNzR+RyT z1J^k=C_N9NO;>LjRA2I8y>@)k3Hc_nDGxWF=WJ~1DVO<^P4bT2lDsYZGT++~xzF*X zO>xdkaNApx-Lk&@=Z#6f+UvjjS + * sample snippet from settings.xml + *
+     *    <w:zoom w:percent="50" />
+     * 
+     *
+     * @return the percent scaled by 1000, so 100% = 100000
+     */
+    public static int parsePercent(org.openxmlformats.schemas.wordprocessingml.x2006.main.STDecimalNumberOrPercent pctUnion) {
+        return parsePercentInner(pctUnion, 1000);
+    }
+
+    /**
+     * This type seems to be interpreted as percent value when the trailing percent sign is missing.
+ * sample snippet from settings.xml + *
+     *    <w:textscale w:w="50" />
+     * 
+     *
+     * @return the percent scaled by 1000, so 100% = 100000
+     */
+    public static int parsePercent(org.openxmlformats.schemas.wordprocessingml.x2006.main.STTextScale pctUnion) {
+        return parsePercentInner(pctUnion, 1000);
+    }
+
+
+    public static int parsePercent(org.openxmlformats.schemas.drawingml.x2006.chart.STGapAmount pctUnion) {
+        return parsePercentInner(pctUnion, 1000);
+    }
+
+
+    public static int parsePercent(org.openxmlformats.schemas.drawingml.x2006.chart.STOverlap  pctUnion) {
+        return parsePercentInner(pctUnion, 1000);
+    }
+
+
+    public static int parsePercent(org.openxmlformats.schemas.drawingml.x2006.chart.STDepthPercent pctUnion) {
+        return parsePercentInner(pctUnion, 1000);
+    }
+
+
+    public static int parsePercent(org.openxmlformats.schemas.drawingml.x2006.chart.STHPercent pctUnion) {
+        return parsePercentInner(pctUnion, 1000);
+    }
+
+
+    private static int parsePercentInner(org.apache.xmlbeans.XmlAnySimpleType pctUnion, int noUnitScale) {
+        String strVal = pctUnion.getStringValue();
+        if (strVal.endsWith("%")) {
+            return Integer.parseInt(strVal.substring(0, strVal.length()-1)) * 1000;
+        } else {
+            return Integer.parseInt(strVal) * noUnitScale;
+        }
+    }
+
+    /**
+     * The standard states that ST_Coordinate32 is read and written as either a length
+     * followed by a unit, or EMUs with no unit present.
+     *
+     * @return length in EMUs
+     */
+    public static long parseLength(org.openxmlformats.schemas.drawingml.x2006.main.STCoordinate32 coordUnion) {
+        return parseLengthInner(coordUnion, 1d);
+    }
+
+    /**
+     * The standard states that ST_Coordinate is read and written as either a length
+     * followed by a unit, or EMUs with no unit present.
+     *
+     * @return length in EMUs
+     */
+    public static long parseLength(org.openxmlformats.schemas.drawingml.x2006.main.STCoordinate coordUnion) {
+        return parseLengthInner(coordUnion, 1d);
+    }
+
+    /**
+     * The standard states that ST_TextPoint is read and written as a length followed by a unit
+     * or as hundredths of a point with no unit present.
+     *
+     * @return length in EMUs
+     */
+    public static long parseLength(org.openxmlformats.schemas.drawingml.x2006.main.STTextPoint coordUnion) {
+        return parseLengthInner(coordUnion, EMU_PER_POINT/100d);
+    }
+
+    /**
+     * If no unit is specified, a twips-measure is a twentieth of a point
+     *
+     * @return length in EMUs
+     */
+    public static long parseLength(org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STTwipsMeasure coordUnion) {
+        return parseLengthInner(coordUnion, EMU_PER_DXA);
+    }
+
+    /**
+     * If no unit is specified, a twips-measure is a twentieth of a point
+     *
+     * @return length in EMUs
+     */
+    public static long parseLength(org.openxmlformats.schemas.wordprocessingml.x2006.main.STSignedTwipsMeasure coordUnion) {
+        return parseLengthInner(coordUnion, EMU_PER_DXA);
+    }
+
+    /**
+     * If no unit is specified, a hps-measure is a half of a point
+     *
+     * @return length in EMUs
+     */
+    public static long parseLength(org.openxmlformats.schemas.wordprocessingml.x2006.main.STHpsMeasure coordUnion) {
+        return parseLengthInner(coordUnion, EMU_PER_POINT*2d);
+    }
+
+
+    /**
+     * If no unit is specified, a hps-measure is a half of a point
+     *
+     * @return length in EMUs
+     */
+    public static long parseLength(org.openxmlformats.schemas.wordprocessingml.x2006.main.STSignedHpsMeasure coordUnion) {
+        return parseLengthInner(coordUnion, EMU_PER_POINT*2d);
+    }
+
+
+    /**
+     * If not unit is specified, DXA (twentieth of a point) is assumed
+     *
+     * @return length in EMUs
+     */
+    public static long parseLength(org.openxmlformats.schemas.wordprocessingml.x2006.main.STMeasurementOrPercent coordUnion) {
+        if (coordUnion.getStringValue().endsWith("%")) return -1;
+        return parseLengthInner(coordUnion, EMU_PER_DXA);
+    }
+
+
+    /**
+     * Returns the EMUs for the given measurment (mm|cm|in|pt|pc|pi, defaults to EMUs*noUnitEmuFactor if not specified)
+     *
+     * @param coordUnion the raw type
+     * @return the EMUs for the given attribute
+     */
+    private static long parseLengthInner(org.apache.xmlbeans.XmlAnySimpleType coordUnion, double noUnitEmuFactor) {
+        String strVal = coordUnion.getStringValue().toLowerCase(Locale.ROOT);
+        double digVal = Double.parseDouble(strVal.replaceAll("(mm|cm|in|pt|pc|pi)", ""));
+        long emu = 0;
+        // http://startbigthinksmall.wordpress.com/2010/01/04/points-inches-and-emus-measuring-units-in-office-open-xml/
+        if (strVal.endsWith("mm")) {
+            emu = (long)(((digVal/10f)/2.54f)*EMU_PER_INCH);
+        } else if (strVal.endsWith("cm")) {
+            emu = (long)((digVal/2.54f)*EMU_PER_INCH);
+        } else if (strVal.endsWith("in")) {
+            emu = (long)(digVal*EMU_PER_INCH);
+        } else if (strVal.endsWith("pc") || strVal.endsWith("pi")) {
+            emu = (long)(digVal*0.166f*EMU_PER_INCH);
+        } else if (strVal.endsWith("pt")) {
+            emu = (long)(digVal*EMU_PER_POINT);
+        } else {
+            emu = (long)(digVal*noUnitEmuFactor);
+        }
+        return emu;
+    }
+
+
+
+    public static boolean parseOnOff(org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff onOff) {
+        if(onOff == null) return false;
+        if(!onOff.isSetVal()) return true;
+        return parseOnOff(onOff.xgetVal());
+    }
+
+    public static boolean parseOnOff(org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff onOff) {
+        if (onOff == null) return false;
+        String str = onOff.getStringValue();
+        return ("true".equalsIgnoreCase(str) || "on".equalsIgnoreCase(str) || "x".equalsIgnoreCase(str) || "1".equals(str));
+    }
+
+}
diff --git a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureLine.java b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureLine.java
index 075ac95a6a..c6dcde6d74 100644
--- a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureLine.java
+++ b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureLine.java
@@ -42,7 +42,6 @@ import javax.imageio.ImageIO;
 import javax.xml.namespace.QName;
 
 import com.microsoft.schemas.office.office.CTSignatureLine;
-import com.microsoft.schemas.office.office.STTrueFalse;
 import com.microsoft.schemas.vml.CTGroup;
 import com.microsoft.schemas.vml.CTImageData;
 import com.microsoft.schemas.vml.CTShape;
@@ -56,6 +55,7 @@ import org.apache.poi.sl.draw.DrawPictureShape;
 import org.apache.poi.sl.draw.ImageRenderer;
 import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlObject;
+import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STTrueFalse;
 
 /**
  * Base class for SignatureLines (XSSF,XWPF only)
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorHsl.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorHsl.java
index a25296de83..3eea2d6279 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorHsl.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorHsl.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.apache.xmlbeans.XmlObject;
@@ -60,7 +61,7 @@ public class XDDFColorHsl extends XDDFColor {
     }
 
     public int getSaturation() {
-        return color.getSat2();
+        return POIXMLUnits.parsePercent(color.xgetSat2()) / 1000;
     }
 
     public void setSaturation(int saturation) {
@@ -68,7 +69,7 @@ public class XDDFColorHsl extends XDDFColor {
     }
 
     public int getLuminance() {
-        return color.getLum2();
+        return POIXMLUnits.parsePercent(color.xgetLum2()) / 1000;
     }
 
     public void setLuminance(int lightness) {
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorPreset.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorPreset.java
index 9b477f8ba0..5ec7d07e1e 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorPreset.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorPreset.java
@@ -50,7 +50,7 @@ public class XDDFColorPreset extends XDDFColor {
     }
 
     public PresetColor getValue() {
-        if (color.isSetVal()) {
+        if (color.xgetVal() != null) {
             return PresetColor.valueOf(color.getVal());
         } else {
             return null;
@@ -59,8 +59,9 @@ public class XDDFColorPreset extends XDDFColor {
 
     public void setValue(PresetColor value) {
         if (value == null) {
-            if (color.isSetVal()) {
-                color.unsetVal();
+            if (color.xgetVal() != null) {
+                // TODO: val is a requires attribute - removing a preset must be done in the parent container
+                color.setVal(PresetColor.WHITE.underlying);
             }
         } else {
             color.setVal(value.underlying);
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorRgbPercent.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorRgbPercent.java
index a7eefebfc1..4e0563e1a8 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorRgbPercent.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFColorRgbPercent.java
@@ -19,15 +19,17 @@ package org.apache.poi.xddf.usermodel;
 
 import java.util.Locale;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.apache.xmlbeans.XmlObject;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTColor;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTScRgbColor;
+import org.openxmlformats.schemas.drawingml.x2006.main.STPercentage;
 
 @Beta
 public class XDDFColorRgbPercent extends XDDFColor {
-    private CTScRgbColor color;
+    private final CTScRgbColor color;
 
     public XDDFColorRgbPercent(int red, int green, int blue) {
         this(CTScRgbColor.Factory.newInstance(), CTColor.Factory.newInstance());
@@ -54,7 +56,7 @@ public class XDDFColorRgbPercent extends XDDFColor {
     }
 
     public int getRed() {
-        return color.getR();
+        return POIXMLUnits.parsePercent(color.xgetR());
     }
 
     public void setRed(int red) {
@@ -62,7 +64,7 @@ public class XDDFColorRgbPercent extends XDDFColor {
     }
 
     public int getGreen() {
-        return color.getG();
+        return POIXMLUnits.parsePercent(color.xgetG());
     }
 
     public void setGreen(int green) {
@@ -70,7 +72,7 @@ public class XDDFColorRgbPercent extends XDDFColor {
     }
 
     public int getBlue() {
-        return color.getB();
+        return POIXMLUnits.parsePercent(color.xgetB());
     }
 
     public void setBlue(int blue) {
@@ -78,25 +80,14 @@ public class XDDFColorRgbPercent extends XDDFColor {
     }
 
     private int normalize(int value) {
-        if (value < 0) {
-            return 0;
-        }
-        if (100_000 < value) {
-            return 100_000;
-        }
-        return value;
+        return value < 0 ? 0 : Math.min(100_000, value);
     }
 
     public String toRGBHex() {
-        StringBuilder sb = new StringBuilder(6);
-        appendHex(sb, color.getR());
-        appendHex(sb, color.getG());
-        appendHex(sb, color.getB());
-        return sb.toString().toUpperCase(Locale.ROOT);
-    }
-
-    private void appendHex(StringBuilder sb, int value) {
-        int b = value * 255 / 100_000;
-        sb.append(String.format(Locale.ROOT, "%02X", b));
+        int c = 0;
+        for (STPercentage pct : new STPercentage[] { color.xgetR(), color.xgetG(), color.xgetB() }) {
+            c = c << 8 | ((POIXMLUnits.parsePercent(pct) * 255 / 100_000) & 0xFF);
+        }
+        return String.format(Locale.ROOT, "%06X", c);
     }
 }
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFDashStop.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFDashStop.java
index 7735665eaf..d79c245dbe 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFDashStop.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFDashStop.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTDashStop;
@@ -36,7 +37,7 @@ public class XDDFDashStop {
     }
 
     public int getDashLength() {
-        return stop.getD();
+        return POIXMLUnits.parsePercent(stop.xgetD());
     }
 
     public void setDashLength(int length) {
@@ -44,7 +45,7 @@ public class XDDFDashStop {
     }
 
     public int getSpaceLength() {
-        return stop.getSp();
+        return POIXMLUnits.parsePercent(stop.xgetSp());
     }
 
     public void setSpaceLength(int length) {
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFGradientStop.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFGradientStop.java
index 7d647dc043..ba7c088ed4 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFGradientStop.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFGradientStop.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTGradientStop;
@@ -42,7 +43,7 @@ public class XDDFGradientStop {
     }
 
     public int getPosition() {
-        return stop.getPos();
+        return POIXMLUnits.parsePercent(stop.xgetPos());
     }
 
     public void setPosition(int position) {
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFLineJoinMiterProperties.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFLineJoinMiterProperties.java
index 3abddeaa75..3317e1c6a1 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFLineJoinMiterProperties.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFLineJoinMiterProperties.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTLineJoinMiterProperties;
@@ -40,7 +41,7 @@ public class XDDFLineJoinMiterProperties implements XDDFLineJoinProperties {
 
     public Integer getLimit() {
         if (join.isSetLim()) {
-            return join.getLim();
+            return POIXMLUnits.parsePercent(join.xgetLim());
         } else {
             return null;
         }
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFPoint2D.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFPoint2D.java
index e01aec9064..cdd4a03f85 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFPoint2D.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFPoint2D.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D;
 
@@ -39,7 +40,7 @@ public class XDDFPoint2D {
         if (point == null) {
             return x;
         } else  {
-            return point.getX();
+            return POIXMLUnits.parseLength(point.xgetX());
         }
     }
 
@@ -47,7 +48,7 @@ public class XDDFPoint2D {
         if (point == null) {
             return y;
         } else  {
-            return point.getY();
+            return POIXMLUnits.parseLength(point.xgetY());
         }
     }
 }
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFRelativeRectangle.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFRelativeRectangle.java
index 582b9623fa..44d19bfd0a 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFRelativeRectangle.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFRelativeRectangle.java
@@ -17,13 +17,14 @@
 
 package org.apache.poi.xddf.usermodel;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTRelativeRect;
 
 @Beta
 public class XDDFRelativeRectangle {
-    private CTRelativeRect rect;
+    private final CTRelativeRect rect;
 
     public XDDFRelativeRectangle() {
         this(CTRelativeRect.Factory.newInstance());
@@ -40,7 +41,7 @@ public class XDDFRelativeRectangle {
 
     public Integer getBottom() {
         if (rect.isSetB()) {
-            return rect.getB();
+            return POIXMLUnits.parsePercent(rect.xgetB());
         } else {
             return null;
         }
@@ -58,7 +59,7 @@ public class XDDFRelativeRectangle {
 
     public Integer getLeft() {
         if (rect.isSetL()) {
-            return rect.getL();
+            return POIXMLUnits.parsePercent(rect.xgetL());
         } else {
             return null;
         }
@@ -76,7 +77,7 @@ public class XDDFRelativeRectangle {
 
     public Integer getRight() {
         if (rect.isSetR()) {
-            return rect.getR();
+            return POIXMLUnits.parsePercent(rect.xgetR());
         } else {
             return null;
         }
@@ -94,7 +95,7 @@ public class XDDFRelativeRectangle {
 
     public Integer getTop() {
         if (rect.isSetT()) {
-            return rect.getT();
+            return POIXMLUnits.parsePercent(rect.xgetT());
         } else {
             return null;
         }
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFTileInfoProperties.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFTileInfoProperties.java
index 63bb9f2b65..59542330d1 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFTileInfoProperties.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/XDDFTileInfoProperties.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTileInfoProperties;
@@ -64,7 +65,7 @@ public class XDDFTileInfoProperties {
 
     public Integer getSx() {
         if (props.isSetSx()) {
-            return props.getSx();
+            return POIXMLUnits.parsePercent(props.xgetSx());
         } else {
             return null;
         }
@@ -82,7 +83,7 @@ public class XDDFTileInfoProperties {
 
     public Integer getSy() {
         if (props.isSetSy()) {
-            return props.getSy();
+            return POIXMLUnits.parsePercent(props.xgetSy());
         } else {
             return null;
         }
@@ -100,7 +101,7 @@ public class XDDFTileInfoProperties {
 
     public Long getTx() {
         if (props.isSetTx()) {
-            return props.getTx();
+            return POIXMLUnits.parseLength(props.xgetTx());
         } else {
             return null;
         }
@@ -118,7 +119,7 @@ public class XDDFTileInfoProperties {
 
     public Long getTy() {
         if (props.isSetTy()) {
-            return props.getTy();
+            return POIXMLUnits.parseLength(props.xgetTy());
         } else {
             return null;
         }
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java
index 1c132a2830..c94cb32381 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFArea3DChartData.java
@@ -19,6 +19,7 @@ package org.apache.poi.xddf.usermodel.chart;
 
 import java.util.Map;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
@@ -102,11 +103,7 @@ public class XDDFArea3DChartData extends XDDFChartData {
     }
 
     public Integer getGapDepth() {
-        if (chart.isSetGapDepth()) {
-            return chart.getGapDepth().getVal();
-        } else {
-            return null;
-        }
+        return chart.isSetGapDepth() ? POIXMLUnits.parsePercent(chart.getGapDepth().xgetVal()) / 1000 : null;
     }
 
     public void setGapDepth(Integer depth) {
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java
index 263e8c1324..6c52b8e30f 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFBar3DChartData.java
@@ -19,6 +19,7 @@ package org.apache.poi.xddf.usermodel.chart;
 
 import java.util.Map;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
@@ -113,11 +114,7 @@ public class XDDFBar3DChartData extends XDDFChartData {
     }
 
     public Integer getGapDepth() {
-        if (chart.isSetGapDepth()) {
-            return chart.getGapDepth().getVal();
-        } else {
-            return null;
-        }
+        return (chart.isSetGapDepth()) ? POIXMLUnits.parsePercent(chart.getGapDepth().xgetVal()) / 1000 : null;
     }
 
     public void setGapDepth(Integer depth) {
@@ -135,11 +132,7 @@ public class XDDFBar3DChartData extends XDDFChartData {
     }
 
     public Integer getGapWidth() {
-        if (chart.isSetGapWidth()) {
-            return chart.getGapWidth().getVal();
-        } else {
-            return null;
-        }
+        return (chart.isSetGapWidth()) ? POIXMLUnits.parsePercent(chart.getGapWidth().xgetVal()) / 1000 : null;
     }
 
     public void setGapWidth(Integer width) {
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFBarChartData.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFBarChartData.java
index 85f75ffe5f..25eb5d97e2 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFBarChartData.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFBarChartData.java
@@ -19,6 +19,7 @@ package org.apache.poi.xddf.usermodel.chart;
 
 import java.util.Map;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
@@ -113,11 +114,7 @@ public class XDDFBarChartData extends XDDFChartData {
     }
 
     public Integer getGapWidth() {
-        if (chart.isSetGapWidth()) {
-            return chart.getGapWidth().getVal();
-        } else {
-            return null;
-        }
+        return (chart.isSetGapWidth()) ? (int)(POIXMLUnits.parsePercent(chart.getGapWidth().xgetVal()) / 1000.) : null;
     }
 
     public void setGapWidth(Integer width) {
@@ -135,11 +132,7 @@ public class XDDFBarChartData extends XDDFChartData {
     }
 
     public Byte getOverlap() {
-        if (chart.isSetOverlap()) {
-            return chart.getOverlap().getVal();
-        } else {
-            return null;
-        }
+        return chart.isSetOverlap() ? (byte)(POIXMLUnits.parsePercent(chart.getOverlap().xgetVal())/1000) : null;
     }
 
     /**
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java
index ac47f4d373..db55a7a31e 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFLine3DChartData.java
@@ -19,6 +19,7 @@ package org.apache.poi.xddf.usermodel.chart;
 
 import java.util.Map;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
@@ -93,11 +94,7 @@ public class XDDFLine3DChartData extends XDDFChartData {
    }
 
    public Integer getGapDepth() {
-       if (chart.isSetGapDepth()) {
-           return chart.getGapDepth().getVal();
-       } else {
-           return null;
-       }
+       return (chart.isSetGapDepth()) ? POIXMLUnits.parsePercent(chart.getGapDepth().xgetVal()) / 1000 : null;
    }
 
    public void setGapDepth(Integer depth) {
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFView3D.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFView3D.java
index 5d9d10f614..4bfe1e10b6 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFView3D.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFView3D.java
@@ -19,6 +19,7 @@
 
 package org.apache.poi.xddf.usermodel.chart;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.drawingml.x2006.chart.CTView3D;
 
@@ -128,11 +129,7 @@ public class XDDFView3D {
     }
 
     public Integer getDepthPercent() {
-        if (view3D.isSetDepthPercent()) {
-            return view3D.getDepthPercent().getVal();
-        } else {
-            return null;
-        }
+        return (view3D.isSetDepthPercent()) ? POIXMLUnits.parsePercent(view3D.getDepthPercent().xgetVal()) : null;
     }
 
     public void setDepthPercent(Integer percent) {
@@ -153,11 +150,7 @@ public class XDDFView3D {
     }
 
     public Integer getHPercent() {
-        if (view3D.isSetHPercent()) {
-            return view3D.getHPercent().getVal();
-        } else {
-            return null;
-        }
+        return (view3D.isSetHPercent()) ? POIXMLUnits.parsePercent(view3D.getHPercent().xgetVal()) : null;
     }
 
     public void setHPercent(Integer percent) {
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFBodyProperties.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFBodyProperties.java
index c27953ba99..80d6f019bf 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFBodyProperties.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFBodyProperties.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel.text;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.apache.poi.util.Units;
@@ -123,7 +124,7 @@ public class XDDFBodyProperties {
 
     public Double getBottomInset() {
         if (props.isSetBIns()) {
-            return Units.toPoints(props.getBIns());
+            return Units.toPoints(POIXMLUnits.parseLength(props.xgetBIns()));
         } else {
             return null;
         }
@@ -141,7 +142,7 @@ public class XDDFBodyProperties {
 
     public Double getLeftInset() {
         if (props.isSetLIns()) {
-            return Units.toPoints(props.getLIns());
+            return Units.toPoints(POIXMLUnits.parseLength(props.xgetLIns()));
         } else {
             return null;
         }
@@ -159,7 +160,7 @@ public class XDDFBodyProperties {
 
     public Double getRightInset() {
         if (props.isSetRIns()) {
-            return Units.toPoints(props.getRIns());
+            return Units.toPoints(POIXMLUnits.parseLength(props.xgetRIns()));
         } else {
             return null;
         }
@@ -177,7 +178,7 @@ public class XDDFBodyProperties {
 
     public Double getTopInset() {
         if (props.isSetTIns()) {
-            return Units.toPoints(props.getTIns());
+            return Units.toPoints(POIXMLUnits.parseLength(props.xgetTIns()));
         } else {
             return null;
         }
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFBulletSizePercent.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFBulletSizePercent.java
index 6426c8e32b..b1eefa90f7 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFBulletSizePercent.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFBulletSizePercent.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel.text;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBulletSizePercent;
@@ -43,10 +44,10 @@ public class XDDFBulletSizePercent implements XDDFBulletSize {
     }
 
     public double getPercent() {
-        return percent.getVal() * scale;
+        return POIXMLUnits.parsePercent(percent.xgetVal()) * scale;
     }
 
     public void setPercent(double value) {
-        percent.setVal(Math.toIntExact(Math.round(1000 * value)));
+        percent.setVal(Long.toString(Math.round(1000 * value)));
     }
 }
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFFont.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFFont.java
index 93cdc723e3..e0f0b42528 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFFont.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFFont.java
@@ -34,8 +34,8 @@ public class XDDFFont {
     public XDDFFont(FontGroup group, String typeface, Byte charset, Byte pitch, byte[] panose) {
         this(group, CTTextFont.Factory.newInstance());
         if (typeface == null) {
-            if (font.isSetTypeface()) {
-                font.unsetTypeface();
+            if (font.getTypeface() != null && !font.getTypeface().equals("")) {
+                font.setTypeface("");
             }
         } else {
             font.setTypeface(typeface);
@@ -79,11 +79,7 @@ public class XDDFFont {
     }
 
     public String getTypeface() {
-        if (font.isSetTypeface()) {
-            return font.getTypeface();
-        } else {
-            return null;
-        }
+        return font.getTypeface();
     }
 
     public Byte getCharset() {
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFNormalAutoFit.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFNormalAutoFit.java
index e476834806..ada34afe94 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFNormalAutoFit.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFNormalAutoFit.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel.text;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextNormalAutofit;
@@ -42,7 +43,7 @@ public class XDDFNormalAutoFit implements XDDFAutoFit {
     @Override
     public int getFontScale() {
         if (autofit.isSetFontScale()) {
-            return autofit.getFontScale();
+            return POIXMLUnits.parsePercent(autofit.xgetFontScale());
         } else {
             return 100_000;
         }
@@ -61,7 +62,7 @@ public class XDDFNormalAutoFit implements XDDFAutoFit {
     @Override
     public int getLineSpaceReduction() {
         if (autofit.isSetLnSpcReduction()) {
-            return autofit.getLnSpcReduction();
+            return POIXMLUnits.parsePercent(autofit.xgetLnSpcReduction());
         } else {
             return 0;
         }
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFSpacingPercent.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFSpacingPercent.java
index 288f969d88..70c099e725 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFSpacingPercent.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFSpacingPercent.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel.text;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextSpacing;
@@ -49,7 +50,7 @@ public class XDDFSpacingPercent extends XDDFSpacing {
     }
 
     public double getPercent() {
-        return percent.getVal() * scale;
+        return POIXMLUnits.parsePercent(percent.xgetVal()) * scale;
     }
 
     public void setPercent(double value) {
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTabStop.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTabStop.java
index 074b5272dc..a843002dd1 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTabStop.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTabStop.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xddf.usermodel.text;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.apache.poi.util.Units;
@@ -56,7 +57,7 @@ public class XDDFTabStop {
 
     public Double getPosition() {
         if (stop.isSetPos()) {
-            return Units.toPoints(stop.getPos());
+            return Units.toPoints(POIXMLUnits.parseLength(stop.xgetPos()));
         } else {
             return null;
         }
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java
index b5e3378795..7fa888b05f 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java
@@ -27,6 +27,7 @@ import java.util.function.Predicate;
 
 import org.apache.commons.collections4.iterators.IteratorIterable;
 import org.apache.commons.collections4.iterators.ReverseListIterator;
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
 import org.apache.poi.util.LocaleUtil;
@@ -361,8 +362,8 @@ public class XDDFTextParagraph {
     public Double getDefaultTabSize() {
         return findDefinedParagraphProperty(
                 CTTextParagraphProperties::isSetDefTabSz,
-                CTTextParagraphProperties::getDefTabSz)
-            .map(Units::toPoints).orElse(null);
+                CTTextParagraphProperties::xgetDefTabSz)
+            .map(POIXMLUnits::parseLength).map(Units::toPoints).orElse(null);
     }
 
     /**
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextRun.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextRun.java
index 89f5dced01..0817f23592 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextRun.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextRun.java
@@ -25,12 +25,14 @@ import java.util.function.Predicate;
 
 import org.apache.poi.common.usermodel.fonts.FontGroup;
 import org.apache.poi.ooxml.POIXMLRelation;
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackagePartName;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
 import org.apache.poi.openxml4j.opc.TargetMode;
 import org.apache.poi.util.Beta;
 import org.apache.poi.util.Internal;
+import org.apache.poi.util.Units;
 import org.apache.poi.xddf.usermodel.XDDFColor;
 import org.apache.poi.xddf.usermodel.XDDFFillProperties;
 import org.apache.poi.xddf.usermodel.XDDFLineProperties;
@@ -294,7 +296,8 @@ public class XDDFTextRun {
     public boolean isSubscript() {
         return findDefinedProperty(
                 CTTextCharacterProperties::isSetBaseline,
-                CTTextCharacterProperties::getBaseline)
+                CTTextCharacterProperties::xgetBaseline)
+            .map(POIXMLUnits::parsePercent)
             .map(baseline -> baseline < 0)
             .orElse(false);
     }
@@ -306,7 +309,8 @@ public class XDDFTextRun {
     public boolean isSuperscript() {
         return findDefinedProperty(
                 CTTextCharacterProperties::isSetBaseline,
-                CTTextCharacterProperties::getBaseline)
+                CTTextCharacterProperties::xgetBaseline)
+            .map(POIXMLUnits::parsePercent)
             .map(baseline -> baseline > 0)
             .orElse(false);
     }
@@ -488,8 +492,9 @@ public class XDDFTextRun {
     public Double getCharacterSpacing() {
         return findDefinedProperty(
                 CTTextCharacterProperties::isSetSpc,
-                CTTextCharacterProperties::getSpc)
-            .map(spacing -> 0.01 * spacing)
+                CTTextCharacterProperties::xgetSpc)
+            .map(POIXMLUnits::parseLength)
+            .map(Units::toPoints)
             .orElse(null);
     }
 
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java
index 63daaf6395..cafb705a7e 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java
@@ -22,6 +22,7 @@ import java.awt.Color;
 
 import javax.xml.namespace.QName;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.sl.draw.DrawPaint;
 import org.apache.poi.sl.usermodel.AbstractColorStyle;
 import org.apache.poi.sl.usermodel.ColorStyle;
@@ -52,10 +53,10 @@ public class XSLFColor {
     private static final POILogger LOGGER = POILogFactory.getLogger(XSLFColor.class);
     private static final QName VAL_ATTR = new QName("val");
 
-    private XmlObject _xmlObject;
-    private Color _color;
-    private CTSchemeColor _phClr;
-    private XSLFSheet _sheet;
+    private final XmlObject _xmlObject;
+    private final Color _color;
+    private final CTSchemeColor _phClr;
+    private final XSLFSheet _sheet;
 
     @SuppressWarnings("WeakerAccess")
     public XSLFColor(XmlObject obj, XSLFTheme theme, CTSchemeColor phClr, XSLFSheet sheet) {
@@ -88,8 +89,8 @@ public class XSLFColor {
     private Color toColor(CTHslColor hsl) {
         return DrawPaint.HSL2RGB(
             hsl.getHue2() / 60000d,
-            hsl.getSat2() / 1000d,
-            hsl.getLum2() / 1000d,
+            POIXMLUnits.parsePercent(hsl.xgetSat2()) / 1000d,
+            POIXMLUnits.parsePercent(hsl.xgetLum2()) / 1000d,
             1d);
     }
 
@@ -112,7 +113,10 @@ public class XSLFColor {
 
     private Color toColor(CTScRgbColor scrgb) {
         // percental [0..100000] scRGB color space  needs to be gamma corrected for AWT/sRGB colorspace
-        return DrawPaint.SCRGB2RGB(scrgb.getR()/100_000d,scrgb.getG()/100_000d,scrgb.getB()/100_000d);
+        return DrawPaint.SCRGB2RGB(
+            POIXMLUnits.parsePercent(scrgb.xgetR())/100_000d,
+            POIXMLUnits.parsePercent(scrgb.xgetG())/100_000d,
+            POIXMLUnits.parsePercent(scrgb.xgetB())/100_000d);
     }
 
     private Color toColor(CTSRgbColor srgb) {
@@ -487,9 +491,9 @@ public class XSLFColor {
     }
 
     private static class XSLFColorStyle extends AbstractColorStyle {
-        private XmlObject xmlObject;
-        private Color color;
-        private CTSchemeColor phClr;
+        private final XmlObject xmlObject;
+        private final Color color;
+        private final CTSchemeColor phClr;
 
         XSLFColorStyle(XmlObject xmlObject, Color color, CTSchemeColor phClr) {
             this.xmlObject = xmlObject;
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComment.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComment.java
index 917df0dd9b..ab925b2f0c 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComment.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFComment.java
@@ -21,6 +21,7 @@ import java.awt.geom.Point2D;
 import java.util.Calendar;
 import java.util.Date;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.sl.usermodel.Comment;
 import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.util.Units;
@@ -111,7 +112,9 @@ public class XSLFComment implements Comment {
     @Override
     public Point2D getOffset() {
         final CTPoint2D pos = comment.getPos();
-        return new Point2D.Double(Units.toPoints(pos.getX()), Units.toPoints(pos.getY()));
+        return new Point2D.Double(
+            Units.toPoints(POIXMLUnits.parseLength(pos.xgetX())),
+            Units.toPoints(POIXMLUnits.parseLength(pos.xgetY())));
     }
 
     @Override
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java
index 8c41fe1b93..13a4842735 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java
@@ -28,6 +28,7 @@ import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
 import org.apache.poi.ooxml.POIXMLTypeLoader;
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.sl.draw.geom.CustomGeometry;
 import org.apache.poi.sl.draw.geom.PresetGeometries;
 import org.apache.poi.sl.usermodel.FreeformShape;
@@ -113,7 +114,7 @@ public class XSLFFreeformShape extends XSLFAutoShape
             numPoints += Math.max(points.length, 1);
             it.next();
         }
-        
+
         XmlObject xo = getShapeProperties();
         if (!(xo instanceof CTShapeProperties)) {
             return -1;
@@ -157,9 +158,8 @@ public class XSLFFreeformShape extends XSLFAutoShape
         if (!(xo instanceof CTShapeProperties)) {
             return null;
         }
-        
+
         final CTCustomGeometry2D geom = ((CTShapeProperties)xo).getCustGeom();
-        //noinspection deprecation
         for(CTPath2D spPath : geom.getPathLst().getPathArray()){
             XmlCursor cursor = spPath.newCursor();
             try {
@@ -193,7 +193,7 @@ public class XSLFFreeformShape extends XSLFAutoShape
 
         final CTTransform2D xfrm = getXfrm(false);
         final Rectangle2D xfrm2d = new Rectangle2D.Double
-                (xfrm.getOff().getX(), xfrm.getOff().getY(), xfrm.getExt().getCx(), xfrm.getExt().getCy());
+                (POIXMLUnits.parseLength(xfrm.getOff().xgetX()), POIXMLUnits.parseLength(xfrm.getOff().xgetY()), xfrm.getExt().getCx(), xfrm.getExt().getCy());
 
         final Rectangle2D bounds = getAnchor();
         at.translate(bounds.getX()+bounds.getCenterX(), bounds.getY()+bounds.getCenterY());
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGradientPaint.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGradientPaint.java
index f86d2e9035..3938295e11 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGradientPaint.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGradientPaint.java
@@ -19,6 +19,7 @@ package org.apache.poi.xslf.usermodel;
 
 import java.util.Arrays;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.sl.usermodel.ColorStyle;
 import org.apache.poi.sl.usermodel.Insets2D;
 import org.apache.poi.sl.usermodel.PaintStyle;
@@ -43,8 +44,8 @@ public class XSLFGradientPaint implements PaintStyle.GradientPaint {
                 new CTGradientStop[0] : gradFill.getGsLst().getGsArray();
 
         Arrays.sort(gs, (o1, o2) -> {
-            int pos1 = o1.getPos();
-            int pos2 = o2.getPos();
+            int pos1 = POIXMLUnits.parsePercent(o1.xgetPos());
+            int pos2 = POIXMLUnits.parsePercent(o2.xgetPos());
             return Integer.compare(pos1, pos2);
         });
 
@@ -58,7 +59,7 @@ public class XSLFGradientPaint implements PaintStyle.GradientPaint {
                 phClrCgs = cgs.getSchemeClr();
             }
             cs[i] = new XSLFColor(cgs, theme, phClrCgs, sheet).getColorStyle();
-            fractions[i] = cgs.getPos() / 100000.f;
+            fractions[i] = POIXMLUnits.parsePercent(cgs.xgetPos()) / 100000.f;
             i++;
         }
 
@@ -113,7 +114,12 @@ public class XSLFGradientPaint implements PaintStyle.GradientPaint {
         if (gradFill.isSetPath() && gradFill.getPath().isSetFillToRect()) {
             final double base = 100_000;
             CTRelativeRect rect = gradFill.getPath().getFillToRect();
-            return new Insets2D(rect.getT()/base, rect.getL()/base, rect.getB()/base, rect.getR()/base);
+            return new Insets2D(
+                POIXMLUnits.parsePercent(rect.xgetT())/base,
+                POIXMLUnits.parsePercent(rect.xgetL())/base,
+                POIXMLUnits.parsePercent(rect.xgetB())/base,
+                POIXMLUnits.parsePercent(rect.xgetR())/base
+            );
         }
         return null;
     }
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java
index a57e0b7463..490908e35c 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java
@@ -27,6 +27,7 @@ import java.io.IOException;
 import javax.xml.namespace.QName;
 
 import org.apache.poi.ooxml.POIXMLException;
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
@@ -64,8 +65,8 @@ public class XSLFGraphicFrame extends XSLFShape implements GraphicalFrame {
     private final static POILogger _logger = POILogFactory.getLogger(XSLFGroupShape.class);
-    
+
     private final List _shapes;
     private final CTGroupShapeProperties _grpSpPr;
     private XSLFDrawing _drawing;
@@ -71,12 +72,12 @@ implements XSLFShapeContainer, GroupShape {
     protected CTGroupShapeProperties getGrpSpPr() {
         return _grpSpPr;
     }
-    
+
     private CTGroupTransform2D getSafeXfrm() {
         CTGroupTransform2D xfrm = getXfrm();
         return (xfrm == null ? getGrpSpPr().addNewXfrm() : xfrm);
     }
-    
+
     protected CTGroupTransform2D getXfrm() {
         return getGrpSpPr().getXfrm();
     }
@@ -85,8 +86,8 @@ implements XSLFShapeContainer, GroupShape {
     public Rectangle2D getAnchor(){
         CTGroupTransform2D xfrm = getXfrm();
         CTPoint2D off = xfrm.getOff();
-        double x = Units.toPoints(off.getX());
-        double y = Units.toPoints(off.getY());
+        double x = Units.toPoints(POIXMLUnits.parseLength(off.xgetX()));
+        double y = Units.toPoints(POIXMLUnits.parseLength(off.xgetY()));
         CTPositiveSize2D ext = xfrm.getExt();
         double cx = Units.toPoints(ext.getCx());
         double cy = Units.toPoints(ext.getCy());
@@ -118,8 +119,8 @@ implements XSLFShapeContainer, GroupShape {
     public Rectangle2D getInteriorAnchor(){
         CTGroupTransform2D xfrm = getXfrm();
         CTPoint2D off = xfrm.getChOff();
-        double x = Units.toPoints(off.getX());
-        double y = Units.toPoints(off.getY());
+        double x = Units.toPoints(POIXMLUnits.parseLength(off.xgetX()));
+        double y = Units.toPoints(POIXMLUnits.parseLength(off.xgetY()));
         CTPositiveSize2D ext = xfrm.getChExt();
         double cx = Units.toPoints(ext.getCx());
         double cy = Units.toPoints(ext.getCy());
@@ -287,20 +288,20 @@ implements XSLFShapeContainer, GroupShape {
         Dimension dim = pictureData.getImageDimension();
         oleObj.setImgW(Units.toEMU(dim.getWidth()));
         oleObj.setImgH(Units.toEMU(dim.getHeight()));
-        
-        
+
+
         getShapes().add(sh);
         sh.setParent(this);
         return sh;
     }
-    
+
     public XSLFTable createTable(){
         XSLFTable sh = getDrawing().createTable();
         _shapes.add(sh);
         sh.setParent(this);
         return sh;
     }
-    
+
     @Override
     public XSLFTable createTable(int numRows, int numCols){
         if (numRows < 1 || numCols < 1) {
@@ -318,7 +319,7 @@ implements XSLFShapeContainer, GroupShape {
         return sh;
     }
 
-    
+
     @Override
     public void setFlipHorizontal(boolean flip){
         getSafeXfrm().setFlipH(flip);
@@ -359,7 +360,7 @@ implements XSLFShapeContainer, GroupShape {
         // recursively update each shape
         List tgtShapes = getShapes();
         List srcShapes = gr.getShapes();
-        
+
         // workaround for a call by XSLFSheet.importContent:
         // if we have already the same amount of child shapes
         // then assume, that we've been called by import content and only need to update the children
@@ -367,13 +368,13 @@ implements XSLFShapeContainer, GroupShape {
             for(int i = 0; i < tgtShapes.size(); i++){
                 XSLFShape s1 = srcShapes.get(i);
                 XSLFShape s2 = tgtShapes.get(i);
-    
+
                 s2.copy(s1);
             }
         } else {
             // otherwise recreate the shapes from scratch
             clear();
-            
+
             // recursively update each shape
             for(XSLFShape shape : srcShapes) {
                 XSLFShape newShape;
@@ -398,7 +399,7 @@ implements XSLFShapeContainer, GroupShape {
                     _logger.log(POILogger.WARN, "copying of class "+shape.getClass()+" not supported.");
                     continue;
                 }
-    
+
                 newShape.copy(shape);
             }
         }
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
index 4d6fc246a5..848c8c86c3 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
@@ -35,6 +35,7 @@ import javax.imageio.ImageIO;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.ooxml.util.XPathHelper;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
@@ -216,7 +217,12 @@ public class XSLFPictureShape extends XSLFSimpleShape
     @Override
     public Insets getClipping(){
         CTRelativeRect r = getBlipFill().getSrcRect();
-        return (r == null) ? null : new Insets(r.getT(), r.getL(), r.getB(), r.getR());
+
+        return (r == null) ? null : new Insets(
+            POIXMLUnits.parsePercent(r.xgetT()),
+            POIXMLUnits.parsePercent(r.xgetL()),
+            POIXMLUnits.parsePercent(r.xgetB()),
+            POIXMLUnits.parsePercent(r.xgetR()));
     }
 
     /**
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java
index eccd5ba778..0f4448a3af 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java
@@ -25,6 +25,7 @@ import java.awt.geom.Rectangle2D;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.sl.draw.DrawPaint;
 import org.apache.poi.sl.draw.geom.CustomGeometry;
@@ -129,8 +130,8 @@ public abstract class XSLFSimpleShape extends XSLFShape
         }
 
         CTPoint2D off = xfrm.getOff();
-        double x = Units.toPoints(off.getX());
-        double y = Units.toPoints(off.getY());
+        double x = Units.toPoints(POIXMLUnits.parseLength(off.xgetX()));
+        double y = Units.toPoints(POIXMLUnits.parseLength(off.xgetY()));
         CTPositiveSize2D ext = xfrm.getExt();
         double cx = Units.toPoints(ext.getCx());
         double cy = Units.toPoints(ext.getCy());
@@ -978,7 +979,6 @@ public abstract class XSLFSimpleShape extends XSLFShape
         XSLFGeometryProperties gp = XSLFPropertiesDelegate.getGeometryDelegate(getShapeProperties());
 
         if (gp != null && gp.isSetPrstGeom() && gp.getPrstGeom().isSetAvLst()) {
-            //noinspection deprecation
             for (CTGeomGuide g : gp.getPrstGeom().getAvLst().getGdArray()) {
                 if (g.getName().equals(name)) {
                     Guide gd = new Guide();
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTabStop.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTabStop.java
index 7f87205bd0..3d699af3ab 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTabStop.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTabStop.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xslf.usermodel;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.sl.usermodel.TabStop;
 import org.apache.poi.util.Units;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextTabStop;
@@ -25,14 +26,14 @@ import org.openxmlformats.schemas.drawingml.x2006.main.STTextTabAlignType;
 public class XSLFTabStop implements TabStop {
 
     final CTTextTabStop tabStop;
-    
+
     XSLFTabStop(CTTextTabStop tabStop) {
         this.tabStop = tabStop;
     }
-    
+
     /** position in EMUs */
     public int getPosition() {
-        return tabStop.getPos();
+        return (int)POIXMLUnits.parseLength(tabStop.xgetPos());
     }
 
     /** position in EMUs */
@@ -49,7 +50,7 @@ public class XSLFTabStop implements TabStop {
     public void setPositionInPoints(final double points) {
         setPosition(Units.toEMU(points));
     }
-    
+
     public TabStopType getType() {
         return TabStopType.fromOoxmlId(tabStop.getAlgn().intValue());
     }
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java
index 1f5040e380..f334052e81 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java
@@ -27,6 +27,7 @@ import java.util.List;
 
 import javax.xml.namespace.QName;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.sl.draw.DrawFactory;
 import org.apache.poi.sl.draw.DrawTableShape;
 import org.apache.poi.sl.draw.DrawTextShape;
@@ -52,8 +53,8 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable {
     /* package */ static final String TABLE_URI = "http://schemas.openxmlformats.org/drawingml/2006/table";
 
-    private CTTable _table;
-    private List _rows;
+    private final CTTable _table;
+    private final List _rows;
 
     /*package*/ XSLFTable(CTGraphicalObjectFrame shape, XSLFSheet sheet){
         super(shape, sheet);
@@ -123,8 +124,8 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable {
     /*package*/ XSLFTableRow(CTTableRow row, XSLFTable table){
         _row = row;
         _table = table;
-        @SuppressWarnings("deprecation")
         CTTableCell[] tcArray = _row.getTcArray();
         _cells = new ArrayList<>(tcArray.length);
         for(CTTableCell cell : tcArray) {
@@ -61,7 +61,7 @@ public class XSLFTableRow implements Iterable {
     }
 
     public double getHeight(){
-        return Units.toPoints(_row.getH());
+        return Units.toPoints(POIXMLUnits.parseLength(_row.xgetH()));
     }
 
     public void setHeight(double height){
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java
index 7c36b1dd8e..9b3dae4e5e 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java
@@ -25,6 +25,7 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.sl.draw.DrawPaint;
 import org.apache.poi.sl.usermodel.AutoNumberingScheme;
 import org.apache.poi.sl.usermodel.PaintStyle;
@@ -302,7 +303,7 @@ public class XSLFTextParagraph implements TextParagraph val) {
         if(props.isSetBuSzPct()){
-            val.accept(props.getBuSzPct().getVal() * 0.001);
+            val.accept(POIXMLUnits.parsePercent(props.getBuSzPct().xgetVal()) * 0.001);
         }
         if(props.isSetBuSzPts()){
             val.accept( - props.getBuSzPts().getVal() * 0.01);
@@ -324,7 +325,7 @@ public class XSLFTextParagraph implements TextParagraph= 0) {
             CTTextBulletSizePercent pt = pr.isSetBuSzPct() ? pr.getBuSzPct() : pr.addNewBuSzPct();
-            pt.setVal((int)(bulletSize*1000));
+            pt.setVal(Integer.toString((int)(bulletSize*1000)));
             if(pr.isSetBuSzPts()) {
                 pr.unsetBuSzPts();
             }
@@ -452,7 +453,7 @@ public class XSLFTextParagraph implements TextParagraph {
             if (props.isSetDefTabSz()) {
-                val.accept(Units.toPoints(props.getDefTabSz()));
+                val.accept(Units.toPoints(POIXMLUnits.parseLength(props.xgetDefTabSz())));
             }
         });
     }
@@ -468,7 +469,7 @@ public class XSLFTextParagraph implements TextParagraph {
             if (props.isSetSpc()) {
-                val.accept(props.getSpc()*0.01);
+                val.accept(Units.toPoints(POIXMLUnits.parseLength(props.xgetSpc())));
             }
         });
         return d == null ? 0 : d;
@@ -297,7 +299,7 @@ public class XSLFTextRun implements TextRun {
     public boolean isSuperscript() {
         Boolean b = fetchCharacterProperty((props, val) -> {
             if (props.isSetBaseline()) {
-                val.accept(props.getBaseline() > 0);
+                val.accept(POIXMLUnits.parsePercent(props.xgetBaseline()) > 0);
             }
         });
         return b != null && b;
@@ -341,7 +343,7 @@ public class XSLFTextRun implements TextRun {
     public boolean isSubscript() {
         Boolean b = fetchCharacterProperty((props, val) -> {
             if (props.isSetBaseline()) {
-                val.accept(props.getBaseline() < 0);
+                val.accept(POIXMLUnits.parsePercent(props.xgetBaseline()) < 0);
             }
         });
         return b != null && b;
@@ -565,7 +567,7 @@ public class XSLFTextRun implements TextRun {
         @Override
         public String getTypeface() {
             CTTextFont tf = getXmlObject(false);
-            return (tf != null && tf.isSetTypeface()) ? tf.getTypeface() : null;
+            return (tf != null) ? tf.getTypeface() : null;
         }
 
         @Override
@@ -718,7 +720,10 @@ public class XSLFTextRun implements TextRun {
                 return null;
             }
 
-            String typeface = font.isSetTypeface() ? font.getTypeface() : "";
+            String typeface = font.getTypeface();
+            if (typeface == null) {
+                typeface = "";
+            }
             if (typeface.startsWith("+mj-") || typeface.startsWith("+mn-")) {
                 //  "+mj-lt".equals(typeface) || "+mn-lt".equals(typeface)
                 final XSLFTheme theme = _p.getParentShape().getSheet().getTheme();
@@ -737,7 +742,7 @@ public class XSLFTextRun implements TextRun {
                 }
                 // SYMBOL is missing
 
-                if (font == null || !font.isSetTypeface() || "".equals(font.getTypeface())) {
+                if (font == null || font.getTypeface() == null || "".equals(font.getTypeface())) {
                     // don't fallback to latin but bubble up in the style hierarchy (slide -> layout -> master -> theme)
                     return null;
 //                    font = coll.getLatin();
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
index b0dce8b7de..a147758403 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
@@ -29,6 +29,7 @@ import java.util.function.Function;
 import java.util.function.Predicate;
 
 import org.apache.poi.ooxml.POIXMLException;
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.sl.draw.DrawFactory;
 import org.apache.poi.sl.draw.DrawTextShape;
 import org.apache.poi.sl.usermodel.Insets2D;
@@ -277,7 +278,7 @@ public abstract class XSLFTextShape extends XSLFSimpleShape
             }
         };
         fetchShapeProperty(fetcher);
-        return fetcher.getValue() == null ? false : fetcher.getValue();
+        return fetcher.getValue() != null && fetcher.getValue();
     }
 
     @Override
@@ -348,7 +349,7 @@ public abstract class XSLFTextShape extends XSLFSimpleShape
             @Override
             public boolean fetch(CTTextBodyProperties props) {
                 if (props.isSetBIns()) {
-                    double val = Units.toPoints(props.getBIns());
+                    double val = Units.toPoints(POIXMLUnits.parseLength(props.xgetBIns()));
                     setValue(val);
                     return true;
                 }
@@ -372,7 +373,7 @@ public abstract class XSLFTextShape extends XSLFSimpleShape
             @Override
             public boolean fetch(CTTextBodyProperties props) {
                 if (props.isSetLIns()) {
-                    double val = Units.toPoints(props.getLIns());
+                    double val = Units.toPoints(POIXMLUnits.parseLength(props.xgetLIns()));
                     setValue(val);
                     return true;
                 }
@@ -396,7 +397,7 @@ public abstract class XSLFTextShape extends XSLFSimpleShape
             @Override
             public boolean fetch(CTTextBodyProperties props) {
                 if (props.isSetRIns()) {
-                    double val = Units.toPoints(props.getRIns());
+                    double val = Units.toPoints(POIXMLUnits.parseLength(props.xgetRIns()));
                     setValue(val);
                     return true;
                 }
@@ -419,7 +420,7 @@ public abstract class XSLFTextShape extends XSLFSimpleShape
             @Override
             public boolean fetch(CTTextBodyProperties props) {
                 if (props.isSetTIns()) {
-                    double val = Units.toPoints(props.getTIns());
+                    double val = Units.toPoints(POIXMLUnits.parseLength(props.xgetTIns()));
                     setValue(val);
                     return true;
                 }
@@ -533,7 +534,7 @@ public abstract class XSLFTextShape extends XSLFSimpleShape
             }
         };
         fetchShapeProperty(fetcher);
-        return fetcher.getValue() == null ? true : fetcher.getValue();
+        return fetcher.getValue() == null || fetcher.getValue();
     }
 
     @Override
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTexturePaint.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTexturePaint.java
index 2a2c8edf8b..655be92305 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTexturePaint.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTexturePaint.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Supplier;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
@@ -40,6 +41,7 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTDuotoneEffect;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTRelativeRect;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor;
 import org.openxmlformats.schemas.drawingml.x2006.main.CTTileInfoProperties;
+import org.openxmlformats.schemas.drawingml.x2006.main.STPercentage;
 import org.openxmlformats.schemas.drawingml.x2006.main.STTileFlipMode;
 
 @Internal
@@ -92,7 +94,7 @@ public class XSLFTexturePaint implements PaintStyle.TexturePaint {
     @Override
     public int getAlpha() {
         return (blip.sizeOfAlphaModFixArray() > 0)
-                ? blip.getAlphaModFixArray(0).getAmt()
+                ? POIXMLUnits.parsePercent(blip.getAlphaModFixArray(0).xgetAmt())
                 : 100000;
     }
 
@@ -105,16 +107,16 @@ public class XSLFTexturePaint implements PaintStyle.TexturePaint {
     public Dimension2D getScale() {
         CTTileInfoProperties tile = blipFill.getTile();
         return (tile == null) ? null : new Dimension2DDouble(
-                tile.isSetSx() ? tile.getSx()/100_000. : 1,
-                tile.isSetSy() ? tile.getSy()/100_000. : 1);
+                tile.isSetSx() ? POIXMLUnits.parsePercent(tile.xgetSx())/100_000. : 1,
+                tile.isSetSy() ? POIXMLUnits.parsePercent(tile.xgetSy())/100_000. : 1);
     }
 
     @Override
     public Point2D getOffset() {
         CTTileInfoProperties tile = blipFill.getTile();
         return (tile == null) ? null : new Point2D.Double(
-                tile.isSetTx() ? Units.toPoints(tile.getTx()) : 0,
-                tile.isSetTy() ? Units.toPoints(tile.getTy()) : 0);
+                tile.isSetTx() ? Units.toPoints(POIXMLUnits.parseLength(tile.xgetTx())) : 0,
+                tile.isSetTy() ? Units.toPoints(POIXMLUnits.parseLength(tile.xgetTy())) : 0);
     }
 
     @Override
@@ -166,14 +168,14 @@ public class XSLFTexturePaint implements PaintStyle.TexturePaint {
 
     private static Insets2D getRectVal(CTRelativeRect rect) {
         return rect == null ? null : new Insets2D(
-            getRectVal(rect::isSetT, rect::getT),
-            getRectVal(rect::isSetL, rect::getL),
-            getRectVal(rect::isSetB, rect::getB),
-            getRectVal(rect::isSetR, rect::getR)
+            getRectVal(rect::isSetT, rect::xgetT),
+            getRectVal(rect::isSetL, rect::xgetL),
+            getRectVal(rect::isSetB, rect::xgetB),
+            getRectVal(rect::isSetR, rect::xgetR)
         );
     }
 
-    private static int getRectVal(Supplier isSet, Supplier val) {
-        return isSet.get() ? val.get() : 0;
+    private static int getRectVal(Supplier isSet, Supplier val) {
+        return isSet.get() ? POIXMLUnits.parsePercent(val.get()) : 0;
     }
 }
diff --git a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
index 43095deba6..7c0a71c8e4 100644
--- a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
+++ b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java
@@ -35,10 +35,10 @@ import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 
+import org.apache.poi.ooxml.util.DocumentHelper;
 import org.apache.poi.ooxml.util.XPathHelper;
 import org.apache.poi.ss.usermodel.DateUtil;
 import org.apache.poi.ss.util.CellReference;
-import org.apache.poi.ooxml.util.DocumentHelper;
 import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
@@ -49,7 +49,6 @@ import org.apache.poi.xssf.usermodel.XSSFTable;
 import org.apache.poi.xssf.usermodel.XSSFTableColumn;
 import org.apache.poi.xssf.usermodel.helpers.XSSFSingleXmlCell;
 import org.apache.poi.xssf.usermodel.helpers.XSSFXmlColumnPr;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXmlDataType;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
@@ -104,7 +103,7 @@ public class XSSFImportFromXML {
 
         for (XSSFSingleXmlCell singleXmlCell : singleXmlCells) {
 
-            STXmlDataType.Enum xmlDataType = singleXmlCell.getXmlDataType();
+            String xmlDataType = singleXmlCell.getXmlDataType();
             String xpathString = singleXmlCell.getXpath();
             Node result = (Node) xpath.evaluate(xpathString, doc, XPathConstants.NODE);
             // result can be null if value is optional (xsd:minOccurs=0), see bugzilla 55864
@@ -166,22 +165,22 @@ public class XSSFImportFromXML {
         }
     }
 
-    
 
-    private static enum DataType {
-        BOOLEAN(STXmlDataType.BOOLEAN), //
-        DOUBLE(STXmlDataType.DOUBLE), //
-        INTEGER(STXmlDataType.INT, STXmlDataType.UNSIGNED_INT, STXmlDataType.INTEGER), //
-        STRING(STXmlDataType.STRING), //
-        DATE(STXmlDataType.DATE);
 
-        private Set xmlDataTypes;
+    private enum DataType {
+        BOOLEAN("boolean"), //
+        DOUBLE("double"), //
+        INTEGER("int", "unsignedInt", "integer"), //
+        STRING("string"), //
+        DATE("date");
+
+        private Set xmlDataTypes;
 
-        private DataType(STXmlDataType.Enum... xmlDataTypes) {
+        DataType(String... xmlDataTypes) {
             this.xmlDataTypes = new HashSet<>(Arrays.asList(xmlDataTypes));
         }
 
-        public static DataType getDataType(STXmlDataType.Enum xmlDataType) {
+        public static DataType getDataType(String xmlDataType) {
             for (DataType dataType : DataType.values()) {
                 if (dataType.xmlDataTypes.contains(xmlDataType)) {
                     return dataType;
@@ -191,7 +190,7 @@ public class XSSFImportFromXML {
         }
     }
 
-    private void setCellValue(String value, XSSFCell cell, STXmlDataType.Enum xmlDataType) {
+    private void setCellValue(String value, XSSFCell cell, String xmlDataType) {
         DataType type = DataType.getDataType(xmlDataType);
         try {
             if (value.isEmpty() || type == null) {
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFClientAnchor.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFClientAnchor.java
index d13392e608..428a06ddf1 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFClientAnchor.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFClientAnchor.java
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xssf.usermodel;
 
+import org.apache.poi.ooxml.util.POIXMLUnits;
 import org.apache.poi.ss.usermodel.ClientAnchor;
 import org.apache.poi.util.Internal;
 import org.apache.poi.util.Units;
@@ -32,15 +33,15 @@ import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
  * 
  • A position relative to a cell (top-left) and sized relative to another cell (bottom right) * * - * which method is used is determined by the {@link AnchorType}. + * which method is used is determined by the {@link AnchorType}. */ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { - + /** * placeholder for zeros when needed for dynamic position calculations */ private static final CTMarker EMPTY_MARKER = CTMarker.Factory.newInstance(); - + private AnchorType anchorType; /** @@ -59,18 +60,18 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { * if present, fixed size of the object to use instead of cell2, which is inferred instead */ private CTPositiveSize2D size; - + /** * if present, fixed top-left position to use instead of cell1, which is inferred instead */ private CTPoint2D position; - + /** * sheet to base dynamic calculations on, if needed. Required if size and/or position or set. * Not needed if cell1/2 are set explicitly (dynamic sizing and position relative to cells). */ private XSSFSheet sheet; - + /** * Creates a new client anchor and defaults all the anchor positions to 0. * Sets the type to {@link AnchorType#MOVE_AND_RESIZE} relative to cell range A1:A1. @@ -134,7 +135,7 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { this.cell1 = cell1; // this.cell2 = calcCell(sheet, cell1, size.getCx(), size.getCy()); } - + /** * Create XSSFClientAnchor from existing xml beans, sized and positioned relative to a pair of cells. * Sets the type to {@link AnchorType#DONT_MOVE_AND_RESIZE}. @@ -152,18 +153,18 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { // this.cell1 = calcCell(sheet, EMPTY_MARKER, position.getCx(), position.getCy()); // this.cell2 = calcCell(sheet, cell1, size.getCx(), size.getCy()); } - + private CTMarker calcCell(CTMarker cell, long w, long h) { CTMarker c2 = CTMarker.Factory.newInstance(); - + int r = cell.getRow(); int c = cell.getCol(); - + int cw = Units.columnWidthToEMU(sheet.getColumnWidth(c)); - + // start with width - offset, then keep adding column widths until the next one puts us over w - long wPos = cw - cell.getColOff(); - + long wPos = cw - POIXMLUnits.parseLength(cell.xgetColOff()); + while (wPos < w) { c++; cw = Units.columnWidthToEMU(sheet.getColumnWidth(c)); @@ -172,11 +173,11 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { // now wPos >= w, so end column = c, now figure offset c2.setCol(c); c2.setColOff(cw - (wPos - w)); - + int rh = Units.toEMU(getRowHeight(sheet, r)); // start with height - offset, then keep adding row heights until the next one puts us over h - long hPos = rh - cell.getRowOff(); - + long hPos = rh - POIXMLUnits.parseLength(cell.xgetRowOff()); + while (hPos < h) { r++; rh = Units.toEMU(getRowHeight(sheet, r)); @@ -185,10 +186,10 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { // now hPos >= h, so end row = r, now figure offset c2.setRow(r); c2.setRowOff(rh - (hPos - h)); - + return c2; } - + /** * @param sheet * @param row @@ -198,15 +199,15 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { XSSFRow r = sheet.getRow(row); return r == null ? sheet.getDefaultRowHeightInPoints() : r.getHeightInPoints(); } - + private CTMarker getCell1() { - return cell1 != null ? cell1 : calcCell(EMPTY_MARKER, position.getX(), position.getY()); + return cell1 != null ? cell1 : calcCell(EMPTY_MARKER, POIXMLUnits.parseLength(position.xgetX()), POIXMLUnits.parseLength(position.xgetY())); } - + private CTMarker getCell2() { return cell2 != null ? cell2 : calcCell(getCell1(), size.getCx(), size.getCy()); } - + public short getCol1() { return (short)getCell1().getCol(); } @@ -256,7 +257,7 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { } public int getDx1() { - return Math.toIntExact(getCell1().getColOff()); + return Math.toIntExact(POIXMLUnits.parseLength(getCell1().xgetColOff())); } /** @@ -268,7 +269,7 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { } public int getDy1() { - return Math.toIntExact(getCell1().getRowOff()); + return Math.toIntExact(POIXMLUnits.parseLength(getCell1().xgetRowOff())); } /** @@ -280,7 +281,7 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { } public int getDy2() { - return Math.toIntExact(getCell2().getRowOff()); + return Math.toIntExact(POIXMLUnits.parseLength(getCell2().xgetRowOff())); } /** @@ -292,7 +293,7 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { } public int getDx2() { - return Math.toIntExact(getCell2().getColOff()); + return Math.toIntExact(POIXMLUnits.parseLength(getCell2().xgetColOff())); } /** @@ -365,7 +366,7 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { public CTPoint2D getPosition() { return position; } - + /** * Sets the top-left absolute position of the object. To use this, "from" must be set to null. * @param position @@ -383,7 +384,7 @@ public class XSSFClientAnchor extends XSSFAnchor implements ClientAnchor { public CTPositiveSize2D getSize() { return size; } - + /** * Sets the size of the object. To use this, "to" must be set to null. * @param size diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java index 7b26dcb565..b6d4465ecc 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java @@ -29,9 +29,11 @@ import org.apache.poi.util.Internal; import org.apache.poi.util.Removal; import org.apache.poi.xssf.model.StylesTable; import org.apache.poi.xssf.model.ThemesTable; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STVerticalAlignRun; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontFamily; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontName; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontScheme; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontSize; @@ -40,7 +42,6 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTUnderlineProperty; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTVerticalAlignFontProperty; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFontScheme; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun; /** * Represents a font used in a workbook. @@ -618,7 +619,7 @@ public class XSSFFont implements Font { * @see org.apache.poi.ss.usermodel.FontFamily */ public int getFamily() { - CTIntProperty family = _ctFont.sizeOfFamilyArray() == 0 ? null : _ctFont.getFamilyArray(0); + CTFontFamily family = _ctFont.sizeOfFamilyArray() == 0 ? null : _ctFont.getFamilyArray(0); return family == null ? FontFamily.NOT_APPLICABLE.getValue() : FontFamily.valueOf(family.getVal()).getValue(); } @@ -631,7 +632,7 @@ public class XSSFFont implements Font { * @see FontFamily */ public void setFamily(int value) { - CTIntProperty family = _ctFont.sizeOfFamilyArray() == 0 ? _ctFont.addNewFamily() : _ctFont.getFamilyArray(0); + CTFontFamily family = _ctFont.sizeOfFamilyArray() == 0 ? _ctFont.addNewFamily() : _ctFont.getFamilyArray(0); family.setVal(value); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFontFormatting.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFontFormatting.java index d211b3cfe1..6b359a2988 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFontFormatting.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFontFormatting.java @@ -22,13 +22,13 @@ import org.apache.poi.ss.usermodel.Color; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.FontFormatting; import org.apache.poi.ss.usermodel.FontUnderline; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STVerticalAlignRun; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontSize; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTUnderlineProperty; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTVerticalAlignFontProperty; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun; /** diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java index 7af9ee4cac..d71641b7de 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java @@ -17,24 +17,27 @@ package org.apache.poi.xssf.usermodel; -import java.util.*; -import java.util.regex.Pattern; +import java.util.Iterator; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.xml.namespace.QName; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.RichTextString; +import org.apache.poi.util.Internal; import org.apache.poi.xssf.model.StylesTable; import org.apache.poi.xssf.model.ThemesTable; -import org.apache.poi.util.Internal; import org.apache.xmlbeans.XmlCursor; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STXstring; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRElt; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRPrElt; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXstring; /** diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSignatureLine.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSignatureLine.java index 972dbe6aa8..478bca9626 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSignatureLine.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSignatureLine.java @@ -23,9 +23,7 @@ import java.io.OutputStream; import javax.xml.namespace.QName; import com.microsoft.schemas.office.excel.CTClientData; -import com.microsoft.schemas.office.excel.STCF; import com.microsoft.schemas.office.excel.STObjectType; -import com.microsoft.schemas.office.excel.STTrueFalseBlank; import com.microsoft.schemas.office.office.CTSignatureLine; import com.microsoft.schemas.vml.CTImageData; import com.microsoft.schemas.vml.CTShape; @@ -38,6 +36,7 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.poifs.crypt.dsig.SignatureLine; import org.apache.poi.schemas.vmldrawing.CTXML; import org.apache.xmlbeans.XmlException; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STTrueFalseBlank; public class XSSFSignatureLine extends SignatureLine { private static final String MS_VML_URN = "urn:schemas-microsoft-com:vml"; @@ -78,7 +77,7 @@ public class XSSFSignatureLine extends SignatureLine { clientData.addAnchor(anchorStr); clientData.setObjectType(STObjectType.PICT); clientData.addSizeWithCells(STTrueFalseBlank.X); - clientData.addCF(STCF.PICT); + clientData.addCF("pict"); clientData.addAutoPict(STTrueFalseBlank.X); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java index 99d235901b..0d33e0c4f6 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java @@ -17,6 +17,12 @@ package org.apache.poi.xssf.usermodel; +import java.awt.Color; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.poi.ooxml.util.POIXMLUnits; import org.apache.poi.util.Internal; import org.apache.poi.util.Units; import org.apache.poi.xssf.model.ParagraphPropertyFetcher; @@ -24,11 +30,6 @@ import org.apache.xmlbeans.XmlObject; import org.openxmlformats.schemas.drawingml.x2006.main.*; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTShape; -import java.awt.Color; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - /** * Represents a paragraph of text within the containing text body. * The paragraph is the highest level text separation mechanism. @@ -142,7 +143,7 @@ public class XSSFTextParagraph implements Iterable{ } }; fetchParagraphProperty(fetcher); - return fetcher.getValue() == null ? TextAlign.LEFT : fetcher.getValue(); + return fetcher.getValue() == null ? TextAlign.LEFT : fetcher.getValue(); } /** @@ -159,12 +160,12 @@ public class XSSFTextParagraph implements Iterable{ } else { pr.setAlgn(STTextAlignType.Enum.forInt(align.ordinal() + 1)); } - } + } /** * Returns where vertically on a line of text the actual words are positioned. This deals * with vertical placement of the characters with respect to the baselines. - * + * * If this attribute is omitted, then a value of baseline is implied. * @return alignment that is applied to the paragraph */ @@ -180,7 +181,7 @@ public class XSSFTextParagraph implements Iterable{ } }; fetchParagraphProperty(fetcher); - return fetcher.getValue() == null ? TextFontAlign.BASELINE : fetcher.getValue(); + return fetcher.getValue() == null ? TextFontAlign.BASELINE : fetcher.getValue(); } /** @@ -295,7 +296,7 @@ public class XSSFTextParagraph implements Iterable{ ParagraphPropertyFetcher fetcher = new ParagraphPropertyFetcher(getLevel()){ public boolean fetch(CTTextParagraphProperties props){ if(props.isSetBuSzPct()){ - setValue(props.getBuSzPct().getVal() * 0.001); + setValue(POIXMLUnits.parsePercent(props.getBuSzPct().xgetVal()) * 0.001); return true; } if(props.isSetBuSzPts()){ @@ -323,7 +324,7 @@ public class XSSFTextParagraph implements Iterable{ if(bulletSize >= 0) { // percentage CTTextBulletSizePercent pt = pr.isSetBuSzPct() ? pr.getBuSzPct() : pr.addNewBuSzPct(); - pt.setVal((int)(bulletSize*1000)); + pt.setVal(Integer.toString((int)(bulletSize*1000))); // unset points if percentage is now set if(pr.isSetBuSzPts()) pr.unsetBuSzPts(); } else { @@ -338,7 +339,7 @@ public class XSSFTextParagraph implements Iterable{ /** * Specifies the indent size that will be applied to the first line of text in the paragraph. * - * @param value the indent in points, -1 to unset indent and use the default of 0. + * @param value the indent in points, -1 to unset indent and use the default of 0. */ public void setIndent(double value){ CTTextParagraphProperties pr = _p.isSetPPr() ? _p.getPPr() : _p.addNewPPr(); @@ -441,8 +442,8 @@ public class XSSFTextParagraph implements Iterable{ }; fetchParagraphProperty(fetcher); // if the marL attribute is omitted, then a value of 347663 is implied - return fetcher.getValue() == null ? 0 : fetcher.getValue(); - } + return fetcher.getValue() == null ? 0 : fetcher.getValue(); + } /** * @@ -452,7 +453,7 @@ public class XSSFTextParagraph implements Iterable{ ParagraphPropertyFetcher fetcher = new ParagraphPropertyFetcher(getLevel()){ public boolean fetch(CTTextParagraphProperties props){ if(props.isSetDefTabSz()){ - double val = Units.toPoints(props.getDefTabSz()); + double val = Units.toPoints(POIXMLUnits.parseLength(props.xgetDefTabSz())); setValue(val); return true; } @@ -470,7 +471,7 @@ public class XSSFTextParagraph implements Iterable{ CTTextTabStopList tabStops = props.getTabLst(); if(idx < tabStops.sizeOfTabArray() ) { CTTextTabStop ts = tabStops.getTabArray(idx); - double val = Units.toPoints(ts.getPos()); + double val = Units.toPoints(POIXMLUnits.parseLength(ts.xgetPos())); setValue(val); return true; } @@ -483,8 +484,8 @@ public class XSSFTextParagraph implements Iterable{ } /** * Add a single tab stop to be used on a line of text when there are one or more tab characters - * present within the text. - * + * present within the text. + * * @param value the position of the tab stop relative to the left margin */ public void addTabStop(double value){ @@ -511,7 +512,7 @@ public class XSSFTextParagraph implements Iterable{ * // spacing will be 48 points * paragraph.setLineSpacing(-48.0); *
  • - * + * * @param linespacing the vertical line spacing */ public void setLineSpacing(double linespacing){ @@ -538,7 +539,7 @@ public class XSSFTextParagraph implements Iterable{ if(props.isSetLnSpc()){ CTTextSpacing spc = props.getLnSpc(); - if(spc.isSetSpcPct()) setValue( spc.getSpcPct().getVal()*0.001 ); + if(spc.isSetSpcPct()) setValue( POIXMLUnits.parsePercent(spc.getSpcPct().xgetVal())*0.001 ); else if (spc.isSetSpcPts()) setValue( -spc.getSpcPts().getVal()*0.01 ); return true; } @@ -556,7 +557,7 @@ public class XSSFTextParagraph implements Iterable{ lnSpc *= scale; } } - + return lnSpc; } @@ -603,7 +604,7 @@ public class XSSFTextParagraph implements Iterable{ if(props.isSetSpcBef()){ CTTextSpacing spc = props.getSpcBef(); - if(spc.isSetSpcPct()) setValue( spc.getSpcPct().getVal()*0.001 ); + if(spc.isSetSpcPct()) setValue( POIXMLUnits.parsePercent(spc.getSpcPct().xgetVal())*0.001 ); else if (spc.isSetSpcPts()) setValue( -spc.getSpcPts().getVal()*0.01 ); return true; } @@ -658,7 +659,7 @@ public class XSSFTextParagraph implements Iterable{ if(props.isSetSpcAft()){ CTTextSpacing spc = props.getSpcAft(); - if(spc.isSetSpcPct()) setValue( spc.getSpcPct().getVal()*0.001 ); + if(spc.isSetSpcPct()) setValue( POIXMLUnits.parsePercent(spc.getSpcPct().xgetVal())*0.001 ); else if (spc.isSetSpcPts()) setValue( -spc.getSpcPts().getVal()*0.01 ); return true; } @@ -676,7 +677,7 @@ public class XSSFTextParagraph implements Iterable{ * that this paragraph belongs to (therefore in the parent shape). *

    * Note that the closest properties object to the text is used, therefore if there is - * a conflict between the text paragraph properties and the list style properties for + * a conflict between the text paragraph properties and the list style properties for * this level then the text paragraph properties will take precedence. *

    * @@ -690,7 +691,7 @@ public class XSSFTextParagraph implements Iterable{ /** * Returns the level of text properties that this paragraph will follow. - * + * * @return the text level of this paragraph (0-based). Default is 0. */ public int getLevel(){ @@ -699,7 +700,7 @@ public class XSSFTextParagraph implements Iterable{ return pr.getLvl(); } - + /** * Returns whether this paragraph has bullets @@ -727,10 +728,10 @@ public class XSSFTextParagraph implements Iterable{ fetchParagraphProperty(fetcher); return fetcher.getValue() == null ? false : fetcher.getValue(); } - + /** * Set or unset this paragraph as a bullet point - * + * * @param flag whether text in this paragraph has bullets */ public void setBullet(boolean flag) { @@ -739,7 +740,7 @@ public class XSSFTextParagraph implements Iterable{ CTTextParagraphProperties pr = _p.isSetPPr() ? _p.getPPr() : _p.addNewPPr(); if(!flag) { pr.addNewBuNone(); - + if(pr.isSetBuAutoNum()) pr.unsetBuAutoNum(); if(pr.isSetBuBlip()) pr.unsetBuBlip(); if(pr.isSetBuChar()) pr.unsetBuChar(); @@ -767,17 +768,17 @@ public class XSSFTextParagraph implements Iterable{ public void setBullet(ListAutoNumber scheme, int startAt) { if(startAt < 1) throw new IllegalArgumentException("Start Number must be greater or equal that 1") ; CTTextParagraphProperties pr = _p.isSetPPr() ? _p.getPPr() : _p.addNewPPr(); - CTTextAutonumberBullet lst = pr.isSetBuAutoNum() ? pr.getBuAutoNum() : pr.addNewBuAutoNum(); + CTTextAutonumberBullet lst = pr.isSetBuAutoNum() ? pr.getBuAutoNum() : pr.addNewBuAutoNum(); lst.setType(STTextAutonumberScheme.Enum.forInt(scheme.ordinal() + 1)); lst.setStartAt(startAt); - + if(!pr.isSetBuFont()) pr.addNewBuFont().setTypeface("Arial"); - if(pr.isSetBuNone()) pr.unsetBuNone(); + if(pr.isSetBuNone()) pr.unsetBuNone(); // remove these elements if present as it results in invalid content when opening in Excel. if(pr.isSetBuBlip()) pr.unsetBuBlip(); - if(pr.isSetBuChar()) pr.unsetBuChar(); + if(pr.isSetBuChar()) pr.unsetBuChar(); } - + /** * Set this paragraph as an automatic numbered bullet point * @@ -787,14 +788,14 @@ public class XSSFTextParagraph implements Iterable{ CTTextParagraphProperties pr = _p.isSetPPr() ? _p.getPPr() : _p.addNewPPr(); CTTextAutonumberBullet lst = pr.isSetBuAutoNum() ? pr.getBuAutoNum() : pr.addNewBuAutoNum(); lst.setType(STTextAutonumberScheme.Enum.forInt(scheme.ordinal() + 1)); - + if(!pr.isSetBuFont()) pr.addNewBuFont().setTypeface("Arial"); if(pr.isSetBuNone()) pr.unsetBuNone(); // remove these elements if present as it results in invalid content when opening in Excel. if(pr.isSetBuBlip()) pr.unsetBuBlip(); if(pr.isSetBuChar()) pr.unsetBuChar(); } - + /** * Returns whether this paragraph has automatic numbered bullets */ @@ -811,7 +812,7 @@ public class XSSFTextParagraph implements Iterable{ fetchParagraphProperty(fetcher); return fetcher.getValue() == null ? false : fetcher.getValue(); } - + /** * Returns the starting number if this paragraph has automatic numbered bullets, otherwise returns 0 */ @@ -828,7 +829,7 @@ public class XSSFTextParagraph implements Iterable{ fetchParagraphProperty(fetcher); return fetcher.getValue() == null ? 0 : fetcher.getValue(); } - + /** * Returns the auto number scheme if this paragraph has automatic numbered bullets, otherwise returns ListAutoNumber.ARABIC_PLAIN */ @@ -843,12 +844,12 @@ public class XSSFTextParagraph implements Iterable{ } }; fetchParagraphProperty(fetcher); - + // Note: documentation does not define a default, return ListAutoNumber.ARABIC_PLAIN (1,2,3...) return fetcher.getValue() == null ? ListAutoNumber.ARABIC_PLAIN : fetcher.getValue(); - } + } + - @SuppressWarnings("rawtypes") private boolean fetchParagraphProperty(ParagraphPropertyFetcher visitor){ boolean ok = false; @@ -861,7 +862,7 @@ public class XSSFTextParagraph implements Iterable{ return ok; } - + @Override public String toString(){ return "[" + getClass() + "]" + getText(); diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java index 5b63e94f1e..1809e16cd5 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextRun.java @@ -16,6 +16,10 @@ ==================================================================== */ package org.apache.poi.xssf.usermodel; +import java.awt.Color; + +import org.apache.poi.ooxml.util.POIXMLUnits; +import org.apache.poi.util.Units; import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun; import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTSolidColorFillProperties; @@ -25,8 +29,6 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTTextNormalAutofit; import org.openxmlformats.schemas.drawingml.x2006.main.STTextStrikeType; import org.openxmlformats.schemas.drawingml.x2006.main.STTextUnderlineType; -import java.awt.Color; - /** * Represents a run of text within the containing text body. The run element is the * lowest level text separation mechanism within a text body. @@ -80,7 +82,7 @@ public class XSSFTextRun { CTSRgbColor clr = fill.getSrgbClr(); byte[] rgb = clr.getVal(); return new Color(0xFF & rgb[0], 0xFF & rgb[1], 0xFF & rgb[2]); - } + } } return new Color(0, 0, 0); @@ -115,7 +117,7 @@ public class XSSFTextRun { CTTextCharacterProperties rPr = getRPr(); if(rPr.isSetSz()){ - size = rPr.getSz()*0.01; + size = rPr.getSz()*0.01; } return size * scale; @@ -129,7 +131,7 @@ public class XSSFTextRun { public double getCharacterSpacing(){ CTTextCharacterProperties rPr = getRPr(); if(rPr.isSetSpc()){ - return rPr.getSpc()*0.01; + return Units.toPoints(POIXMLUnits.parseLength(rPr.xgetSpc())); } return 0; } @@ -229,7 +231,7 @@ public class XSSFTextRun { public boolean isSuperscript() { CTTextCharacterProperties rPr = getRPr(); if(rPr.isSetBaseline()){ - return rPr.getBaseline() > 0; + return POIXMLUnits.parsePercent(rPr.xgetBaseline()) > 0; } return false; } @@ -273,7 +275,7 @@ public class XSSFTextRun { public boolean isSubscript() { CTTextCharacterProperties rPr = getRPr(); if(rPr.isSetBaseline()){ - return rPr.getBaseline() < 0; + return POIXMLUnits.parsePercent(rPr.xgetBaseline()) < 0; } return false; } @@ -281,7 +283,7 @@ public class XSSFTextRun { /** * @return whether a run of text will be formatted as a superscript text. Default is false. */ - public TextCap getTextCap() { + public TextCap getTextCap() { CTTextCharacterProperties rPr = getRPr(); if(rPr.isSetCap()){ return TextCap.values()[rPr.getCap().intValue() - 1]; diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFVMLDrawing.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFVMLDrawing.java index 10ed7eae70..756ef39b03 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFVMLDrawing.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFVMLDrawing.java @@ -45,7 +45,6 @@ import com.microsoft.schemas.vml.CTShape; import com.microsoft.schemas.vml.CTShapetype; import com.microsoft.schemas.vml.STExt; import com.microsoft.schemas.vml.STStrokeJoinStyle; -import com.microsoft.schemas.vml.STTrueFalse; import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.ooxml.util.DocumentHelper; import org.apache.poi.openxml4j.opc.PackagePart; @@ -55,6 +54,7 @@ import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STTrueFalse; import org.w3c.dom.Document; import org.xml.sax.SAXException; diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFSingleXmlCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFSingleXmlCell.java index 0435f69bb5..79cc921a34 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFSingleXmlCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFSingleXmlCell.java @@ -24,64 +24,63 @@ import org.apache.poi.xssf.usermodel.XSSFRow; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSingleXmlCell; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXmlCellPr; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXmlPr; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXmlDataType.Enum; /** - * + * * This class is a wrapper around the CTSingleXmlCell (Open Office XML Part 4: - * chapter 3.5.2.1) - * + * chapter 3.5.2.1) + * - * + * * @author Roberto Manicardi * */ public class XSSFSingleXmlCell { - + private CTSingleXmlCell singleXmlCell; private SingleXmlCells parent; - - + + public XSSFSingleXmlCell(CTSingleXmlCell singleXmlCell, SingleXmlCells parent){ this.singleXmlCell = singleXmlCell; this.parent = parent; } - + /** * Gets the XSSFCell referenced by the R attribute or creates a new one if cell doesn't exists * @return the referenced XSSFCell, null if the cell reference is invalid */ public XSSFCell getReferencedCell(){ XSSFCell cell = null; - - - CellReference cellReference = new CellReference(singleXmlCell.getR()); - + + + CellReference cellReference = new CellReference(singleXmlCell.getR()); + XSSFRow row = parent.getXSSFSheet().getRow(cellReference.getRow()); if(row==null){ row = parent.getXSSFSheet().createRow(cellReference.getRow()); } - - cell = row.getCell(cellReference.getCol()); + + cell = row.getCell(cellReference.getCol()); if(cell==null){ cell = row.createCell(cellReference.getCol()); } - - + + return cell; } - + public String getXpath(){ CTXmlCellPr xmlCellPr = singleXmlCell.getXmlCellPr(); CTXmlPr xmlPr = xmlCellPr.getXmlPr(); return xmlPr.getXpath(); } - + public long getMapId(){ return singleXmlCell.getXmlCellPr().getXmlPr().getMapId(); } - public Enum getXmlDataType() { + public String getXmlDataType() { CTXmlCellPr xmlCellPr = singleXmlCell.getXmlCellPr(); CTXmlPr xmlPr = xmlCellPr.getXmlPr(); return xmlPr.getXmlDataType(); diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFXmlColumnPr.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFXmlColumnPr.java index 6fad3dd567..08e9ca05c1 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFXmlColumnPr.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/XSSFXmlColumnPr.java @@ -21,13 +21,12 @@ import org.apache.poi.util.Internal; import org.apache.poi.xssf.usermodel.XSSFTable; import org.apache.poi.xssf.usermodel.XSSFTableColumn; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXmlColumnPr; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXmlDataType.Enum; /** - * + * * This class is a wrapper around the CTXmlColumnPr (Open Office XML Part 4: * chapter 3.5.1.7) - * + * * * @author Roberto Manicardi */ @@ -73,7 +72,7 @@ public class XSSFXmlColumnPr { /** * If the XPath is, for example, /Node1/Node2/Node3 and /Node1/Node2 is the common XPath for the table, the local XPath is /Node3 - * + * * @return the local XPath */ public String getLocalXPath() { @@ -87,7 +86,7 @@ public class XSSFXmlColumnPr { return localXPath.toString(); } - public Enum getXmlDataType() { + public String getXmlDataType() { return ctXmlColumnPr.getXmlDataType(); } diff --git a/src/ooxml/java/org/apache/poi/xwpf/model/WMLHelper.java b/src/ooxml/java/org/apache/poi/xwpf/model/WMLHelper.java deleted file mode 100644 index 0761aebebe..0000000000 --- a/src/ooxml/java/org/apache/poi/xwpf/model/WMLHelper.java +++ /dev/null @@ -1,33 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ -package org.apache.poi.xwpf.model; - -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; - -public final class WMLHelper { - - public static boolean convertSTOnOffToBoolean (STOnOff.Enum value) { - if (value == STOnOff.TRUE || value == STOnOff.ON || value == STOnOff.X_1) { - return true; - } - return false; - } - - public static STOnOff.Enum convertBooleanToSTOnOff (boolean value) { - return (value ? STOnOff.TRUE : STOnOff.FALSE); - } -} diff --git a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java index 7cb5326291..3c956be237 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java +++ b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java @@ -16,6 +16,17 @@ ==================================================================== */ package org.apache.poi.xwpf.model; +import com.microsoft.schemas.office.office.CTLock; +import com.microsoft.schemas.office.office.STConnectType; +import com.microsoft.schemas.vml.CTFormulas; +import com.microsoft.schemas.vml.CTGroup; +import com.microsoft.schemas.vml.CTH; +import com.microsoft.schemas.vml.CTHandles; +import com.microsoft.schemas.vml.CTPath; +import com.microsoft.schemas.vml.CTShape; +import com.microsoft.schemas.vml.CTShapetype; +import com.microsoft.schemas.vml.CTTextPath; +import com.microsoft.schemas.vml.STExt; import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.ooxml.POIXMLDocumentPart.RelationPart; import org.apache.poi.xwpf.usermodel.XWPFDocument; @@ -26,6 +37,7 @@ import org.apache.poi.xwpf.usermodel.XWPFHeaderFooter; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRelation; import org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STTrueFalse; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtrRef; @@ -40,19 +52,6 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.HdrDocument; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr.Enum; -import com.microsoft.schemas.office.office.CTLock; -import com.microsoft.schemas.office.office.STConnectType; -import com.microsoft.schemas.vml.CTFormulas; -import com.microsoft.schemas.vml.CTGroup; -import com.microsoft.schemas.vml.CTH; -import com.microsoft.schemas.vml.CTHandles; -import com.microsoft.schemas.vml.CTPath; -import com.microsoft.schemas.vml.CTShape; -import com.microsoft.schemas.vml.CTShapetype; -import com.microsoft.schemas.vml.CTTextPath; -import com.microsoft.schemas.vml.STExt; -import com.microsoft.schemas.vml.STTrueFalse; - /** * A .docx file can have no headers/footers, the same header/footer * on each page, odd/even page footers, and optionally also @@ -305,7 +304,7 @@ public class XWPFHeaderFooterPolicy { ref.setType(type); ref.setId(doc.getRelationId(wrapper)); } - + public XWPFHeader getFirstPageHeader() { return firstPageHeader; } @@ -361,7 +360,7 @@ public class XWPFHeaderFooterPolicy { } return defaultHeader; } - + /** * Get this section header for the given type * @@ -392,7 +391,7 @@ public class XWPFHeaderFooterPolicy { } return defaultFooter; } - + /** * Get this section footer for the given type * @@ -407,7 +406,7 @@ public class XWPFHeaderFooterPolicy { } return defaultFooter; } - + public void createWatermark(String text) { XWPFParagraph[] pars = new XWPFParagraph[1]; diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/ParagraphAlignment.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/ParagraphAlignment.java index 9f6496d49f..e3599032f8 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/ParagraphAlignment.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/ParagraphAlignment.java @@ -20,6 +20,8 @@ package org.apache.poi.xwpf.usermodel; import java.util.HashMap; import java.util.Map; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; + /** * Specifies all types of alignment which are available to be applied to objects in a * WordprocessingML document @@ -29,18 +31,21 @@ import java.util.Map; public enum ParagraphAlignment { //YK: TODO document each alignment option - LEFT(1), - CENTER(2), - RIGHT(3), - BOTH(4), - MEDIUM_KASHIDA(5), - DISTRIBUTE(6), - NUM_TAB(7), - HIGH_KASHIDA(8), - LOW_KASHIDA(9), - THAI_DISTRIBUTE(10); + START(STJc.INT_START), // 1 + CENTER(STJc.INT_CENTER), // 2 + END(STJc.INT_END), // 3 + BOTH(STJc.INT_BOTH), // 4 + MEDIUM_KASHIDA(STJc.INT_MEDIUM_KASHIDA), // 5 + DISTRIBUTE(STJc.INT_DISTRIBUTE), // 6 + NUM_TAB(STJc.INT_NUM_TAB), // 7 + HIGH_KASHIDA(STJc.INT_HIGH_KASHIDA), // 8 + LOW_KASHIDA(STJc.INT_LOW_KASHIDA), // 9 + THAI_DISTRIBUTE(STJc.INT_THAI_DISTRIBUTE), // 10 + LEFT(STJc.INT_LEFT), // 11 + RIGHT(STJc.INT_RIGHT) // 12 + ; - private static Map imap = new HashMap<>(); + private static final Map imap = new HashMap<>(); static { for (ParagraphAlignment p : values()) { diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java index 82acbb2817..74913cf815 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/TOC.java @@ -21,6 +21,7 @@ import java.math.BigInteger; import org.apache.poi.util.Internal; import org.apache.poi.util.LocaleUtil; import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute.Space; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff1; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; @@ -35,7 +36,6 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTabStop; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTabs; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabTlc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTheme; @@ -61,8 +61,8 @@ public class TOC { fonts.setEastAsiaTheme(STTheme.MINOR_H_ANSI); fonts.setHAnsiTheme(STTheme.MINOR_H_ANSI); fonts.setCstheme(STTheme.MINOR_BIDI); - rPr.addNewB().setVal(STOnOff.OFF); - rPr.addNewBCs().setVal(STOnOff.OFF); + rPr.addNewB().setVal(STOnOff1.OFF); + rPr.addNewBCs().setVal(STOnOff1.OFF); rPr.addNewColor().setVal("auto"); rPr.addNewSz().setVal(BigInteger.valueOf(24)); rPr.addNewSzCs().setVal(BigInteger.valueOf(24)); diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultParagraphStyle.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultParagraphStyle.java index 9a1a973e8b..77679d2db7 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultParagraphStyle.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultParagraphStyle.java @@ -17,26 +17,26 @@ package org.apache.poi.xwpf.usermodel; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; +import org.apache.poi.ooxml.util.POIXMLUnits; +import org.apache.poi.util.Units; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPrGeneral; /** * Default Paragraph style, from which other styles will override * TODO Share logic with {@link XWPFParagraph} which also uses CTPPr */ public class XWPFDefaultParagraphStyle { - private CTPPr ppr; + private final CTPPrGeneral ppr; - public XWPFDefaultParagraphStyle(CTPPr ppr) { + public XWPFDefaultParagraphStyle(CTPPrGeneral ppr) { this.ppr = ppr; } - protected CTPPr getPPr() { + protected CTPPrGeneral getPPr() { return ppr; } public int getSpacingAfter() { - if (ppr.isSetSpacing()) - return ppr.getSpacing().getAfter().intValue(); - return -1; + return ppr.isSetSpacing() ? (int) Units.toDXA(POIXMLUnits.parseLength(ppr.getSpacing().xgetAfter())) : -1; } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultRunStyle.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultRunStyle.java index 140ca8bfc2..8eb8f6c1e0 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultRunStyle.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultRunStyle.java @@ -17,12 +17,14 @@ package org.apache.poi.xwpf.usermodel; -import org.apache.poi.util.Removal; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; - import java.math.BigDecimal; import java.math.RoundingMode; +import org.apache.poi.ooxml.util.POIXMLUnits; +import org.apache.poi.util.Removal; +import org.apache.poi.util.Units; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; + /** * Default Character Run style, from which other styles will override * TODO Share logic with {@link XWPFRun} which also uses CTRPr @@ -64,8 +66,8 @@ public class XWPFDefaultRunStyle { } private BigDecimal getFontSizeAsBigDecimal(int scale) { - return (rpr != null && rpr.isSetSz()) ? - new BigDecimal(rpr.getSz().getVal()).divide(BigDecimal.valueOf(2)).setScale(scale, RoundingMode.HALF_UP) : - null; + return (rpr != null && rpr.isSetSz()) + ? BigDecimal.valueOf(Units.toPoints(POIXMLUnits.parseLength(rpr.getSz().xgetVal()))).divide(BigDecimal.valueOf(4), scale, RoundingMode.HALF_UP) + : null; } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java index 420bbb3c7f..64b877060b 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java @@ -64,27 +64,8 @@ import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTComment; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocument1; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CommentsDocument; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.EndnotesDocument; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.FootnotesDocument; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.NumberingDocument; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STDocProtect; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.StylesDocument; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff1; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; /** *

    High(ish) level class for working with .docx files.

    @@ -508,7 +489,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { CTSectPr ctSectPr = getSection(); if (!ctSectPr.isSetTitlePg()) { CTOnOff titlePg = ctSectPr.addNewTitlePg(); - titlePg.setVal(STOnOff.ON); + titlePg.setVal(STOnOff1.ON); } // } else if (type == HeaderFooterType.EVEN) { // TODO Add support for Even/Odd headings and footers @@ -530,7 +511,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { CTSectPr ctSectPr = getSection(); if (!ctSectPr.isSetTitlePg()) { CTOnOff titlePg = ctSectPr.addNewTitlePg(); - titlePg.setVal(STOnOff.ON); + titlePg.setVal(STOnOff1.ON); } // } else if (type == HeaderFooterType.EVEN) { // TODO Add support for Even/Odd headings and footers diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java index 58064b00fd..bbf59867d1 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java @@ -23,10 +23,13 @@ import java.util.List; import java.util.function.Function; import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.ooxml.util.POIXMLUnits; import org.apache.poi.util.Internal; +import org.apache.poi.util.Units; import org.apache.poi.wp.usermodel.Paragraph; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff1; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; /** @@ -429,7 +432,7 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para */ public boolean isKeepNext() { if (getCTP() != null && getCTP().getPPr() != null && getCTP().getPPr().isSetKeepNext()) { - return getCTP().getPPr().getKeepNext().getVal() == STOnOff.ON; + return POIXMLUnits.parseOnOff(getCTP().getPPr().getKeepNext().xgetVal()); } return false; } @@ -441,7 +444,7 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para */ public void setKeepNext(boolean keepNext) { CTOnOff state = CTOnOff.Factory.newInstance(); - state.setVal(keepNext ? STOnOff.ON : STOnOff.OFF); + state.setVal(keepNext ? STOnOff1.ON : STOnOff1.OFF); getCTP().getPPr().setKeepNext(state); } @@ -874,24 +877,7 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para if (ctPageBreak == null) { return false; } - return isTruelike(ctPageBreak.getVal()); - } - - private static boolean isTruelike(final STOnOff.Enum value) { - if (value == null) { - return false; - } - switch (value.intValue()) { - case STOnOff.INT_TRUE: - case STOnOff.INT_X_1: - case STOnOff.INT_ON: - return true; - /*STOnOff.INT_FALSE: - STOnOff.INT_X_0: - STOnOff.INT_OFF:*/ - default: - return false; - } + return POIXMLUnits.parseOnOff(ctPageBreak.xgetVal()); } /** @@ -914,11 +900,7 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para CTPPr ppr = getCTPPr(); CTOnOff ctPageBreak = ppr.isSetPageBreakBefore() ? ppr .getPageBreakBefore() : ppr.addNewPageBreakBefore(); - if (pageBreak) { - ctPageBreak.setVal(STOnOff.TRUE); - } else { - ctPageBreak.setVal(STOnOff.FALSE); - } + ctPageBreak.setVal(pageBreak ? STOnOff1.ON : STOnOff1.OFF); } /** @@ -929,7 +911,7 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para */ public int getSpacingAfter() { CTSpacing spacing = getCTSpacing(false); - return (spacing != null && spacing.isSetAfter()) ? spacing.getAfter().intValue() : -1; + return (spacing != null && spacing.isSetAfter()) ? (int)Units.toDXA(POIXMLUnits.parseLength(spacing.xgetAfter())) : -1; } /** @@ -995,7 +977,7 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para */ public int getSpacingBefore() { CTSpacing spacing = getCTSpacing(false); - return (spacing != null && spacing.isSetBefore()) ? spacing.getBefore().intValue() : -1; + return (spacing != null && spacing.isSetBefore()) ? (int)Units.toDXA(POIXMLUnits.parseLength(spacing.xgetBefore())) : -1; } /** @@ -1088,12 +1070,11 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para CTSpacing spacing = getCTSpacing(false); if (spacing == null || !spacing.isSetLine()) { return -1; - } else if (spacing.getLineRule() == null || spacing.getLineRule() == STLineSpacingRule.AUTO) { - BigInteger[] val = spacing.getLine().divideAndRemainder(BigInteger.valueOf(240L)); - return val[0].doubleValue() + (val[1].doubleValue() / 240L); } - BigInteger[] val = spacing.getLine().divideAndRemainder(BigInteger.valueOf(20L)); - return val[0].doubleValue() + (val[1].doubleValue() / 20L); + + double twips = Units.toDXA(POIXMLUnits.parseLength(spacing.xgetLine())); + + return twips / ((spacing.getLineRule() == null || spacing.getLineRule() == STLineSpacingRule.AUTO) ? 240 : 20); } /** @@ -1143,8 +1124,9 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para */ public int getIndentationLeft() { CTInd indentation = getCTInd(false); - return (indentation != null && indentation.isSetLeft()) ? indentation.getLeft().intValue() - : -1; + return (indentation != null && indentation.isSetLeft()) + ? (int)Units.toDXA(POIXMLUnits.parseLength(indentation.xgetLeft())) + : -1; } /** @@ -1208,8 +1190,9 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para public int getIndentationRight() { CTInd indentation = getCTInd(false); - return (indentation != null && indentation.isSetRight()) ? indentation.getRight().intValue() - : -1; + return (indentation != null && indentation.isSetRight()) + ? (int)Units.toDXA(POIXMLUnits.parseLength(indentation.xgetRight())) + : -1; } /** @@ -1272,7 +1255,8 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para */ public int getIndentationHanging() { CTInd indentation = getCTInd(false); - return (indentation != null && indentation.isSetHanging()) ? indentation.getHanging().intValue() : -1; + return (indentation != null && indentation.isSetHanging()) + ? (int)Units.toDXA(POIXMLUnits.parseLength(indentation.xgetHanging())) : -1; } /** @@ -1312,8 +1296,9 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para */ public int getIndentationFirstLine() { CTInd indentation = getCTInd(false); - return (indentation != null && indentation.isSetFirstLine()) ? indentation.getFirstLine().intValue() - : -1; + return (indentation != null && indentation.isSetFirstLine()) + ? (int)Units.toDXA(POIXMLUnits.parseLength(indentation.xgetFirstLine())) + : -1; } /** @@ -1376,12 +1361,7 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para */ @Override public boolean isWordWrapped() { - CTOnOff wordWrap = getCTPPr().isSetWordWrap() ? getCTPPr() - .getWordWrap() : null; - if (wordWrap != null) { - return isTruelike(wordWrap.getVal()); - } - return false; + return getCTPPr().isSetWordWrap() && POIXMLUnits.parseOnOff(getCTPPr().getWordWrap()); } /** @@ -1394,12 +1374,14 @@ public class XWPFParagraph implements IBodyElement, IRunBody, ISDTContents, Para */ @Override public void setWordWrapped(boolean wrap) { - CTOnOff wordWrap = getCTPPr().isSetWordWrap() ? getCTPPr() - .getWordWrap() : getCTPPr().addNewWordWrap(); + CTPPr ppr = getCTPPr(); if (wrap) { - wordWrap.setVal(STOnOff.TRUE); + CTOnOff wordWrap = ppr.isSetWordWrap() ? ppr.getWordWrap() : ppr.addNewWordWrap(); + wordWrap.setVal(STOnOff1.ON); } else { - wordWrap.unsetVal(); + if (ppr.isSetWordWrap()) { + ppr.unsetWordWrap(); + } } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java index bbc49aea1f..c7ba363119 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java @@ -32,10 +32,12 @@ import javax.xml.namespace.QName; import org.apache.poi.ooxml.POIXMLException; import org.apache.poi.ooxml.util.DocumentHelper; +import org.apache.poi.ooxml.util.POIXMLUnits; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.HexDump; import org.apache.poi.util.Internal; import org.apache.poi.util.Removal; +import org.apache.poi.util.Units; import org.apache.poi.wp.usermodel.CharacterRun; import org.apache.xmlbeans.SimpleValue; import org.apache.xmlbeans.XmlCursor; @@ -61,6 +63,9 @@ import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture; import org.openxmlformats.schemas.drawingml.x2006.picture.CTPictureNonVisual; import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor; import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STHexColorRGB; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff1; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STVerticalAlignRun; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import org.w3c.dom.NodeList; import org.w3c.dom.Text; @@ -223,15 +228,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { * For isBold, isItalic etc */ private static boolean isCTOnOff(CTOnOff onoff) { - if (!onoff.isSetVal()) { - return true; - } - final STOnOff.Enum val = onoff.getVal(); - return ( - (STOnOff.TRUE == val) || - (STOnOff.X_1 == val) || - (STOnOff.ON == val) - ); + return !onoff.isSetVal() || POIXMLUnits.parseOnOff(onoff); } /** @@ -297,7 +294,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setBold(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff bold = pr.isSetB() ? pr.getB() : pr.addNewB(); - bold.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + bold.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } /** @@ -408,7 +405,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setItalic(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff italic = pr.isSetI() ? pr.getI() : pr.addNewI(); - italic.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + italic.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } /** @@ -573,7 +570,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setStrikeThrough(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff strike = pr.isSetStrike() ? pr.getStrike() : pr.addNewStrike(); - strike.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + strike.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } @Deprecated @@ -608,7 +605,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setDoubleStrikethrough(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff dstrike = pr.isSetDstrike() ? pr.getDstrike() : pr.addNewDstrike(); - dstrike.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + dstrike.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } @Override @@ -621,7 +618,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setSmallCaps(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff caps = pr.isSetSmallCaps() ? pr.getSmallCaps() : pr.addNewSmallCaps(); - caps.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + caps.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } @Override @@ -634,7 +631,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setCapitalized(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff caps = pr.isSetCaps() ? pr.getCaps() : pr.addNewCaps(); - caps.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + caps.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } @Override @@ -647,7 +644,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setShadow(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff shadow = pr.isSetShadow() ? pr.getShadow() : pr.addNewShadow(); - shadow.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + shadow.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } @Override @@ -660,7 +657,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setImprinted(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff imprinted = pr.isSetImprint() ? pr.getImprint() : pr.addNewImprint(); - imprinted.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + imprinted.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } @Override @@ -673,7 +670,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setEmbossed(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff emboss = pr.isSetEmboss() ? pr.getEmboss() : pr.addNewEmboss(); - emboss.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + emboss.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } /** @@ -704,7 +701,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { if (pr == null || !pr.isSetKern()) { return 0; } - return pr.getKern().getVal().intValue(); + return (int)POIXMLUnits.parseLength(pr.getKern().xgetVal()); } @Override @@ -735,7 +732,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { if (pr == null || !pr.isSetSpacing()) { return 0; } - return pr.getSpacing().getVal().intValue(); + return (int)Units.toDXA(POIXMLUnits.parseLength(pr.getSpacing().xgetVal())); } @Override @@ -878,9 +875,9 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { private BigDecimal getFontSizeAsBigDecimal(int scale) { CTRPr pr = getRunProperties(false); - return (pr != null && pr.isSetSz()) ? - new BigDecimal(pr.getSz().getVal()).divide(BigDecimal.valueOf(2)).setScale(scale, RoundingMode.HALF_UP) : - null; + return (pr != null && pr.isSetSz()) + ? BigDecimal.valueOf(Units.toPoints(POIXMLUnits.parseLength(pr.getSz().xgetVal()))).divide(BigDecimal.valueOf(4), scale, RoundingMode.HALF_UP) + : null; } /** @@ -936,7 +933,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { */ public int getTextPosition() { CTRPr pr = getRunProperties(false); - return (pr != null && pr.isSetPosition()) ? pr.getPosition().getVal().intValue() + return (pr != null && pr.isSetPosition()) ? (int)(Units.toPoints(POIXMLUnits.parseLength(pr.getPosition().xgetVal())) / 2.) : -1; } @@ -1385,11 +1382,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { if (ctfldChar.getFldCharType() == STFldCharType.BEGIN) { if (ctfldChar.getFfData() != null) { for (CTFFCheckBox checkBox : ctfldChar.getFfData().getCheckBoxList()) { - if (checkBox.getDefault() != null && checkBox.getDefault().getVal() == STOnOff.X_1) { - text.append("|X|"); - } else { - text.append("|_|"); - } + text.append((checkBox.getDefault() != null && POIXMLUnits.parseOnOff(checkBox.getDefault().xgetVal())) ? "|X|" : "|_|"); } } } @@ -1455,13 +1448,14 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { * @since 4.0.0 */ public int getTextScale() { - CTRPr pr = getRunProperties(true); - CTTextScale scale = pr.isSetW() ? pr.getW() : pr.addNewW(); - int value = scale.getVal(); - if (value == 0) { - value = 100; // 100% scaling, that is, no change. See 17.3.2.43 w (Expanded/Compressed Text) + CTRPr pr = getRunProperties(false); + if (pr == null || !pr.isSetW()) { + return 100; } - return value; + + int value = POIXMLUnits.parsePercent(pr.getW().xgetVal()); + // 100% scaling, that is, no change. See 17.3.2.43 w (Expanded/Compressed Text) + return value == 0 ? 100 : value / 1000; } /** @@ -1522,7 +1516,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { public void setVanish(boolean value) { CTRPr pr = getRunProperties(true); CTOnOff vanish = pr.isSetVanish() ? pr.getVanish() : pr.addNewVanish(); - vanish.setVal(value ? STOnOff.TRUE : STOnOff.FALSE); + vanish.setVal(value ? STOnOff1.ON : STOnOff1.OFF); } /** diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSettings.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSettings.java index 39a8444b8b..8df9e3f806 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSettings.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSettings.java @@ -29,19 +29,20 @@ import javax.xml.namespace.QName; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.ooxml.util.POIXMLUnits; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.poifs.crypt.CryptoFunctions; import org.apache.poi.poifs.crypt.HashAlgorithm; import org.apache.xmlbeans.XmlOptions; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STAlgClass; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STAlgType; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STCryptProv; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff1; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocProtect; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTZoom; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STAlgClass; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STAlgType; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STCryptProv; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STDocProtect; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.SettingsDocument; public class XWPFSettings extends POIXMLDocumentPart { @@ -54,7 +55,7 @@ public class XWPFSettings extends POIXMLDocumentPart { public XWPFSettings(PackagePart part) throws IOException { super(part); } - + public XWPFSettings() { super(); ctSettings = CTSettings.Factory.newInstance(); @@ -86,12 +87,8 @@ public class XWPFSettings extends POIXMLDocumentPart { zoom = ctSettings.getZoom(); } - - BigInteger percent = zoom.getPercent(); - if(percent == null) { - return 100; - } - return percent.longValue(); + + return (zoom.getPercent() == null) ? 100 : POIXMLUnits.parsePercent(zoom.xgetPercent()) / 1000; } /** @@ -111,7 +108,7 @@ public class XWPFSettings extends POIXMLDocumentPart { CTZoom zoom = ctSettings.getZoom(); zoom.setPercent(BigInteger.valueOf(zoomPercent)); } - + /** * Verifies the documentProtection tag inside settings.xml file
    * if the protection is enforced (w:enforcement="1")
    @@ -127,12 +124,8 @@ public class XWPFSettings extends POIXMLDocumentPart { */ public boolean isEnforcedWith() { CTDocProtect ctDocProtect = ctSettings.getDocumentProtection(); + return ctDocProtect != null && POIXMLUnits.parseOnOff(ctDocProtect.xgetEnforcement()); - if (ctDocProtect == null) { - return false; - } - - return ctDocProtect.getEnforcement().equals(STOnOff.X_1); } /** @@ -151,12 +144,8 @@ public class XWPFSettings extends POIXMLDocumentPart { */ public boolean isEnforcedWith(STDocProtect.Enum editValue) { CTDocProtect ctDocProtect = ctSettings.getDocumentProtection(); + return ctDocProtect != null && POIXMLUnits.parseOnOff(ctDocProtect.xgetEnforcement()) && ctDocProtect.getEdit().equals(editValue); - if (ctDocProtect == null) { - return false; - } - - return ctDocProtect.getEnforcement().equals(STOnOff.X_1) && ctDocProtect.getEdit().equals(editValue); } /** @@ -173,7 +162,7 @@ public class XWPFSettings extends POIXMLDocumentPart { *
    */ public void setEnforcementEditValue(org.openxmlformats.schemas.wordprocessingml.x2006.main.STDocProtect.Enum editValue) { - safeGetDocumentProtection().setEnforcement(STOnOff.X_1); + safeGetDocumentProtection().setEnforcement(STOnOff1.ON); safeGetDocumentProtection().setEdit(editValue); } @@ -196,7 +185,7 @@ public class XWPFSettings extends POIXMLDocumentPart { */ public void setEnforcementEditValue(org.openxmlformats.schemas.wordprocessingml.x2006.main.STDocProtect.Enum editValue, String password, HashAlgorithm hashAlgo) { - safeGetDocumentProtection().setEnforcement(STOnOff.X_1); + safeGetDocumentProtection().setEnforcement(STOnOff1.ON); safeGetDocumentProtection().setEdit(editValue); if (password == null) { @@ -233,7 +222,7 @@ public class XWPFSettings extends POIXMLDocumentPart { if (hashAlgo == null) { hashAlgo = HashAlgorithm.sha1; } - + switch (hashAlgo) { case md2: providerType = STCryptProv.RSA_FULL; @@ -295,7 +284,7 @@ public class XWPFSettings extends POIXMLDocumentPart { /** * Validates the existing password * - * @param password + * @param password the password * @return true, only if password was set and equals, false otherwise */ public boolean validateProtectionPassword(String password) { @@ -348,7 +337,7 @@ public class XWPFSettings extends POIXMLDocumentPart { * it sets the value of enforcement to "0" (w:enforcement="0")
    */ public void removeEnforcement() { - safeGetDocumentProtection().setEnforcement(STOnOff.X_0); + safeGetDocumentProtection().setEnforcement(STOnOff1.OFF); } /** @@ -365,12 +354,12 @@ public class XWPFSettings extends POIXMLDocumentPart { */ public void setUpdateFields() { CTOnOff onOff = CTOnOff.Factory.newInstance(); - onOff.setVal(STOnOff.TRUE); + onOff.setVal(STOnOff1.ON); ctSettings.setUpdateFields(onOff); } boolean isUpdateFields() { - return ctSettings.isSetUpdateFields() && ctSettings.getUpdateFields().getVal() == STOnOff.TRUE; + return ctSettings.isSetUpdateFields() && POIXMLUnits.parseOnOff(ctSettings.getUpdateFields().xgetVal()); } /** @@ -443,12 +432,12 @@ public class XWPFSettings extends POIXMLDocumentPart { /** * Turn separate even-and-odd headings on or off * - * @param enable true to turn on separate even and odd headings, + * @param enable true to turn on separate even and odd headings, * false to turn off even and odd headings. */ public void setEvenAndOddHeadings(boolean enable) { CTOnOff onOff = CTOnOff.Factory.newInstance(); - onOff.setVal(enable ? STOnOff.TRUE : STOnOff.FALSE); + onOff.setVal(enable ? STOnOff1.ON : STOnOff1.OFF); ctSettings.setEvenAndOddHeaders(onOff); } @@ -464,12 +453,12 @@ public class XWPFSettings extends POIXMLDocumentPart { /** * Turn mirrored margins on or off * - * @param enable true to turn on mirrored margins, + * @param enable true to turn on mirrored margins, * false to turn off mirrored marginss. */ public void setMirrorMargins(boolean enable) { CTOnOff onOff = CTOnOff.Factory.newInstance(); - onOff.setVal(enable ? STOnOff.TRUE : STOnOff.FALSE); + onOff.setVal(enable ? STOnOff1.ON : STOnOff1.OFF); ctSettings.setMirrorMargins(onOff); } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java index 0705bbe696..b8294c771a 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java @@ -26,10 +26,12 @@ import java.util.function.Consumer; import java.util.function.Function; import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.ooxml.util.POIXMLUnits; import org.apache.poi.util.Internal; +import org.apache.poi.util.Units; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJcTable; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTString; @@ -40,7 +42,7 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJcTable; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; /** @@ -279,7 +281,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { */ public int getWidth() { CTTblPr tblPr = getTblPr(); - return tblPr.isSetTblW() ? tblPr.getTblW().getW().intValue() : -1; + return tblPr.isSetTblW() ? (int)Units.toDXA(POIXMLUnits.parseLength(tblPr.getTblW().xgetW())) : -1; } /** @@ -407,8 +409,8 @@ public class XWPFTable implements IBodyElement, ISDTContents { */ public void setTableAlignment(TableRowAlign tra) { CTTblPr tPr = getTblPr(true); - CTJc jc = tPr.isSetJc() ? tPr.getJc() : tPr.addNewJc(); - jc.setVal(STJc.Enum.forInt(tra.getValue())); + CTJcTable jc = tPr.isSetJc() ? tPr.getJc() : tPr.addNewJc(); + jc.setVal(STJcTable.Enum.forInt(tra.getValue())); } /** @@ -985,7 +987,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { if (tcm != null) { CTTblWidth tw = margin.apply(tcm); if (tw != null) { - return tw.getW().intValue(); + return (int) Units.toDXA(POIXMLUnits.parseLength(tw.xgetW())); } } return 0; @@ -1154,11 +1156,11 @@ public class XWPFTable implements IBodyElement, ISDTContents { if (typeValue == STTblWidth.DXA || typeValue == STTblWidth.AUTO || typeValue == STTblWidth.NIL) { - result = 0.0 + ctWidth.getW().intValue(); + result = 0.0 + Units.toDXA(POIXMLUnits.parseLength(ctWidth.xgetW())); } else if (typeValue == STTblWidth.PCT) { // Percentage values are stored as integers that are 50 times // percentage. - result = ctWidth.getW().intValue() / 50.0; + result = Units.toDXA(POIXMLUnits.parseLength(ctWidth.xgetW())) / 50.0; } else { // Should never get here } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java index 8490154cbf..57f7d20516 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java @@ -23,7 +23,9 @@ import java.util.HashMap; import java.util.List; import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.ooxml.util.POIXMLUnits; import org.apache.poi.util.Internal; +import org.apache.poi.util.Units; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; @@ -528,8 +530,8 @@ public class XWPFTableCell implements IBody, ICell { * @return Width value as a double-precision decimal. * @since 4.0.0 */ - public double getWidthDecimal() { - return XWPFTable.getWidthDecimal(getTcWidth()); + public double getWidthDecimal() { + return XWPFTable.getWidthDecimal(getTcWidth()); } /** @@ -541,7 +543,7 @@ public class XWPFTableCell implements IBody, ICell { * @since 4.0.0 */ public TableWidthType getWidthType() { - return XWPFTable.getWidthType(getTcWidth()); + return XWPFTable.getWidthType(getTcWidth()); } /** @@ -551,7 +553,7 @@ public class XWPFTableCell implements IBody, ICell { * @since 4.0.0 */ public void setWidth(String widthValue) { - XWPFTable.setWidthValue(widthValue, getTcWidth()); + XWPFTable.setWidthValue(widthValue, getTcWidth()); } private CTTblWidth getTcWidth() { @@ -582,6 +584,6 @@ public class XWPFTableCell implements IBody, ICell { } public int getWidth() { - return getTcWidth().getW().intValue(); + return (int) Units.toDXA(POIXMLUnits.parseLength(getTcWidth().xgetW())); } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java index 953ca6db08..c01643ec0d 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java @@ -20,10 +20,12 @@ import java.math.BigInteger; import java.util.ArrayList; import java.util.List; +import org.apache.poi.ooxml.util.POIXMLUnits; import org.apache.poi.util.Internal; -import org.apache.poi.xwpf.model.WMLHelper; +import org.apache.poi.util.Units; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff1; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHeight; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; @@ -101,7 +103,7 @@ public class XWPFTableRow { */ public int getHeight() { CTTrPr properties = getTrPr(); - return properties.sizeOfTrHeightArray() == 0 ? 0 : properties.getTrHeightArray(0).getVal().intValue(); + return properties.sizeOfTrHeightArray() == 0 ? 0 : (int) Units.toDXA(POIXMLUnits.parseLength(properties.getTrHeightArray(0).xgetVal())); } /** @@ -229,7 +231,7 @@ public class XWPFTableRow { CTTrPr trpr = getTrPr(); if (trpr.sizeOfCantSplitArray() > 0) { CTOnOff onoff = trpr.getCantSplitArray(0); - isCant = (onoff.isSetVal() ? WMLHelper.convertSTOnOffToBoolean(onoff.getVal()) : true); + isCant = !onoff.isSetVal() || POIXMLUnits.parseOnOff(onoff.xgetVal()); } } return isCant; @@ -246,7 +248,7 @@ public class XWPFTableRow { public void setCantSplitRow(boolean split) { CTTrPr trpr = getTrPr(); CTOnOff onoff = (trpr.sizeOfCantSplitArray() > 0 ? trpr.getCantSplitArray(0) : trpr.addNewCantSplit()); - onoff.setVal(WMLHelper.convertBooleanToSTOnOff(split)); + onoff.setVal(split ? STOnOff1.ON : STOnOff1.OFF); } /** @@ -254,7 +256,7 @@ public class XWPFTableRow { * table split across pages. NOTE - Word will not repeat a table row unless * all preceding rows of the table are also repeated. This function returns * false if the row will not be repeated even if the repeat tag is present - * for this row. + * for this row. * * @return true if table's header row should be repeated at the top of each * page of table, false otherwise. @@ -269,14 +271,14 @@ public class XWPFTableRow { } return repeat; } - + private boolean getRepeat() { boolean repeat = false; if (ctRow.isSetTrPr()) { CTTrPr trpr = getTrPr(); if (trpr.sizeOfTblHeaderArray() > 0) { CTOnOff rpt = trpr.getTblHeaderArray(0); - repeat = (rpt.isSetVal() ? WMLHelper.convertSTOnOffToBoolean(rpt.getVal()) : true); + repeat = !rpt.isSetVal() || POIXMLUnits.parseOnOff(rpt.xgetVal()); } } return repeat; @@ -293,6 +295,6 @@ public class XWPFTableRow { public void setRepeatHeader(boolean repeat) { CTTrPr trpr = getTrPr(); CTOnOff onoff = (trpr.sizeOfTblHeaderArray() > 0 ? trpr.getTblHeaderArray(0) : trpr.addNewTblHeader()); - onoff.setVal(WMLHelper.convertBooleanToSTOnOff(repeat)); + onoff.setVal(repeat ? STOnOff1.ON : STOnOff1.OFF); } } diff --git a/src/ooxml/resources/org/apache/poi/schemas/OfficeOpenXML-XMLSchema-Transitional.zip b/src/ooxml/resources/org/apache/poi/schemas/OfficeOpenXML-XMLSchema-Transitional.zip new file mode 100644 index 0000000000000000000000000000000000000000..5a2e31dd99eebbc0a20fd1fbf8876d839b747368 GIT binary patch literal 99115 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 v7MP+%$s5;)?3B7+I?Rn+o9n3E`EXX5 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%0DyZ6IBX0RjmS-7r6T4HXM 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 hkMm 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 literal 0 HcmV?d00001 diff --git a/src/ooxml/resources/org/apache/poi/schemas/OfficeOpenXML-XMLSchema.zip b/src/ooxml/resources/org/apache/poi/schemas/OfficeOpenXML-XMLSchema.zip deleted file mode 100644 index dacf2bd59ac16c1884f9119e0d384cea73731a0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222730 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 literal 3349 zcmZu!c{~){8Xm^Z5Xl;nC1l^SWs4ZQW@L#ZhOrK2$P!Vqm7TJ0Q?f*s>}!mDH^yWs zOCd{^n9Pt|-M)Lj@7`bM{PF(I`JMMU|2*&WKChV}kb)He0MGzHb(a-n8Cde>$N&Hb zN&w*8=`F(BQNkDI;ec{Qcp>4g-bl#+q*FO`&}&xuObd0N#+l8=A}qPCgHAucD*$Lr zFGx3bOViNZnx+;?j7~#r6y#0Xe_40PNOriQ<@?#!-(RU_VSfIB$!M8&)g@^~JjZTI zf2v%E&MReS=JqFV)I*ntRANe?T>MMLB+~TmxGM~sVSLj}|2hL)pv|`;n|7S-tIqQ< zRLx{jVtl;t*_TGVPE<=+)S)hi*~GY6^MK*ttz^!s?>ZZVpz5D<@;AC-hubEg}a*N2hsDcgN7m;EgSYuN6v?jY^eU%kF3Y_ztij6DFQ&!h2Z8bVJlc zn1@ehiUS9_qaP~}Dwn;LYbbUbbAWDA3f4Nw{a)9+ZHh7%E57^C|Ges_Ob4F1PV_6G zunI*MhdatsW}k_2;Fbc3{9{q4TIE1nc!H~E(tD#bssb}NE_}0?iJI8s3Mm**noRl` z>qf||dHhxf+aYQ_6u`8ZAF}iT(=c7{p3~X0Jxf#@@Xio65f&O4RuETKk4)c)KcVjOT-2(&X5ZxmnsgA_@(%Ny_(Cr| z{IK#;iJC)ul8xMeGoOFFqsLLCrq)jN*R$&gbB_~Um7hSf|Iz_ods)G@vyGpF8~~7} z0RY(kqJtyC7iQ**@P_%KTw%ZYkTz^Gt9hn(TfgN|?bQ_H{L)epsuE~+zV1c+R*NhG z#-oPM`JPd>%SJ)Mq~(_Y&r9Y7;lk=8TSKEKr1!hqdF{gNY2*E8iTT;a({O1gTB|i# z*k0-f(>EsS)lc?5p~2^RwA90xY3cHSq0Cg;{DLnw$*MSzA8n(;FL$t@wpy6=i$;}6 z5;}}OP)a{KK>2+XbdotyDV-_pdX(WptgvhIEk3nclFtX$aobZMI-ij3MykzrT%P#Jxl%ZpUfp{Gu3(v1=wh z0R}@_=k&QXPNaD3dO~QTU&qCo=w-RFCRbIpGV$U-Az3fgRQx8d^zSY_nRulT4?a??-w_9{sgXxC;LT_4~}Wn zk2JHFMgFS zWC8#f|KgI9s|&={<(H;>wKPY}NS_JadT~rG6-?&IKjwvv%nuQ9)V4VqE5c5(SqLjf z<1htP5Y2&vd1Zcn%`oj-FTjI9zmbEGwxhfAjd3YetI2va6nlY?GK*3!GB1+ir$xgNF2Nb;vrh~812V}ptKx{RNcOQP zfT2aMOZSfyA||1O=}NU^AScOVcMN35krka?QJFgDB ztZ2QK&|oJVx2nt_HITyGop-RXaA!sg2NChw{YrJkWH;h=K-u(!-Gd39RSW%Ld=ty& zr-5CBX!Yf-_GC(fEh;0#P;e6JC{k9T`($cq!~XB$YxR>uS z^i#EORAGgW9FHpV-nLhw;r%zz@^Wkssse+y8du|Ash;fN=Yx;-1h3tvDnt9b0a=2P1Koi>X4aWZ`DKxo$ZGJ3JT8KU0Rx zw5P)@U9 z<+?j1j>l4z)a3^lBaI9yMuU3EHNU%8zZmT=5T^1?qm4&|)M@+L^wd*Sbx@bHTHiJ; zY+dDyYdU^@M@Q>zK0a4*5`CLLBF61eh84(am9#a;M@=uHO~v>qNM}u5AcIdPX+vLX$;$a%0}=EDNnq&yd`;P!FX=(#`xPc{4@7YGWR=||1`X({?Gsa XD|%*zlvKZ7QJikd)4}JE{@3YWw^R&N diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java index e4d8d4c331..49dba1a091 100644 --- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java +++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestContentTypeManager.java @@ -21,6 +21,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.List; + +import org.apache.poi.ooxml.util.POIXMLUnits; import org.apache.poi.openxml4j.OpenXML4JTestDataSamples; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackageAccess; @@ -47,10 +52,6 @@ import org.junit.Test; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTTwoCellAnchor; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.List; - public final class TestContentTypeManager { /** @@ -176,10 +177,10 @@ public final class TestContentTypeManager { anchor = (XSSFClientAnchor) helper.createClientAnchor(); CTMarker markerFrom = oldAnchor.getFrom(); CTMarker markerTo = oldAnchor.getTo(); - anchor.setDx1((int) markerFrom.getColOff()); - anchor.setDx2((int) markerTo.getColOff()); - anchor.setDy1((int) markerFrom.getRowOff()); - anchor.setDy2((int) markerTo.getRowOff()); + anchor.setDx1((int) POIXMLUnits.parseLength(markerFrom.xgetColOff())); + anchor.setDx2((int) POIXMLUnits.parseLength(markerTo.xgetColOff())); + anchor.setDy1((int) POIXMLUnits.parseLength(markerFrom.xgetRowOff())); + anchor.setDy2((int) POIXMLUnits.parseLength(markerTo.xgetRowOff())); anchor.setCol1(markerFrom.getCol()); anchor.setCol2(markerTo.getCol()); anchor.setRow1(markerFrom.getRow()); diff --git a/src/ooxml/testcases/org/apache/poi/xddf/usermodel/TestXDDFColor.java b/src/ooxml/testcases/org/apache/poi/xddf/usermodel/TestXDDFColor.java index 156133ad62..ca0775dd2f 100644 --- a/src/ooxml/testcases/org/apache/poi/xddf/usermodel/TestXDDFColor.java +++ b/src/ooxml/testcases/org/apache/poi/xddf/usermodel/TestXDDFColor.java @@ -124,5 +124,8 @@ public class TestXDDFColor { built = (XDDFColorRgbPercent) XDDFColor.from(654321, 654321, 654321); assertEquals(expected, built.getXmlObject().toString()); assertEquals("FFFFFF", built.toRGBHex()); + + built = (XDDFColorRgbPercent) XDDFColor.from(75000, 50000, 25000); + assertEquals("BF7F3F", built.toRGBHex()); } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java index 05ab555550..a6f75c520b 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java @@ -17,6 +17,8 @@ package org.apache.poi.xssf.usermodel; +import static org.junit.Assert.*; + import java.io.IOException; import org.apache.poi.common.usermodel.fonts.FontCharset; @@ -33,9 +35,11 @@ import org.apache.poi.util.LocaleUtil; import org.apache.poi.xssf.XSSFITestDataProvider; import org.apache.poi.xssf.XSSFTestDataSamples; import org.junit.Test; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STVerticalAlignRun; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontFamily; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontName; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontScheme; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFontSize; @@ -44,9 +48,6 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTUnderlineProperty; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTVerticalAlignFontProperty; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFontScheme; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun; - -import static org.junit.Assert.*; public final class TestXSSFFont extends BaseTestFont{ @@ -330,7 +331,7 @@ public final class TestXSSFFont extends BaseTestFont{ @Test public void testFamily() { CTFont ctFont=CTFont.Factory.newInstance(); - CTIntProperty family=ctFont.addNewFamily(); + CTFontFamily family=ctFont.addNewFamily(); family.setVal(FontFamily.MODERN.getValue()); ctFont.setFamilyArray(0,family); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java index 8d4cb67a16..e83ad65ead 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java @@ -34,10 +34,10 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.XSSFTestDataSamples; import org.apache.poi.xssf.model.StylesTable; import org.junit.Test; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STXstring; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRPrElt; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.STXstring; /** * Tests functionality of the XSSFRichTextRun object diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFVMLDrawing.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFVMLDrawing.java index b57c255b40..8dbd8e7a81 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFVMLDrawing.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFVMLDrawing.java @@ -35,7 +35,6 @@ import java.util.regex.Pattern; import com.microsoft.schemas.office.excel.CTClientData; import com.microsoft.schemas.office.excel.STObjectType; -import com.microsoft.schemas.office.excel.STTrueFalseBlank; import com.microsoft.schemas.office.office.CTShapeLayout; import com.microsoft.schemas.office.office.STConnectType; import com.microsoft.schemas.office.office.STInsetMode; @@ -43,12 +42,13 @@ import com.microsoft.schemas.vml.CTShadow; import com.microsoft.schemas.vml.CTShape; import com.microsoft.schemas.vml.CTShapetype; import com.microsoft.schemas.vml.STExt; -import com.microsoft.schemas.vml.STTrueFalse; import org.apache.poi.POIDataSamples; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; import org.junit.Test; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STTrueFalse; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STTrueFalseBlank; public class TestXSSFVMLDrawing { diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSF3DChartData.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSF3DChartData.java new file mode 100644 index 0000000000..8a85d8b7ce --- /dev/null +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSF3DChartData.java @@ -0,0 +1,112 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ +package org.apache.poi.xssf.usermodel.charts; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; + +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.SheetBuilder; +import org.apache.poi.xddf.usermodel.chart.AxisPosition; +import org.apache.poi.xddf.usermodel.chart.ChartTypes; +import org.apache.poi.xddf.usermodel.chart.XDDFArea3DChartData; +import org.apache.poi.xddf.usermodel.chart.XDDFBar3DChartData; +import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis; +import org.apache.poi.xddf.usermodel.chart.XDDFChartData; +import org.apache.poi.xddf.usermodel.chart.XDDFDataSource; +import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory; +import org.apache.poi.xddf.usermodel.chart.XDDFLine3DChartData; +import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource; +import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis; +import org.apache.poi.xssf.usermodel.XSSFChart; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFDrawing; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.junit.Test; + +/** + * Tests for XSSF Area3d Charts + */ +public class TestXSSF3DChartData { + + private static final Object[][] plotData = { + {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} + }; + + @Test + public void testArea3D() throws IOException { + // This test currently doesn't produce a valid area 3d chart and is only used to test accessors + try (XSSFWorkbook wb = new XSSFWorkbook()) { + XSSFSheet sheet = (XSSFSheet) new SheetBuilder(wb, plotData).build(); + XSSFDrawing drawing = sheet.createDrawingPatriarch(); + XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 1, 1, 10, 30); + + Map> map = new HashMap<>(); + map.put(ChartTypes.AREA3D, this::handleArea3D); + map.put(ChartTypes.BAR3D, this::handleBar3D); + map.put(ChartTypes.LINE3D, this::handleLine3D); + + for (Map.Entry> me : map.entrySet()) { + + XSSFChart chart = drawing.createChart(anchor); + + XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM); + XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT); + + XDDFDataSource xs = XDDFDataSourcesFactory.fromStringCellRange(sheet, CellRangeAddress.valueOf("A1:J1")); + XDDFNumericalDataSource ys = XDDFDataSourcesFactory.fromNumericCellRange(sheet, CellRangeAddress.valueOf("A2:J2")); + + XDDFChartData data = chart.createData(me.getKey(), bottomAxis, leftAxis); + XDDFChartData.Series series = data.addSeries(xs, ys); + + assertNotNull(series); + assertEquals(1, data.getSeriesCount()); + assertEquals(series, data.getSeries(0)); + chart.plot(data); + + me.getValue().accept(data); + } + } + } + + private void handleArea3D(XDDFChartData data) { + XDDFArea3DChartData xArea3d = (XDDFArea3DChartData)data; + xArea3d.setGapDepth(10); + assertEquals(10, (int)xArea3d.getGapDepth()); + } + + private void handleBar3D(XDDFChartData data) { + XDDFBar3DChartData xBar3d = (XDDFBar3DChartData) data; + xBar3d.setGapDepth(10); + assertEquals(10, (int)xBar3d.getGapDepth()); + xBar3d.setGapWidth(10); + assertEquals(10, (int)xBar3d.getGapWidth()); + } + + private void handleLine3D(XDDFChartData data) { + XDDFLine3DChartData xLine3d = (XDDFLine3DChartData) data; + xLine3d.setGapDepth(10); + assertEquals(10, (int)xLine3d.getGapDepth()); + } +} diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java index 6dd394a215..d9985ab30f 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java @@ -32,6 +32,7 @@ import org.junit.Test; import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture; import org.openxmlformats.schemas.drawingml.x2006.picture.PicDocument; import org.openxmlformats.schemas.drawingml.x2006.picture.impl.PicDocumentImpl; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff1; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBookmark; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd; @@ -46,7 +47,6 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTextAlignment; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTextAlignment; /** @@ -163,9 +163,9 @@ public final class TestXWPFParagraph { assertEquals(10, p.getSpacingBefore()); p.setSpacingAfter(100); - assertEquals(100, spacing.getAfter().intValue()); + assertEquals("100", spacing.xgetAfter().getStringValue()); p.setSpacingBefore(100); - assertEquals(100, spacing.getBefore().intValue()); + assertEquals("100", spacing.xgetBefore().getStringValue()); p.setSpacingBetween(.25, LineSpacingRule.EXACT); assertEquals(.25, p.getSpacingBetween(), 0.01); @@ -197,7 +197,7 @@ public final class TestXWPFParagraph { assertEquals(LineSpacingRule.AT_LEAST, p.getSpacingLineRule()); p.setSpacingAfter(100); - assertEquals(100, spacing.getAfter().intValue()); + assertEquals("100", spacing.xgetAfter().getStringValue()); } } @@ -234,7 +234,7 @@ public final class TestXWPFParagraph { assertEquals(10, p.getIndentationLeft()); p.setIndentationLeft(100); - assertEquals(100, ind.getLeft().intValue()); + assertEquals("100", ind.xgetLeft().getStringValue()); } } @Test @@ -264,11 +264,11 @@ public final class TestXWPFParagraph { CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); CTOnOff wordWrap = ppr.addNewWordWrap(); - wordWrap.setVal(STOnOff.FALSE); + wordWrap.setVal(STOnOff1.OFF); assertFalse(p.isWordWrap()); p.setWordWrapped(true); - assertEquals(STOnOff.TRUE, ppr.getWordWrap().getVal()); + assertEquals("on", ppr.getWordWrap().getVal()); } } @@ -281,11 +281,11 @@ public final class TestXWPFParagraph { CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr(); CTOnOff pageBreak = ppr.addNewPageBreakBefore(); - pageBreak.setVal(STOnOff.FALSE); + pageBreak.setVal(STOnOff1.OFF); assertFalse(p.isPageBreak()); p.setPageBreak(true); - assertEquals(STOnOff.TRUE, ppr.getPageBreakBefore().getVal()); + assertEquals("on", ppr.getPageBreakBefore().getVal()); } } @@ -713,7 +713,7 @@ public final class TestXWPFParagraph { assertTrue(p.removeRun(0)); } } - + @Test public void testFieldRuns() throws IOException { try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("FldSimple.docx")) { @@ -777,7 +777,7 @@ public final class TestXWPFParagraph { /** * Tests for numbered lists - * + * * See also https://github.com/jimklo/apache-poi-sample/blob/master/src/main/java/com/sri/jklo/StyledDocument.java * for someone else trying a similar thing */ diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java index b154f37d41..e29186ab10 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java @@ -16,6 +16,19 @@ ==================================================================== */ package org.apache.poi.xwpf.usermodel; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigInteger; +import java.util.Iterator; +import java.util.List; + import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.LocaleUtil; import org.apache.poi.util.Units; @@ -28,16 +41,19 @@ import org.junit.Test; import org.openxmlformats.schemas.drawingml.x2006.main.CTBlip; import org.openxmlformats.schemas.drawingml.x2006.main.CTBlipFillProperties; import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.math.BigInteger; -import java.util.Iterator; -import java.util.List; - -import static org.junit.Assert.*; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff1; +import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STVerticalAlignRun; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBrClear; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STEm; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHighlightColor; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STThemeColor; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline; /** * Tests for XWPF Run @@ -88,34 +104,34 @@ public class TestXWPFRun { @Test public void testCTOnOff() { CTRPr rpr = ctRun.addNewRPr(); - CTOnOff bold = rpr.addNewB(); + CTOnOff bold = rpr.addNewB(); XWPFRun run = new XWPFRun(ctRun, irb); // True values: "true", "1", "on" - bold.setVal(STOnOff.TRUE); + bold.setVal(STOnOff1.ON); assertTrue(run.isBold()); - bold.setVal(STOnOff.X_1); + bold.setVal(STOnOff1.ON); assertTrue(run.isBold()); - bold.setVal(STOnOff.ON); + bold.setVal(STOnOff1.ON); assertTrue(run.isBold()); // False values: "false", "0", "off" - bold.setVal(STOnOff.FALSE); + bold.setVal(STOnOff1.OFF); assertFalse(run.isBold()); - bold.setVal(STOnOff.X_0); + bold.setVal(STOnOff1.OFF); assertFalse(run.isBold()); - bold.setVal(STOnOff.OFF); + bold.setVal(STOnOff1.OFF); assertFalse(run.isBold()); } @Test public void testSetGetBold() { CTRPr rpr = ctRun.addNewRPr(); - rpr.addNewB().setVal(STOnOff.TRUE); + rpr.addNewB().setVal(STOnOff1.ON); XWPFRun run = new XWPFRun(ctRun, irb); assertTrue(run.isBold()); @@ -123,31 +139,31 @@ public class TestXWPFRun { run.setBold(false); // Implementation detail: POI natively prefers , // but should correctly read val="0" and val="off" - assertEquals(STOnOff.FALSE, rpr.getB().getVal()); + assertEquals("off", rpr.getB().getVal()); } @Test public void testSetGetItalic() { CTRPr rpr = ctRun.addNewRPr(); - rpr.addNewI().setVal(STOnOff.TRUE); + rpr.addNewI().setVal(STOnOff1.ON); XWPFRun run = new XWPFRun(ctRun, irb); assertTrue(run.isItalic()); run.setItalic(false); - assertEquals(STOnOff.FALSE, rpr.getI().getVal()); + assertEquals("off", rpr.getI().getVal()); } @Test public void testSetGetStrike() { CTRPr rpr = ctRun.addNewRPr(); - rpr.addNewStrike().setVal(STOnOff.TRUE); + rpr.addNewStrike().setVal(STOnOff1.ON); XWPFRun run = new XWPFRun(ctRun, irb); assertTrue(run.isStrikeThrough()); run.setStrikeThrough(false); - assertEquals(STOnOff.FALSE, rpr.getStrike().getVal()); + assertEquals("off", rpr.getStrike().getVal()); } @Test @@ -186,10 +202,10 @@ public class TestXWPFRun { assertEquals(7.0, run.getFontSizeAsDouble(), 0.01); run.setFontSize(24); - assertEquals(48, rpr.getSz().getVal().longValue()); + assertEquals("48", rpr.getSz().getVal().toString()); run.setFontSize(24.5f); - assertEquals(49, rpr.getSz().getVal().longValue()); + assertEquals("49", rpr.getSz().getVal().toString()); assertEquals(25, run.getFontSize()); assertEquals(24.5, run.getFontSizeAsDouble(), 0.01); } @@ -203,7 +219,7 @@ public class TestXWPFRun { assertEquals(4000, run.getTextPosition()); run.setTextPosition(2400); - assertEquals(2400, rpr.getPosition().getVal().longValue()); + assertEquals("2400", rpr.getPosition().getVal().toString()); } @Test @@ -408,7 +424,7 @@ public class TestXWPFRun { assertFalse(run.isItalic()); assertFalse(run.isStrikeThrough()); assertNull(run.getCTR().getRPr()); - + doc.close(); } @@ -481,17 +497,17 @@ public class TestXWPFRun { assertEquals(1, doc.getAllPictures().size()); assertEquals(1, r.getEmbeddedPictures().size()); - + XWPFDocument docBack = XWPFTestDataSamples.writeOutAndReadBack(doc); XWPFParagraph pBack = docBack.getParagraphArray(2); XWPFRun rBack = pBack.getRuns().get(0); - + assertEquals(1, docBack.getAllPictures().size()); assertEquals(1, rBack.getEmbeddedPictures().size()); docBack.close(); doc.close(); } - + /** * Bugzilla #58237 - Unable to add image to word document header */ @@ -501,7 +517,7 @@ public class TestXWPFRun { XWPFHeader hdr = doc.createHeader(HeaderFooterType.DEFAULT); XWPFParagraph p = hdr.createParagraph(); XWPFRun r = p.createRun(); - + assertEquals(0, hdr.getAllPictures().size()); assertEquals(0, r.getEmbeddedPictures().size()); @@ -509,23 +525,23 @@ public class TestXWPFRun { assertEquals(1, hdr.getAllPictures().size()); assertEquals(1, r.getEmbeddedPictures().size()); - + XWPFPicture pic = r.getEmbeddedPictures().get(0); CTPicture ctPic = pic.getCTPicture(); CTBlipFillProperties ctBlipFill = ctPic.getBlipFill(); assertNotNull(ctBlipFill); - + CTBlip ctBlip = ctBlipFill.getBlip(); - + assertNotNull(ctBlip); assertEquals("rId1", ctBlip.getEmbed()); - + XWPFDocument docBack = XWPFTestDataSamples.writeOutAndReadBack(doc); XWPFHeader hdrBack = docBack.getHeaderArray(0); XWPFParagraph pBack = hdrBack.getParagraphArray(0); XWPFRun rBack = pBack.getRuns().get(0); - + assertEquals(1, hdrBack.getAllPictures().size()); assertEquals(1, rBack.getEmbeddedPictures().size()); docBack.close(); @@ -633,7 +649,7 @@ public class TestXWPFRun { run.setTextPosition(-1); assertEquals(-1, run.getTextPosition()); - + document.close(); } @@ -658,7 +674,7 @@ public class TestXWPFRun { run.setImprinted(true); run.setItalic(true); } - + @Test public void testSetGetTextScale() throws IOException { XWPFDocument document = new XWPFDocument(); @@ -668,7 +684,7 @@ public class TestXWPFRun { assertEquals(200, run.getTextScale()); document.close(); } - + @Test public void testSetGetTextHighlightColor() throws IOException { XWPFDocument document = new XWPFDocument(); @@ -680,7 +696,7 @@ public class TestXWPFRun { assertTrue(run.isHighlighted()); run.setTextHighlightColor("none"); assertFalse(run.isHighlighted()); - + document.close(); } @@ -695,7 +711,7 @@ public class TestXWPFRun { assertFalse(run.isVanish()); document.close(); } - + @Test public void testSetGetVerticalAlignment() throws IOException { XWPFDocument document = new XWPFDocument(); @@ -732,7 +748,7 @@ public class TestXWPFRun { assertEquals(STEm.DOT, run.getEmphasisMark()); document.close(); } - + @Test public void testSetGetUnderlineColor() throws IOException { XWPFDocument document = new XWPFDocument(); @@ -747,7 +763,7 @@ public class TestXWPFRun { assertEquals("auto", run.getUnderlineColor()); document.close(); } - + @Test public void testSetGetUnderlineThemeColor() throws IOException { XWPFDocument document = new XWPFDocument(); @@ -762,13 +778,13 @@ public class TestXWPFRun { assertEquals(STThemeColor.NONE, run.getUnderlineThemeColor()); document.close(); } - + @Test public void testSetStyleId() throws IOException { XWPFDocument document = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx"); final XWPFRun run = document.createParagraph().createRun(); - + String styleId = "bolditalic"; run.setStyle(styleId); String candStyleId = run.getCTR().getRPr().getRStyle().getVal(); diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java index a110d17019..52f2404363 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java @@ -19,7 +19,6 @@ package org.apache.poi.xwpf.usermodel; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; import java.io.IOException; import java.math.BigInteger; @@ -35,6 +34,7 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblBorders; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblCellMar; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblGrid; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblGridCol; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder; @@ -46,218 +46,190 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder; public class TestXWPFTable { @Test - public void testConstructor() { - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable xtab = new XWPFTable(ctTable, doc); - assertNotNull(xtab); - assertEquals(1, ctTable.sizeOfTrArray()); - assertEquals(1, ctTable.getTrArray(0).sizeOfTcArray()); - assertNotNull(ctTable.getTrArray(0).getTcArray(0).getPArray(0)); - - ctTable = CTTbl.Factory.newInstance(); - xtab = new XWPFTable(ctTable, doc, 3, 2); - assertNotNull(xtab); - assertEquals(3, ctTable.sizeOfTrArray()); - assertEquals(2, ctTable.getTrArray(0).sizeOfTcArray()); - assertNotNull(ctTable.getTrArray(0).getTcArray(0).getPArray(0)); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + public void testConstructor() throws IOException { + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable xtab = new XWPFTable(ctTable, doc); + assertNotNull(xtab); + assertEquals(1, ctTable.sizeOfTrArray()); + assertEquals(1, ctTable.getTrArray(0).sizeOfTcArray()); + assertNotNull(ctTable.getTrArray(0).getTcArray(0).getPArray(0)); + + ctTable = CTTbl.Factory.newInstance(); + xtab = new XWPFTable(ctTable, doc, 3, 2); + assertNotNull(xtab); + assertEquals(3, ctTable.sizeOfTrArray()); + assertEquals(2, ctTable.getTrArray(0).sizeOfTcArray()); + assertNotNull(ctTable.getTrArray(0).getTcArray(0).getPArray(0)); } } @Test - public void testTblGrid() { - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - CTTblGrid cttblgrid = ctTable.addNewTblGrid(); - cttblgrid.addNewGridCol().setW(BigInteger.valueOf(123)); - cttblgrid.addNewGridCol().setW(BigInteger.valueOf(321)); - - XWPFTable xtab = new XWPFTable(ctTable, doc); - assertEquals(123, xtab.getCTTbl().getTblGrid().getGridColArray(0).getW().intValue()); - assertEquals(321, xtab.getCTTbl().getTblGrid().getGridColArray(1).getW().intValue()); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + public void testTblGrid() throws IOException { + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + CTTblGrid cttblgrid = ctTable.addNewTblGrid(); + cttblgrid.addNewGridCol().setW(BigInteger.valueOf(123)); + cttblgrid.addNewGridCol().setW(BigInteger.valueOf(321)); + + XWPFTable xtab = new XWPFTable(ctTable, doc); + CTTblGridCol[] ca = xtab.getCTTbl().getTblGrid().getGridColArray(); + assertEquals("123", ca[0].getW().toString()); + assertEquals("321", ca[1].getW().toString()); } } @Test - public void testGetText() { - XWPFDocument doc = new XWPFDocument(); - CTTbl table = CTTbl.Factory.newInstance(); - CTRow row = table.addNewTr(); - CTTc cell = row.addNewTc(); - CTP paragraph = cell.addNewP(); - CTR run = paragraph.addNewR(); - CTText text = run.addNewT(); - text.setStringValue("finally I can write!"); - - XWPFTable xtab = new XWPFTable(table, doc); - assertEquals("finally I can write!\n", xtab.getText()); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + public void testGetText() throws IOException { + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl table = CTTbl.Factory.newInstance(); + CTRow row = table.addNewTr(); + CTTc cell = row.addNewTc(); + CTP paragraph = cell.addNewP(); + CTR run = paragraph.addNewR(); + CTText text = run.addNewT(); + text.setStringValue("finally I can write!"); + + XWPFTable xtab = new XWPFTable(table, doc); + assertEquals("finally I can write!\n", xtab.getText()); } } @Test - public void testCreateRow() { - XWPFDocument doc = new XWPFDocument(); - - CTTbl table = CTTbl.Factory.newInstance(); - CTRow r1 = table.addNewTr(); - r1.addNewTc().addNewP(); - r1.addNewTc().addNewP(); - CTRow r2 = table.addNewTr(); - r2.addNewTc().addNewP(); - r2.addNewTc().addNewP(); - CTRow r3 = table.addNewTr(); - r3.addNewTc().addNewP(); - r3.addNewTc().addNewP(); - - XWPFTable xtab = new XWPFTable(table, doc); - assertEquals(3, xtab.getNumberOfRows()); - assertNotNull(xtab.getRow(2)); - - //add a new row - xtab.createRow(); - assertEquals(4, xtab.getNumberOfRows()); - - //check number of cols - assertEquals(2, table.getTrArray(0).sizeOfTcArray()); - - //check creation of first row - xtab = new XWPFTable(CTTbl.Factory.newInstance(), doc); - assertEquals(1, xtab.getCTTbl().getTrArray(0).sizeOfTcArray()); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + public void testCreateRow() throws IOException { + try (XWPFDocument doc = new XWPFDocument()) { + + CTTbl table = CTTbl.Factory.newInstance(); + CTRow r1 = table.addNewTr(); + r1.addNewTc().addNewP(); + r1.addNewTc().addNewP(); + CTRow r2 = table.addNewTr(); + r2.addNewTc().addNewP(); + r2.addNewTc().addNewP(); + CTRow r3 = table.addNewTr(); + r3.addNewTc().addNewP(); + r3.addNewTc().addNewP(); + + XWPFTable xtab = new XWPFTable(table, doc); + assertEquals(3, xtab.getNumberOfRows()); + assertNotNull(xtab.getRow(2)); + + //add a new row + xtab.createRow(); + assertEquals(4, xtab.getNumberOfRows()); + + //check number of cols + assertEquals(2, table.getTrArray(0).sizeOfTcArray()); + + //check creation of first row + xtab = new XWPFTable(CTTbl.Factory.newInstance(), doc); + assertEquals(1, xtab.getCTTbl().getTrArray(0).sizeOfTcArray()); } } @Test - public void testSetGetWidth() { - XWPFDocument doc = new XWPFDocument(); - - XWPFTable xtab = doc.createTable(); - - assertEquals(0, xtab.getWidth()); - assertEquals(TableWidthType.AUTO, xtab.getWidthType()); - - xtab.setWidth(1000); - assertEquals(TableWidthType.DXA, xtab.getWidthType()); - assertEquals(1000, xtab.getWidth()); - - xtab.setWidth("auto"); - assertEquals(TableWidthType.AUTO, xtab.getWidthType()); - assertEquals(0, xtab.getWidth()); - assertEquals(0.0, xtab.getWidthDecimal(), 0.01); - - xtab.setWidth("999"); - assertEquals(TableWidthType.DXA, xtab.getWidthType()); - assertEquals(999, xtab.getWidth()); - - xtab.setWidth("50.5%"); - assertEquals(TableWidthType.PCT, xtab.getWidthType()); - assertEquals(50.5, xtab.getWidthDecimal(), 0.01); - - // Test effect of setting width type to a new value - - // From PCT to NIL: - xtab.setWidthType(TableWidthType.NIL); - assertEquals(TableWidthType.NIL, xtab.getWidthType()); - assertEquals(0, xtab.getWidth()); - - xtab.setWidth("999"); // Sets type to DXA - assertEquals(TableWidthType.DXA, xtab.getWidthType()); - - // From DXA to AUTO: - xtab.setWidthType(TableWidthType.AUTO); - assertEquals(TableWidthType.AUTO, xtab.getWidthType()); - assertEquals(0, xtab.getWidth()); - - xtab.setWidthType(TableWidthType.PCT); - assertEquals(TableWidthType.PCT, xtab.getWidthType()); - - // From PCT to DXA: - xtab.setWidth("33.3%"); - xtab.setWidthType(TableWidthType.DXA); - assertEquals(TableWidthType.DXA, xtab.getWidthType()); - assertEquals(0, xtab.getWidth()); - - // From DXA to DXA: (value should be unchanged) - xtab.setWidth("999"); - xtab.setWidthType(TableWidthType.DXA); - assertEquals(TableWidthType.DXA, xtab.getWidthType()); - assertEquals(999, xtab.getWidth()); - - // From DXA to PCT: - xtab.setWidthType(TableWidthType.PCT); - assertEquals(TableWidthType.PCT, xtab.getWidthType()); - assertEquals(100.0, xtab.getWidthDecimal(), 0.0); - - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + public void testSetGetWidth() throws IOException { + try (XWPFDocument doc = new XWPFDocument()) { + + XWPFTable xtab = doc.createTable(); + + assertEquals(0, xtab.getWidth()); + assertEquals(TableWidthType.AUTO, xtab.getWidthType()); + + xtab.setWidth(1000); + assertEquals(TableWidthType.DXA, xtab.getWidthType()); + assertEquals(1000, xtab.getWidth()); + + xtab.setWidth("auto"); + assertEquals(TableWidthType.AUTO, xtab.getWidthType()); + assertEquals(0, xtab.getWidth()); + assertEquals(0.0, xtab.getWidthDecimal(), 0.01); + + xtab.setWidth("999"); + assertEquals(TableWidthType.DXA, xtab.getWidthType()); + assertEquals(999, xtab.getWidth()); + + xtab.setWidth("50.5%"); + assertEquals(TableWidthType.PCT, xtab.getWidthType()); + assertEquals(50.5, xtab.getWidthDecimal(), 0.01); + + // Test effect of setting width type to a new value + + // From PCT to NIL: + xtab.setWidthType(TableWidthType.NIL); + assertEquals(TableWidthType.NIL, xtab.getWidthType()); + assertEquals(0, xtab.getWidth()); + + xtab.setWidth("999"); // Sets type to DXA + assertEquals(TableWidthType.DXA, xtab.getWidthType()); + + // From DXA to AUTO: + xtab.setWidthType(TableWidthType.AUTO); + assertEquals(TableWidthType.AUTO, xtab.getWidthType()); + assertEquals(0, xtab.getWidth()); + + xtab.setWidthType(TableWidthType.PCT); + assertEquals(TableWidthType.PCT, xtab.getWidthType()); + + // From PCT to DXA: + xtab.setWidth("33.3%"); + xtab.setWidthType(TableWidthType.DXA); + assertEquals(TableWidthType.DXA, xtab.getWidthType()); + assertEquals(0, xtab.getWidth()); + + // From DXA to DXA: (value should be unchanged) + xtab.setWidth("999"); + xtab.setWidthType(TableWidthType.DXA); + assertEquals(TableWidthType.DXA, xtab.getWidthType()); + assertEquals(999, xtab.getWidth()); + + // From DXA to PCT: + xtab.setWidthType(TableWidthType.PCT); + assertEquals(TableWidthType.PCT, xtab.getWidthType()); + assertEquals(100.0, xtab.getWidthDecimal(), 0.0); } } @Test - public void testSetGetHeight() { - XWPFDocument doc = new XWPFDocument(); - - CTTbl table = CTTbl.Factory.newInstance(); - - XWPFTable xtab = new XWPFTable(table, doc); - XWPFTableRow row = xtab.createRow(); - row.setHeight(20); - assertEquals(20, row.getHeight()); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + public void testSetGetHeight() throws IOException { + try (XWPFDocument doc = new XWPFDocument()) { + + CTTbl table = CTTbl.Factory.newInstance(); + + XWPFTable xtab = new XWPFTable(table, doc); + XWPFTableRow row = xtab.createRow(); + row.setHeight(20); + assertEquals(20, row.getHeight()); } } @Test - public void testSetGetMargins() { + public void testSetGetMargins() throws IOException { // instantiate the following class so it'll get picked up by // the XmlBean process and added to the jar file. it's required // for the following XWPFTable methods. CTTblCellMar ctm = CTTblCellMar.Factory.newInstance(); assertNotNull(ctm); // create a table - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable table = new XWPFTable(ctTable, doc); - // set margins - table.setCellMargins(50, 50, 250, 450); - // get margin components - int t = table.getCellMarginTop(); - assertEquals(50, t); - int l = table.getCellMarginLeft(); - assertEquals(50, l); - int b = table.getCellMarginBottom(); - assertEquals(250, b); - int r = table.getCellMarginRight(); - assertEquals(450, r); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + // set margins + table.setCellMargins(50, 50, 250, 450); + // get margin components + int t = table.getCellMarginTop(); + assertEquals(50, t); + int l = table.getCellMarginLeft(); + assertEquals(50, l); + int b = table.getCellMarginBottom(); + assertEquals(250, b); + int r = table.getCellMarginRight(); + assertEquals(450, r); } } @Test - public void testSetGetHBorders() { + public void testSetGetHBorders() throws IOException { // instantiate the following classes so they'll get picked up by // the XmlBean process and added to the jar file. they are required // for the following XWPFTable methods. @@ -266,388 +238,348 @@ public class TestXWPFTable { STBorder stb = STBorder.Factory.newInstance(); assertNotNull(stb); // create a table - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable table = new XWPFTable(ctTable, doc); - // check initial state - XWPFBorderType bt = table.getInsideHBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - int sz = table.getInsideHBorderSize(); - assertEquals(-1, sz); - int sp = table.getInsideHBorderSpace(); - assertEquals(-1, sp); - String clr = table.getInsideHBorderColor(); - assertNull(clr); - // set inside horizontal border - table.setInsideHBorder(XWPFBorderType.SINGLE, 4, 0, "FF0000"); - // get inside horizontal border components - bt = table.getInsideHBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - sz = table.getInsideHBorderSize(); - assertEquals(4, sz); - sp = table.getInsideHBorderSpace(); - assertEquals(0, sp); - clr = table.getInsideHBorderColor(); - assertEquals("FF0000", clr); - // remove the border and verify state - table.removeInsideHBorder(); - bt = table.getInsideHBorderType(); - assertNull(bt); - sz = table.getInsideHBorderSize(); - assertEquals(-1, sz); - sp = table.getInsideHBorderSpace(); - assertEquals(-1, sp); - clr = table.getInsideHBorderColor(); - assertNull(clr); - // check other borders - bt = table.getInsideVBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - bt = table.getTopBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - bt = table.getBottomBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - bt = table.getLeftBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - bt = table.getRightBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - // remove the rest all at once and test - table.removeBorders(); - bt = table.getInsideVBorderType(); - assertNull(bt); - bt = table.getTopBorderType(); - assertNull(bt); - bt = table.getBottomBorderType(); - assertNull(bt); - bt = table.getLeftBorderType(); - assertNull(bt); - bt = table.getRightBorderType(); - assertNull(bt); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + // check initial state + XWPFBorderType bt = table.getInsideHBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + int sz = table.getInsideHBorderSize(); + assertEquals(-1, sz); + int sp = table.getInsideHBorderSpace(); + assertEquals(-1, sp); + String clr = table.getInsideHBorderColor(); + assertNull(clr); + // set inside horizontal border + table.setInsideHBorder(XWPFBorderType.SINGLE, 4, 0, "FF0000"); + // get inside horizontal border components + bt = table.getInsideHBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + sz = table.getInsideHBorderSize(); + assertEquals(4, sz); + sp = table.getInsideHBorderSpace(); + assertEquals(0, sp); + clr = table.getInsideHBorderColor(); + assertEquals("FF0000", clr); + // remove the border and verify state + table.removeInsideHBorder(); + bt = table.getInsideHBorderType(); + assertNull(bt); + sz = table.getInsideHBorderSize(); + assertEquals(-1, sz); + sp = table.getInsideHBorderSpace(); + assertEquals(-1, sp); + clr = table.getInsideHBorderColor(); + assertNull(clr); + // check other borders + bt = table.getInsideVBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + bt = table.getTopBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + bt = table.getBottomBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + bt = table.getLeftBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + bt = table.getRightBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + // remove the rest all at once and test + table.removeBorders(); + bt = table.getInsideVBorderType(); + assertNull(bt); + bt = table.getTopBorderType(); + assertNull(bt); + bt = table.getBottomBorderType(); + assertNull(bt); + bt = table.getLeftBorderType(); + assertNull(bt); + bt = table.getRightBorderType(); + assertNull(bt); } } @Test - public void testSetGetVBorders() { + public void testSetGetVBorders() throws IOException { // create a table - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable table = new XWPFTable(ctTable, doc); - // check initial state - XWPFBorderType bt = table.getInsideVBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - int sz = table.getInsideVBorderSize(); - assertEquals(-1, sz); - int sp = table.getInsideVBorderSpace(); - assertEquals(-1, sp); - String clr = table.getInsideVBorderColor(); - assertNull(clr); - // set inside vertical border - table.setInsideVBorder(XWPFBorderType.DOUBLE, 4, 0, "00FF00"); - // get inside vertical border components - bt = table.getInsideVBorderType(); - assertEquals(XWPFBorderType.DOUBLE, bt); - sz = table.getInsideVBorderSize(); - assertEquals(4, sz); - sp = table.getInsideVBorderSpace(); - assertEquals(0, sp); - clr = table.getInsideVBorderColor(); - assertEquals("00FF00", clr); - // remove the border and verify state - table.removeInsideVBorder(); - bt = table.getInsideVBorderType(); - assertNull(bt); - sz = table.getInsideVBorderSize(); - assertEquals(-1, sz); - sp = table.getInsideVBorderSpace(); - assertEquals(-1, sp); - clr = table.getInsideVBorderColor(); - assertNull(clr); - // check the rest - bt = table.getInsideHBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - bt = table.getTopBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - bt = table.getBottomBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - bt = table.getLeftBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - bt = table.getRightBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - // remove the rest one at a time and test - table.removeInsideHBorder(); - table.removeTopBorder(); - table.removeBottomBorder(); - table.removeLeftBorder(); - table.removeRightBorder(); - bt = table.getInsideHBorderType(); - assertNull(bt); - bt = table.getTopBorderType(); - assertNull(bt); - bt = table.getBottomBorderType(); - assertNull(bt); - bt = table.getLeftBorderType(); - assertNull(bt); - bt = table.getRightBorderType(); - assertNull(bt); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + // check initial state + XWPFBorderType bt = table.getInsideVBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + int sz = table.getInsideVBorderSize(); + assertEquals(-1, sz); + int sp = table.getInsideVBorderSpace(); + assertEquals(-1, sp); + String clr = table.getInsideVBorderColor(); + assertNull(clr); + // set inside vertical border + table.setInsideVBorder(XWPFBorderType.DOUBLE, 4, 0, "00FF00"); + // get inside vertical border components + bt = table.getInsideVBorderType(); + assertEquals(XWPFBorderType.DOUBLE, bt); + sz = table.getInsideVBorderSize(); + assertEquals(4, sz); + sp = table.getInsideVBorderSpace(); + assertEquals(0, sp); + clr = table.getInsideVBorderColor(); + assertEquals("00FF00", clr); + // remove the border and verify state + table.removeInsideVBorder(); + bt = table.getInsideVBorderType(); + assertNull(bt); + sz = table.getInsideVBorderSize(); + assertEquals(-1, sz); + sp = table.getInsideVBorderSpace(); + assertEquals(-1, sp); + clr = table.getInsideVBorderColor(); + assertNull(clr); + // check the rest + bt = table.getInsideHBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + bt = table.getTopBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + bt = table.getBottomBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + bt = table.getLeftBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + bt = table.getRightBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + // remove the rest one at a time and test + table.removeInsideHBorder(); + table.removeTopBorder(); + table.removeBottomBorder(); + table.removeLeftBorder(); + table.removeRightBorder(); + bt = table.getInsideHBorderType(); + assertNull(bt); + bt = table.getTopBorderType(); + assertNull(bt); + bt = table.getBottomBorderType(); + assertNull(bt); + bt = table.getLeftBorderType(); + assertNull(bt); + bt = table.getRightBorderType(); + assertNull(bt); } } @Test - public void testSetGetTopBorders() { + public void testSetGetTopBorders() throws IOException { // create a table - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable table = new XWPFTable(ctTable, doc); - // check initial state - XWPFBorderType bt = table.getTopBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - int sz = table.getTopBorderSize(); - assertEquals(-1, sz); - int sp = table.getTopBorderSpace(); - assertEquals(-1, sp); - String clr = table.getTopBorderColor(); - assertNull(clr); - // set top border - table.setTopBorder(XWPFBorderType.THICK, 4, 0, "00FF00"); - // get inside vertical border components - bt = table.getTopBorderType(); - assertEquals(XWPFBorderType.THICK, bt); - sz = table.getTopBorderSize(); - assertEquals(4, sz); - sp = table.getTopBorderSpace(); - assertEquals(0, sp); - clr = table.getTopBorderColor(); - assertEquals("00FF00", clr); - // remove the border and verify state - table.removeTopBorder(); - bt = table.getTopBorderType(); - assertNull(bt); - sz = table.getTopBorderSize(); - assertEquals(-1, sz); - sp = table.getTopBorderSpace(); - assertEquals(-1, sp); - clr = table.getTopBorderColor(); - assertNull(clr); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + // check initial state + XWPFBorderType bt = table.getTopBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + int sz = table.getTopBorderSize(); + assertEquals(-1, sz); + int sp = table.getTopBorderSpace(); + assertEquals(-1, sp); + String clr = table.getTopBorderColor(); + assertNull(clr); + // set top border + table.setTopBorder(XWPFBorderType.THICK, 4, 0, "00FF00"); + // get inside vertical border components + bt = table.getTopBorderType(); + assertEquals(XWPFBorderType.THICK, bt); + sz = table.getTopBorderSize(); + assertEquals(4, sz); + sp = table.getTopBorderSpace(); + assertEquals(0, sp); + clr = table.getTopBorderColor(); + assertEquals("00FF00", clr); + // remove the border and verify state + table.removeTopBorder(); + bt = table.getTopBorderType(); + assertNull(bt); + sz = table.getTopBorderSize(); + assertEquals(-1, sz); + sp = table.getTopBorderSpace(); + assertEquals(-1, sp); + clr = table.getTopBorderColor(); + assertNull(clr); } } @Test - public void testSetGetBottomBorders() { + public void testSetGetBottomBorders() throws IOException { // create a table - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable table = new XWPFTable(ctTable, doc); - // check initial state - XWPFBorderType bt = table.getBottomBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - int sz = table.getBottomBorderSize(); - assertEquals(-1, sz); - int sp = table.getBottomBorderSpace(); - assertEquals(-1, sp); - String clr = table.getBottomBorderColor(); - assertNull(clr); - // set inside vertical border - table.setBottomBorder(XWPFBorderType.DOTTED, 4, 0, "00FF00"); - // get inside vertical border components - bt = table.getBottomBorderType(); - assertEquals(XWPFBorderType.DOTTED, bt); - sz = table.getBottomBorderSize(); - assertEquals(4, sz); - sp = table.getBottomBorderSpace(); - assertEquals(0, sp); - clr = table.getBottomBorderColor(); - assertEquals("00FF00", clr); - // remove the border and verify state - table.removeBottomBorder(); - bt = table.getBottomBorderType(); - assertNull(bt); - sz = table.getBottomBorderSize(); - assertEquals(-1, sz); - sp = table.getBottomBorderSpace(); - assertEquals(-1, sp); - clr = table.getBottomBorderColor(); - assertNull(clr); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + // check initial state + XWPFBorderType bt = table.getBottomBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + int sz = table.getBottomBorderSize(); + assertEquals(-1, sz); + int sp = table.getBottomBorderSpace(); + assertEquals(-1, sp); + String clr = table.getBottomBorderColor(); + assertNull(clr); + // set inside vertical border + table.setBottomBorder(XWPFBorderType.DOTTED, 4, 0, "00FF00"); + // get inside vertical border components + bt = table.getBottomBorderType(); + assertEquals(XWPFBorderType.DOTTED, bt); + sz = table.getBottomBorderSize(); + assertEquals(4, sz); + sp = table.getBottomBorderSpace(); + assertEquals(0, sp); + clr = table.getBottomBorderColor(); + assertEquals("00FF00", clr); + // remove the border and verify state + table.removeBottomBorder(); + bt = table.getBottomBorderType(); + assertNull(bt); + sz = table.getBottomBorderSize(); + assertEquals(-1, sz); + sp = table.getBottomBorderSpace(); + assertEquals(-1, sp); + clr = table.getBottomBorderColor(); + assertNull(clr); } } @Test - public void testSetGetLeftBorders() { + public void testSetGetLeftBorders() throws IOException { // create a table - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable table = new XWPFTable(ctTable, doc); - // check initial state - XWPFBorderType bt = table.getLeftBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - int sz = table.getLeftBorderSize(); - assertEquals(-1, sz); - int sp = table.getLeftBorderSpace(); - assertEquals(-1, sp); - String clr = table.getLeftBorderColor(); - assertNull(clr); - // set inside vertical border - table.setLeftBorder(XWPFBorderType.DASHED, 4, 0, "00FF00"); - // get inside vertical border components - bt = table.getLeftBorderType(); - assertEquals(XWPFBorderType.DASHED, bt); - sz = table.getLeftBorderSize(); - assertEquals(4, sz); - sp = table.getLeftBorderSpace(); - assertEquals(0, sp); - clr = table.getLeftBorderColor(); - assertEquals("00FF00", clr); - // remove the border and verify state - table.removeLeftBorder(); - bt = table.getLeftBorderType(); - assertNull(bt); - sz = table.getLeftBorderSize(); - assertEquals(-1, sz); - sp = table.getLeftBorderSpace(); - assertEquals(-1, sp); - clr = table.getLeftBorderColor(); - assertNull(clr); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + // check initial state + XWPFBorderType bt = table.getLeftBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + int sz = table.getLeftBorderSize(); + assertEquals(-1, sz); + int sp = table.getLeftBorderSpace(); + assertEquals(-1, sp); + String clr = table.getLeftBorderColor(); + assertNull(clr); + // set inside vertical border + table.setLeftBorder(XWPFBorderType.DASHED, 4, 0, "00FF00"); + // get inside vertical border components + bt = table.getLeftBorderType(); + assertEquals(XWPFBorderType.DASHED, bt); + sz = table.getLeftBorderSize(); + assertEquals(4, sz); + sp = table.getLeftBorderSpace(); + assertEquals(0, sp); + clr = table.getLeftBorderColor(); + assertEquals("00FF00", clr); + // remove the border and verify state + table.removeLeftBorder(); + bt = table.getLeftBorderType(); + assertNull(bt); + sz = table.getLeftBorderSize(); + assertEquals(-1, sz); + sp = table.getLeftBorderSpace(); + assertEquals(-1, sp); + clr = table.getLeftBorderColor(); + assertNull(clr); } } @Test - public void testSetGetRightBorders() { + public void testSetGetRightBorders() throws IOException { // create a table - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable table = new XWPFTable(ctTable, doc); - // check initial state - XWPFBorderType bt = table.getRightBorderType(); - assertEquals(XWPFBorderType.SINGLE, bt); - int sz = table.getRightBorderSize(); - assertEquals(-1, sz); - int sp = table.getRightBorderSpace(); - assertEquals(-1, sp); - String clr = table.getRightBorderColor(); - assertNull(clr); - // set inside vertical border - table.setRightBorder(XWPFBorderType.DOT_DASH, 4, 0, "00FF00"); - // get inside vertical border components - bt = table.getRightBorderType(); - assertEquals(XWPFBorderType.DOT_DASH, bt); - sz = table.getRightBorderSize(); - assertEquals(4, sz); - sp = table.getRightBorderSpace(); - assertEquals(0, sp); - clr = table.getRightBorderColor(); - assertEquals("00FF00", clr); - // remove the border and verify state - table.removeRightBorder(); - bt = table.getRightBorderType(); - assertNull(bt); - sz = table.getRightBorderSize(); - assertEquals(-1, sz); - sp = table.getRightBorderSpace(); - assertEquals(-1, sp); - clr = table.getRightBorderColor(); - assertNull(clr); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + // check initial state + XWPFBorderType bt = table.getRightBorderType(); + assertEquals(XWPFBorderType.SINGLE, bt); + int sz = table.getRightBorderSize(); + assertEquals(-1, sz); + int sp = table.getRightBorderSpace(); + assertEquals(-1, sp); + String clr = table.getRightBorderColor(); + assertNull(clr); + // set inside vertical border + table.setRightBorder(XWPFBorderType.DOT_DASH, 4, 0, "00FF00"); + // get inside vertical border components + bt = table.getRightBorderType(); + assertEquals(XWPFBorderType.DOT_DASH, bt); + sz = table.getRightBorderSize(); + assertEquals(4, sz); + sp = table.getRightBorderSpace(); + assertEquals(0, sp); + clr = table.getRightBorderColor(); + assertEquals("00FF00", clr); + // remove the border and verify state + table.removeRightBorder(); + bt = table.getRightBorderType(); + assertNull(bt); + sz = table.getRightBorderSize(); + assertEquals(-1, sz); + sp = table.getRightBorderSpace(); + assertEquals(-1, sp); + clr = table.getRightBorderColor(); + assertNull(clr); } } @Test - public void testSetGetRowBandSize() { - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable table = new XWPFTable(ctTable, doc); - table.setRowBandSize(12); - int sz = table.getRowBandSize(); - assertEquals(12, sz); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + public void testSetGetRowBandSize() throws IOException { + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + table.setRowBandSize(12); + int sz = table.getRowBandSize(); + assertEquals(12, sz); } } @Test - public void testSetGetColBandSize() { - XWPFDocument doc = new XWPFDocument(); - CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable table = new XWPFTable(ctTable, doc); - table.setColBandSize(16); - int sz = table.getColBandSize(); - assertEquals(16, sz); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + public void testSetGetColBandSize() throws IOException { + try (XWPFDocument doc = new XWPFDocument()) { + CTTbl ctTable = CTTbl.Factory.newInstance(); + XWPFTable table = new XWPFTable(ctTable, doc); + table.setColBandSize(16); + int sz = table.getColBandSize(); + assertEquals(16, sz); } } @Test public void testCreateTable() throws Exception { // open an empty document - XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx"); - - // create a table with 5 rows and 7 columns - int noRows = 5; - int noCols = 7; - XWPFTable table = doc.createTable(noRows, noCols); - - // assert the table is empty - List rows = table.getRows(); - assertEquals("Table has less rows than requested.", noRows, rows.size()); - for (XWPFTableRow xwpfRow : rows) { - assertNotNull(xwpfRow); - for (int i = 0; i < 7; i++) { - XWPFTableCell xwpfCell = xwpfRow.getCell(i); - assertNotNull(xwpfCell); - assertEquals("Empty cells should not have one paragraph.", 1, xwpfCell.getParagraphs().size()); - xwpfCell = xwpfRow.getCell(i); - assertEquals("Calling 'getCell' must not modify cells content.", 1, xwpfCell.getParagraphs().size()); + try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx")) { + + // create a table with 5 rows and 7 columns + int noRows = 5; + int noCols = 7; + XWPFTable table = doc.createTable(noRows, noCols); + + // assert the table is empty + List rows = table.getRows(); + assertEquals("Table has less rows than requested.", noRows, rows.size()); + for (XWPFTableRow xwpfRow : rows) { + assertNotNull(xwpfRow); + for (int i = 0; i < 7; i++) { + XWPFTableCell xwpfCell = xwpfRow.getCell(i); + assertNotNull(xwpfCell); + assertEquals("Empty cells should not have one paragraph.", 1, xwpfCell.getParagraphs().size()); + xwpfCell = xwpfRow.getCell(i); + assertEquals("Calling 'getCell' must not modify cells content.", 1, xwpfCell.getParagraphs().size()); + } } - } - doc.getPackage().revert(); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + doc.getPackage().revert(); } } - + @Test - public void testSetGetTableAlignment() { - XWPFDocument doc = new XWPFDocument(); - XWPFTable tbl = doc.createTable(1, 1); - tbl.setTableAlignment(TableRowAlign.LEFT); - assertEquals(TableRowAlign.LEFT, tbl.getTableAlignment()); - tbl.setTableAlignment(TableRowAlign.CENTER); - assertEquals(TableRowAlign.CENTER, tbl.getTableAlignment()); - tbl.setTableAlignment(TableRowAlign.RIGHT); - assertEquals(TableRowAlign.RIGHT, tbl.getTableAlignment()); - tbl.removeTableAlignment(); - assertNull(tbl.getTableAlignment()); - try { - doc.close(); - } catch (IOException e) { - fail("Unable to close doc"); + public void testSetGetTableAlignment() throws IOException { + try (XWPFDocument doc = new XWPFDocument()) { + XWPFTable tbl = doc.createTable(1, 1); + tbl.setTableAlignment(TableRowAlign.LEFT); + assertEquals(TableRowAlign.LEFT, tbl.getTableAlignment()); + tbl.setTableAlignment(TableRowAlign.CENTER); + assertEquals(TableRowAlign.CENTER, tbl.getTableAlignment()); + tbl.setTableAlignment(TableRowAlign.RIGHT); + assertEquals(TableRowAlign.RIGHT, tbl.getTableAlignment()); + tbl.removeTableAlignment(); + assertNull(tbl.getTableAlignment()); } } } \ No newline at end of file -- 2.39.5