diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/BorderStyleApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/BorderStyleApplierUtil.java
index f8a1c3e93..35d1e473f 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/BorderStyleApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/BorderStyleApplierUtil.java
@@ -44,6 +44,9 @@ This file is part of the iText (R) project.
import com.itextpdf.html2pdf.attach.ProcessorContext;
import com.itextpdf.html2pdf.css.CssConstants;
+import com.itextpdf.html2pdf.css.apply.util.enums.BorderEnum;
+import com.itextpdf.html2pdf.css.apply.util.enums.BorderRadii;
+import com.itextpdf.html2pdf.css.apply.util.enums.RgbaColorProperty;
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.layout.IPropertyContainer;
@@ -63,6 +66,7 @@ This file is part of the iText (R) project.
import com.itextpdf.styledxmlparser.css.util.CssDimensionParsingUtils;
import java.util.Map;
+import java.util.Objects;
/**
* Utilities class to apply border styles.
@@ -86,39 +90,8 @@ public static void applyBorders(Map cssProps, ProcessorContext c
float em = CssDimensionParsingUtils.parseAbsoluteLength(cssProps.get(CssConstants.FONT_SIZE));
float rem = context.getCssContext().getRootFontSize();
- Border[] bordersArray = getBordersArray(cssProps, em, rem);
- if (bordersArray[0] != null) {
- element.setProperty(Property.BORDER_TOP, bordersArray[0]);
- }
-
- if (bordersArray[1] != null) {
- element.setProperty(Property.BORDER_RIGHT, bordersArray[1]);
- }
-
- if (bordersArray[2] != null) {
- element.setProperty(Property.BORDER_BOTTOM, bordersArray[2]);
- }
-
- if (bordersArray[3] != null) {
- element.setProperty(Property.BORDER_LEFT, bordersArray[3]);
- }
-
- BorderRadius[] borderRadii = getBorderRadiiArray(cssProps, em, rem);
- if (borderRadii[0] != null) {
- element.setProperty(Property.BORDER_TOP_LEFT_RADIUS, borderRadii[0]);
- }
-
- if (borderRadii[1] != null) {
- element.setProperty(Property.BORDER_TOP_RIGHT_RADIUS, borderRadii[1]);
- }
-
- if (borderRadii[2] != null) {
- element.setProperty(Property.BORDER_BOTTOM_RIGHT_RADIUS, borderRadii[2]);
- }
-
- if (borderRadii[3] != null) {
- element.setProperty(Property.BORDER_BOTTOM_LEFT_RADIUS, borderRadii[3]);
- }
+ setBorderProperties(cssProps, element, em, rem);
+ setBorderRadiusProperties(cssProps, element, em, rem);
}
/**
@@ -131,21 +104,14 @@ public static void applyBorders(Map cssProps, ProcessorContext c
*/
public static Border[] getBordersArray(Map styles, float em, float rem) {
Border[] borders = new Border[4];
- Border topBorder = getCertainBorder(styles.get(CssConstants.BORDER_TOP_WIDTH),
- styles.get(CssConstants.BORDER_TOP_STYLE), getSpecificBorderColorOrDefaultColor(styles, CssConstants.BORDER_TOP_COLOR), em, rem);
- borders[0] = topBorder;
-
- Border rightBorder = getCertainBorder(styles.get(CssConstants.BORDER_RIGHT_WIDTH),
- styles.get(CssConstants.BORDER_RIGHT_STYLE), getSpecificBorderColorOrDefaultColor(styles, CssConstants.BORDER_RIGHT_COLOR), em, rem);
- borders[1] = rightBorder;
-
- Border bottomBorder = getCertainBorder(styles.get(CssConstants.BORDER_BOTTOM_WIDTH),
- styles.get(CssConstants.BORDER_BOTTOM_STYLE), getSpecificBorderColorOrDefaultColor(styles, CssConstants.BORDER_BOTTOM_COLOR), em, rem);
- borders[2] = bottomBorder;
-
- Border leftBorder = getCertainBorder(styles.get(CssConstants.BORDER_LEFT_WIDTH),
- styles.get(CssConstants.BORDER_LEFT_STYLE), getSpecificBorderColorOrDefaultColor(styles, CssConstants.BORDER_LEFT_COLOR), em, rem);
- borders[3] = leftBorder;
+ borders[BorderEnum.TOP.ordinal()] = getCertainBorder(CssConstants.BORDER_TOP_WIDTH, CssConstants.BORDER_TOP_STYLE,
+ CssConstants.BORDER_TOP_COLOR, em, rem, styles);
+ borders[BorderEnum.RIGHT.ordinal()] = getCertainBorder(CssConstants.BORDER_RIGHT_WIDTH, CssConstants.BORDER_RIGHT_STYLE,
+ CssConstants.BORDER_RIGHT_COLOR, em, rem, styles);
+ borders[BorderEnum.BOTTOM.ordinal()] = getCertainBorder(CssConstants.BORDER_BOTTOM_WIDTH, CssConstants.BORDER_BOTTOM_STYLE,
+ CssConstants.BORDER_BOTTOM_COLOR, em, rem, styles);
+ borders[BorderEnum.LEFT.ordinal()] = getCertainBorder(CssConstants.BORDER_LEFT_WIDTH, CssConstants.BORDER_LEFT_STYLE,
+ CssConstants.BORDER_LEFT_COLOR, em, rem, styles);
return borders;
}
@@ -161,30 +127,31 @@ public static Border[] getBordersArray(Map styles, float em, flo
* @return the border
*/
public static Border getCertainBorder(String borderWidth, String borderStyle, String borderColor, float em, float rem) {
- if (borderStyle == null || CssConstants.NONE.equals(borderStyle)) {
+ if (Objects.isNull(borderStyle) || CssConstants.NONE.equals(borderStyle)) {
return null;
}
- if (borderWidth == null) {
+ if (Objects.isNull(borderWidth)) {
borderWidth = CssDefaults.getDefaultValue(CssConstants.BORDER_WIDTH);
}
float borderWidthValue;
if (CssConstants.BORDER_WIDTH_VALUES.contains(borderWidth)) {
- if (CssConstants.THIN.equals(borderWidth)) {
- borderWidth = "1px";
- } else if (CssConstants.MEDIUM.equals(borderWidth)) {
- borderWidth = "2px";
- } else if (CssConstants.THICK.equals(borderWidth)) {
- borderWidth = "3px";
+ switch (borderWidth) {
+ case CssConstants.THIN:
+ borderWidth = "1px";
+ break;
+ case CssConstants.MEDIUM:
+ borderWidth = "2px";
+ break;
+ case CssConstants.THICK:
+ borderWidth = "3px";
+ break;
}
}
UnitValue unitValue = CssDimensionParsingUtils.parseLengthValueToPt(borderWidth, em, rem);
- if (unitValue == null) {
- return null;
- }
- if (unitValue.isPercentValue()) {
+ if (Objects.isNull(unitValue) || unitValue.isPercentValue()) {
return null;
}
@@ -196,8 +163,11 @@ public static Border getCertainBorder(String borderWidth, String borderStyle, St
if (borderColor != null) {
if (!CssConstants.TRANSPARENT.equals(borderColor)) {
float[] rgbaColor = CssDimensionParsingUtils.parseRgbaColor(borderColor);
- color = new DeviceRgb(rgbaColor[0], rgbaColor[1], rgbaColor[2]);
- opacity = rgbaColor[3];
+ color = new DeviceRgb(rgbaColor[
+ RgbaColorProperty.RED.ordinal()],
+ rgbaColor[RgbaColorProperty.GREEN.ordinal()],
+ rgbaColor[RgbaColorProperty.BLUE.ordinal()]);
+ opacity = rgbaColor[RgbaColorProperty.ALPHA.ordinal()];
} else {
opacity = 0f;
}
@@ -205,39 +175,34 @@ public static Border getCertainBorder(String borderWidth, String borderStyle, St
|| CssConstants.INSET.equals(borderStyle) || CssConstants.OUTSET.equals(borderStyle)) {
color = new DeviceRgb(212, 208, 200);
}
- switch (borderStyle) {
- case CssConstants.SOLID:
- border = new SolidBorder(color, borderWidthValue, opacity);
- break;
- case CssConstants.DASHED:
- border = new DashedBorder(color, borderWidthValue, opacity);
- break;
- case CssConstants.DOTTED:
- border = new RoundDotsBorder(color, borderWidthValue, opacity);
- break;
- case CssConstants.DOUBLE:
- border = new DoubleBorder(color, borderWidthValue, opacity);
- break;
- case CssConstants.GROOVE:
- border = new GrooveBorder(color, borderWidthValue, opacity);
- break;
- case CssConstants.RIDGE:
- border = new RidgeBorder(color, borderWidthValue, opacity);
- break;
- case CssConstants.INSET:
- border = new InsetBorder(color, borderWidthValue, opacity);
- break;
- case CssConstants.OUTSET:
- border = new OutsetBorder(color, borderWidthValue, opacity);
- break;
- default:
- border = null;
- break;
- }
+ border = getBorder(borderStyle, borderWidthValue, color, opacity);
}
return border;
}
+ private static Border getBorder(String borderStyle, float borderWidthValue, DeviceRgb color, float opacity) {
+ switch (borderStyle) {
+ case CssConstants.SOLID:
+ return new SolidBorder(color, borderWidthValue, opacity);
+ case CssConstants.DASHED:
+ return new DashedBorder(color, borderWidthValue, opacity);
+ case CssConstants.DOTTED:
+ return new RoundDotsBorder(color, borderWidthValue, opacity);
+ case CssConstants.DOUBLE:
+ return new DoubleBorder(color, borderWidthValue, opacity);
+ case CssConstants.GROOVE:
+ return new GrooveBorder(color, borderWidthValue, opacity);
+ case CssConstants.RIDGE:
+ return new RidgeBorder(color, borderWidthValue, opacity);
+ case CssConstants.INSET:
+ return new InsetBorder(color, borderWidthValue, opacity);
+ case CssConstants.OUTSET:
+ return new OutsetBorder(color, borderWidthValue, opacity);
+ default:
+ return null;
+ }
+ }
+
/**
* Gets the array that defines the borders.
*
@@ -252,30 +217,17 @@ public static BorderRadius[] getBorderRadiiArray(Map styles, flo
BorderRadius borderRadius = null;
UnitValue borderRadiusUV = CssDimensionParsingUtils
.parseLengthValueToPt(styles.get(CssConstants.BORDER_RADIUS), em, rem);
- if (null != borderRadiusUV) {
+ if (Objects.nonNull(borderRadiusUV)) {
borderRadius = new BorderRadius(borderRadiusUV);
}
-
- UnitValue[] borderTopLeftRadiusUV = CssDimensionParsingUtils
- .parseSpecificCornerBorderRadius(styles.get(CssConstants.BORDER_TOP_LEFT_RADIUS), em, rem);
- borderRadii[0] = null == borderTopLeftRadiusUV
- ? borderRadius
- : new BorderRadius(borderTopLeftRadiusUV[0], borderTopLeftRadiusUV[1]);
- UnitValue[] borderTopRightRadiusUV = CssDimensionParsingUtils
- .parseSpecificCornerBorderRadius(styles.get(CssConstants.BORDER_TOP_RIGHT_RADIUS), em, rem);
- borderRadii[1] = null == borderTopRightRadiusUV
- ? borderRadius
- : new BorderRadius(borderTopRightRadiusUV[0], borderTopRightRadiusUV[1]);
- UnitValue[] borderBottomRightRadiusUV = CssDimensionParsingUtils
- .parseSpecificCornerBorderRadius(styles.get(CssConstants.BORDER_BOTTOM_RIGHT_RADIUS), em, rem);
- borderRadii[2] = null == borderBottomRightRadiusUV
- ? borderRadius
- : new BorderRadius(borderBottomRightRadiusUV[0], borderBottomRightRadiusUV[1]);
- UnitValue[] borderBottomLeftRadiusUV = CssDimensionParsingUtils
- .parseSpecificCornerBorderRadius(styles.get(CssConstants.BORDER_BOTTOM_LEFT_RADIUS), em, rem);
- borderRadii[3] = null == borderBottomLeftRadiusUV
- ? borderRadius
- : new BorderRadius(borderBottomLeftRadiusUV[0], borderBottomLeftRadiusUV[1]);
+ borderRadii[BorderRadii.TOP_LEFT.ordinal()] = getBorderRadius(CssConstants.BORDER_TOP_LEFT_RADIUS,
+ borderRadius, em, rem, styles);
+ borderRadii[BorderRadii.TOP_RIGHT.ordinal()] = getBorderRadius(CssConstants.BORDER_TOP_RIGHT_RADIUS,
+ borderRadius, em, rem, styles);
+ borderRadii[BorderRadii.BOTTOM_RIGHT.ordinal()] = getBorderRadius(CssConstants.BORDER_BOTTOM_RIGHT_RADIUS,
+ borderRadius, em, rem, styles);
+ borderRadii[BorderRadii.BOTTOM_LEFT.ordinal()] = getBorderRadius(CssConstants.BORDER_BOTTOM_LEFT_RADIUS,
+ borderRadius, em, rem, styles);
return borderRadii;
}
@@ -288,4 +240,54 @@ private static String getSpecificBorderColorOrDefaultColor(Map s
return borderColor;
}
+ private static Border getCertainBorder(String widthConstant, String styleConstant, String colorConstant,
+ float em, float rem, Map styles) {
+ String widthCssValue = styles.get(widthConstant);
+ String styleCssValue = styles.get(styleConstant);
+ String colorCssValue = getSpecificBorderColorOrDefaultColor(styles, colorConstant);
+ return getCertainBorder(widthCssValue, styleCssValue, colorCssValue, em, rem);
+ }
+
+ private static BorderRadius getBorderRadius(UnitValue[] borderRadiusUnitValue, BorderRadius borderRadius) {
+ if(Objects.isNull(borderRadiusUnitValue)) {
+ return borderRadius;
+ }
+ return new BorderRadius(borderRadiusUnitValue[0], borderRadiusUnitValue[1]);
+ }
+
+ private static BorderRadius getBorderRadius(String cssConstant, BorderRadius borderRadius, float em, float rem,
+ Map cssProps) {
+ UnitValue[] borderRadiusUnitValue = CssDimensionParsingUtils
+ .parseSpecificCornerBorderRadius(cssProps.get(cssConstant), em, rem);
+ return getBorderRadius(borderRadiusUnitValue, borderRadius);
+ }
+
+ private static void setBorderRadiusProperties(Map cssProps, IPropertyContainer element, float em, float rem) {
+ BorderRadius[] borderRadii = getBorderRadiiArray(cssProps, em, rem);
+ setBorderRadiusProperty(element, borderRadii[BorderRadii.TOP_LEFT.ordinal()], Property.BORDER_TOP_LEFT_RADIUS);
+ setBorderRadiusProperty(element, borderRadii[BorderRadii.TOP_RIGHT.ordinal()], Property.BORDER_TOP_RIGHT_RADIUS);
+ setBorderRadiusProperty(element, borderRadii[BorderRadii.BOTTOM_RIGHT.ordinal()], Property.BORDER_BOTTOM_RIGHT_RADIUS);
+ setBorderRadiusProperty(element, borderRadii[BorderRadii.BOTTOM_LEFT.ordinal()], Property.BORDER_BOTTOM_LEFT_RADIUS);
+ }
+
+ private static void setBorderProperties(Map cssProps, IPropertyContainer element, float em, float rem) {
+ Border[] borders = getBordersArray(cssProps, em, rem);
+ setBorderProperty(element, borders[BorderEnum.TOP.ordinal()], Property.BORDER_TOP);
+ setBorderProperty(element, borders[BorderEnum.RIGHT.ordinal()], Property.BORDER_RIGHT);
+ setBorderProperty(element, borders[BorderEnum.BOTTOM.ordinal()], Property.BORDER_BOTTOM);
+ setBorderProperty(element, borders[BorderEnum.LEFT.ordinal()], Property.BORDER_LEFT);
+ }
+
+ private static void setBorderRadiusProperty(IPropertyContainer element, BorderRadius borderRadius, int propertyValue) {
+ if(Objects.nonNull(borderRadius)) {
+ element.setProperty(propertyValue, borderRadius);
+ }
+ }
+
+ private static void setBorderProperty(IPropertyContainer element, Border border, int propertyValue) {
+ if (Objects.nonNull(border)) {
+ element.setProperty(propertyValue, border);
+ }
+ }
+
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/CounterProcessorUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/CounterProcessorUtil.java
index c440fb55e..13a5cdf42 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/CounterProcessorUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/CounterProcessorUtil.java
@@ -43,6 +43,7 @@ This file is part of the iText (R) project.
package com.itextpdf.html2pdf.css.apply.util;
import com.itextpdf.html2pdf.css.CssConstants;
+import com.itextpdf.html2pdf.css.apply.util.enums.CssCounterManagerOperation;
import com.itextpdf.html2pdf.css.resolve.CssContext;
import com.itextpdf.html2pdf.css.resolve.func.counter.CssCounterManager;
import com.itextpdf.styledxmlparser.css.util.CssDimensionParsingUtils;
@@ -63,10 +64,10 @@ public class CounterProcessorUtil {
*/
public static void processCounters(Map cssProps, CssContext context) {
String counterReset = cssProps.get(CssConstants.COUNTER_RESET);
- processReset(counterReset, context);
+ processCounter(counterReset, context, CssCounterManagerOperation.RESET);
String counterIncrement = cssProps.get(CssConstants.COUNTER_INCREMENT);
- processIncrement(counterIncrement, context);
+ processCounter(counterIncrement, context, CssCounterManagerOperation.INCREMENT);
}
/**
@@ -93,38 +94,37 @@ public static void endProcessingCounters(CssContext context, IElementNode elemen
counterManager.popEveryCounterFromCounters(element);
}
- private static void processReset(String counterReset, CssContext context) {
- if (counterReset != null) {
+ private static void processCounter(String counter, CssContext context, CssCounterManagerOperation operation) {
+ if (counter != null) {
final CssCounterManager counterManager = context.getCounterManager();
- final String[] params = counterReset.split(" ");
+ final String[] params = counter.split(" ");
for (int i = 0; i < params.length; i++) {
final String counterName = params[i];
final Integer possibleCounterValue;
if (i + 1 < params.length && (possibleCounterValue = CssDimensionParsingUtils.parseInteger(params[i + 1])) != null) {
- counterManager.resetCounter(counterName, (int) possibleCounterValue);
+ processCounter(counterManager, counterName, operation, possibleCounterValue);
i++;
} else {
- counterManager.resetCounter(counterName);
+ processCounter(counterManager, counterName, operation);
}
}
}
}
- private static void processIncrement(String counterIncrement, CssContext context) {
- if (counterIncrement != null) {
- final CssCounterManager counterManager = context.getCounterManager();
- final String[] params = counterIncrement.split(" ");
- for (int i = 0; i < params.length; i++) {
- final String counterName = params[i];
- final Integer possibleIncrementValue;
- if (i + 1 < params.length && (possibleIncrementValue = CssDimensionParsingUtils.parseInteger(params[i + 1])) != null) {
- counterManager.incrementCounter(counterName, (int) possibleIncrementValue);
- i++;
- } else {
- counterManager.incrementCounter(counterName);
- }
- }
+ private static void processCounter(CssCounterManager counterManager, String counterName,
+ CssCounterManagerOperation operation, Integer possibleCounterValue) {
+ switch (operation) {
+ case RESET:
+ counterManager.resetCounter(counterName, possibleCounterValue);
+ break;
+ case INCREMENT:
+ counterManager.incrementCounter(counterName, possibleCounterValue);
}
}
+ private static void processCounter(CssCounterManager counterManager, String counterName,
+ CssCounterManagerOperation operation) {
+ processCounter(counterManager, counterName, operation, null);
+ }
+
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/FlexApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/FlexApplierUtil.java
index bb12576c0..873069ca7 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/FlexApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/FlexApplierUtil.java
@@ -171,7 +171,6 @@ private static void applyAlignItems(Map cssProps, IPropertyConta
LOGGER.warn(MessageFormatUtil.format(Html2PdfLogMessageConstant.FLEX_PROPERTY_IS_NOT_SUPPORTED_YET,
CommonCssConstants.ALIGN_ITEMS, alignItemsString));
alignItems = AlignmentPropertyValue.STRETCH;
- break;
}
element.setProperty(Property.ALIGN_ITEMS, alignItems);
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/FloatApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/FloatApplierUtil.java
index e536ddd90..77a0ec5c8 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/FloatApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/FloatApplierUtil.java
@@ -72,22 +72,28 @@ private FloatApplierUtil() {
public static void applyFloating(Map cssProps, ProcessorContext context, IPropertyContainer element) {
String floatValue = cssProps.get(CssConstants.FLOAT);
if (floatValue != null) {
- if (CssConstants.LEFT.equals(floatValue)) {
- element.setProperty(Property.FLOAT, FloatPropertyValue.LEFT);
-
- } else if (CssConstants.RIGHT.equals(floatValue)) {
- element.setProperty(Property.FLOAT, FloatPropertyValue.RIGHT);
+ switch (floatValue) {
+ case CssConstants.LEFT:
+ element.setProperty(Property.FLOAT, FloatPropertyValue.LEFT);
+ break;
+ case CssConstants.RIGHT:
+ element.setProperty(Property.FLOAT, FloatPropertyValue.RIGHT);
+ break;
}
}
String clearValue = cssProps.get(CssConstants.CLEAR);
if (clearValue != null) {
- if(CssConstants.LEFT.equals(clearValue)) {
- element.setProperty(Property.CLEAR, ClearPropertyValue.LEFT);
- } else if (CssConstants.RIGHT.equals(clearValue)) {
- element.setProperty(Property.CLEAR, ClearPropertyValue.RIGHT);
- } else if (CssConstants.BOTH.equals(clearValue)) {
- element.setProperty(Property.CLEAR, ClearPropertyValue.BOTH);
+ switch (clearValue) {
+ case CssConstants.LEFT:
+ element.setProperty(Property.CLEAR, ClearPropertyValue.LEFT);
+ break;
+ case CssConstants.RIGHT:
+ element.setProperty(Property.CLEAR, ClearPropertyValue.RIGHT);
+ break;
+ case CssConstants.BOTH:
+ element.setProperty(Property.CLEAR, ClearPropertyValue.BOTH);
+ break;
}
}
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/HyphenationApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/HyphenationApplierUtil.java
index ca0d050fa..d2a0c206c 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/HyphenationApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/HyphenationApplierUtil.java
@@ -85,16 +85,21 @@ public static void applyHyphenation(Map cssProps, ProcessorConte
if (value == null) {
value = CssDefaults.getDefaultValue(CssConstants.HYPHENS);
}
-
- if (CssConstants.NONE.equals(value)) {
- element.setProperty(Property.HYPHENATION, null);
- } else if (CssConstants.MANUAL.equals(value)) {
- element.setProperty(Property.HYPHENATION, new HyphenationConfig(HYPHENATE_BEFORE, HYPHENATE_AFTER));
- } else if (CssConstants.AUTO.equals(value) && stylesContainer instanceof IElementNode) {
- String lang = ((IElementNode)stylesContainer).getLang();
- if (lang != null && lang.length() > 0) {
- element.setProperty(Property.HYPHENATION, new HyphenationConfig(lang.substring(0, 2), "", HYPHENATE_BEFORE, HYPHENATE_AFTER));
- }
+ switch (value) {
+ case CssConstants.NONE:
+ element.setProperty(Property.HYPHENATION, null);
+ break;
+ case CssConstants.MANUAL:
+ element.setProperty(Property.HYPHENATION, new HyphenationConfig(HYPHENATE_BEFORE, HYPHENATE_AFTER));
+ break;
+ case CssConstants.AUTO:
+ if(stylesContainer instanceof IElementNode) {
+ String lang = ((IElementNode)stylesContainer).getLang();
+ if (lang != null && !lang.isEmpty()) {
+ element.setProperty(Property.HYPHENATION, new HyphenationConfig(lang.substring(0, 2), "", HYPHENATE_BEFORE, HYPHENATE_AFTER));
+ }
+ }
+ break;
}
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/ListStyleApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/ListStyleApplierUtil.java
index dbe2521d8..8f8d969cf 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/ListStyleApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/ListStyleApplierUtil.java
@@ -188,43 +188,56 @@ public static void applyListStyleTypeProperty(IStylesContainer stylesContainer,
float em = CssDimensionParsingUtils.parseAbsoluteLength(cssProps.get(CssConstants.FONT_SIZE));
String style = cssProps.get(CssConstants.LIST_STYLE_TYPE);
- if (CssConstants.DISC.equals(style)) {
- setDiscStyle(element, em);
- } else if (CssConstants.CIRCLE.equals(style)) {
- setCircleStyle(element, em);
- } else if (CssConstants.SQUARE.equals(style)) {
- setSquareStyle(element, em);
- } else if (CssConstants.DECIMAL.equals(style)) {
- setListSymbol(element, ListNumberingType.DECIMAL);
- } else if (CssConstants.DECIMAL_LEADING_ZERO.equals(style)) {
- setListSymbol(element, ListNumberingType.DECIMAL_LEADING_ZERO);
- } else if (CssConstants.UPPER_ALPHA.equals(style) || CssConstants.UPPER_LATIN.equals(style)) {
- setListSymbol(element, ListNumberingType.ENGLISH_UPPER);
- } else if (CssConstants.LOWER_ALPHA.equals(style) || CssConstants.LOWER_LATIN.equals(style)) {
- setListSymbol(element, ListNumberingType.ENGLISH_LOWER);
- } else if (CssConstants.UPPER_ROMAN.equals(style)) {
- setListSymbol(element, ListNumberingType.ROMAN_UPPER);
- } else if (CssConstants.LOWER_ROMAN.equals(style)) {
- setListSymbol(element, ListNumberingType.ROMAN_LOWER);
- } else if (CssConstants.LOWER_GREEK.equals(style)) {
- element.setProperty(Property.LIST_SYMBOL, new HtmlAlphabetSymbolFactory(GREEK_LOWERCASE));
- } else if (CssConstants.NONE.equals(style)) {
- setListSymbol(element, new Text(""));
- } else {
- if (style != null) {
+ switch (style) {
+ case CssConstants.DISC:
+ setDiscStyle(element, em);
+ break;
+ case CssConstants.CIRCLE:
+ setCircleStyle(element, em);
+ break;
+ case CssConstants.SQUARE:
+ setSquareStyle(element, em);
+ break;
+ case CssConstants.DECIMAL:
+ setListSymbol(element, ListNumberingType.DECIMAL);
+ break;
+ case CssConstants.DECIMAL_LEADING_ZERO:
+ setListSymbol(element, ListNumberingType.DECIMAL_LEADING_ZERO);
+ break;
+ case CssConstants.UPPER_ALPHA:
+ case CssConstants.UPPER_LATIN:
+ setListSymbol(element, ListNumberingType.ENGLISH_UPPER);
+ break;
+ case CssConstants.LOWER_ALPHA:
+ case CssConstants.LOWER_LATIN:
+ setListSymbol(element, ListNumberingType.ENGLISH_LOWER);
+ break;
+ case CssConstants.LOWER_ROMAN:
+ setListSymbol(element, ListNumberingType.ROMAN_LOWER);
+ break;
+ case CssConstants.UPPER_ROMAN:
+ setListSymbol(element, ListNumberingType.ROMAN_UPPER);
+ break;
+ case CssConstants.LOWER_GREEK:
+ element.setProperty(Property.LIST_SYMBOL, new HtmlAlphabetSymbolFactory(GREEK_LOWERCASE));
+ break;
+ case CssConstants.NONE:
+ setListSymbol(element, new Text(""));
+ break;
+ default:
Logger logger = LoggerFactory.getLogger(ListStyleApplierUtil.class);
logger.error(MessageFormatUtil.format(Html2PdfLogMessageConstant.NOT_SUPPORTED_LIST_STYLE_TYPE, style));
- }
- // Fallback style
- if (stylesContainer instanceof IElementNode) {
- String elementName = ((IElementNode)stylesContainer).name();
- if (TagConstants.UL.equals(elementName)) {
- setDiscStyle(element, em);
- } else if (TagConstants.OL.equals(elementName)) {
- setListSymbol(element, ListNumberingType.DECIMAL);
+ // Fallback style
+ if (stylesContainer instanceof IElementNode) {
+ String elementName = ((IElementNode)stylesContainer).name();
+ if (TagConstants.UL.equals(elementName)) {
+ setDiscStyle(element, em);
+ } else if (TagConstants.OL.equals(elementName)) {
+ setListSymbol(element, ListNumberingType.DECIMAL);
+ }
}
- }
+ break;
}
}
@@ -334,8 +347,7 @@ public HtmlAlphabetSymbolFactory(char[] alphabet) {
public IElement createSymbol(int index, IPropertyContainer list, IPropertyContainer listItem) {
Object preValue = getListItemOrListProperty(listItem, list, Property.LIST_SYMBOL_PRE_TEXT);
Object postValue = getListItemOrListProperty(listItem, list, Property.LIST_SYMBOL_POST_TEXT);
- Text result = new Text(preValue + AlphabetNumbering.toAlphabetNumber(index, alphabet) + postValue);
- return result;
+ return new Text(preValue + AlphabetNumbering.toAlphabetNumber(index, alphabet) + postValue);
}
/**
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/MarginApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/MarginApplierUtil.java
index 040e70c97..2bf3521a0 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/MarginApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/MarginApplierUtil.java
@@ -163,12 +163,11 @@ private static Float parseMarginValue(String marginValString, float em, float re
if (marginUnitVal != null) {
if (!marginUnitVal.isPointValue()) {
if (baseValue != 0.0f) {
- return new Float(baseValue * marginUnitVal.getValue() * 0.01);
+ return baseValue * marginUnitVal.getValue() * 0.01f;
}
logger.error(Html2PdfLogMessageConstant.MARGIN_VALUE_IN_PERCENT_NOT_SUPPORTED);
return null;
}
-
return marginUnitVal.getValue();
} else {
return null;
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/OrphansWidowsApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/OrphansWidowsApplierUtil.java
index fb20bd7e7..ddbdefea7 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/OrphansWidowsApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/OrphansWidowsApplierUtil.java
@@ -58,7 +58,7 @@ public static void applyOrphansAndWidows(Map cssProps, IProperty
Integer minWidows = CssDimensionParsingUtils.parseInteger(cssProps.get(CssConstants.WIDOWS));
if (minWidows != null && minWidows > 0) {
element.setProperty(Property.WIDOWS_CONTROL,
- new ParagraphWidowsControl(minWidows.intValue(), MAX_LINES_TO_MOVE, OVERFLOW_PARAGRAPH_ON_VIOLATION));
+ new ParagraphWidowsControl(minWidows, MAX_LINES_TO_MOVE, OVERFLOW_PARAGRAPH_ON_VIOLATION));
}
}
@@ -66,7 +66,7 @@ public static void applyOrphansAndWidows(Map cssProps, IProperty
Integer minOrphans = CssDimensionParsingUtils.parseInteger(cssProps.get(CssConstants.ORPHANS));
if (minOrphans != null && minOrphans > 0) {
element.setProperty(Property.ORPHANS_CONTROL,
- new ParagraphOrphansControl(minOrphans.intValue()));
+ new ParagraphOrphansControl(minOrphans));
}
}
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/OutlineApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/OutlineApplierUtil.java
index 0f049613e..614ebd405 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/OutlineApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/OutlineApplierUtil.java
@@ -130,12 +130,16 @@ public static Border getCertainBorder(String outlineWidth, String outlineStyle,
float outlineWidthValue;
if (CssConstants.BORDER_WIDTH_VALUES.contains(outlineWidth)) {
- if (CssConstants.THIN.equals(outlineWidth)) {
- outlineWidth = "1px";
- } else if (CssConstants.MEDIUM.equals(outlineWidth)) {
- outlineWidth = "2px";
- } else if (CssConstants.THICK.equals(outlineWidth)) {
- outlineWidth = "3px";
+ switch (outlineWidth) {
+ case CssConstants.THIN:
+ outlineWidth = "1px";
+ break;
+ case CssConstants.MEDIUM:
+ outlineWidth = "2px";
+ break;
+ case CssConstants.THICK:
+ outlineWidth = "3px";
+ break;
}
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/OverflowApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/OverflowApplierUtil.java
index e8e737b38..307603b77 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/OverflowApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/OverflowApplierUtil.java
@@ -70,17 +70,27 @@ public static void applyOverflow(Map cssProps, IPropertyContaine
String overflow = null != cssProps && CssConstants.OVERFLOW_VALUES.contains(cssProps.get(CssConstants.OVERFLOW)) ? cssProps.get(CssConstants.OVERFLOW) : null;
String overflowX = null != cssProps && CssConstants.OVERFLOW_VALUES.contains(cssProps.get(CssConstants.OVERFLOW_X)) ? cssProps.get(CssConstants.OVERFLOW_X) : overflow;
- if (CssConstants.HIDDEN.equals(overflowX) || CssConstants.AUTO.equals(overflowX) || CssConstants.SCROLL.equals(overflowX)) {
- element.setProperty(Property.OVERFLOW_X, OverflowPropertyValue.HIDDEN);
- } else {
- element.setProperty(Property.OVERFLOW_X, OverflowPropertyValue.VISIBLE);
+ switch (overflowX) {
+ case CssConstants.HIDDEN:
+ case CssConstants.SCROLL:
+ case CssConstants.AUTO:
+ element.setProperty(Property.OVERFLOW_X, OverflowPropertyValue.HIDDEN);
+ break;
+ default:
+ element.setProperty(Property.OVERFLOW_X, OverflowPropertyValue.VISIBLE);
+ break;
}
String overflowY = null != cssProps && CssConstants.OVERFLOW_VALUES.contains(cssProps.get(CssConstants.OVERFLOW_Y)) ? cssProps.get(CssConstants.OVERFLOW_Y) : overflow;
- if (CssConstants.HIDDEN.equals(overflowY) || CssConstants.AUTO.equals(overflowY) || CssConstants.SCROLL.equals(overflowY)) {
- element.setProperty(Property.OVERFLOW_Y, OverflowPropertyValue.HIDDEN);
- } else {
- element.setProperty(Property.OVERFLOW_Y, OverflowPropertyValue.VISIBLE);
+ switch (overflowY) {
+ case CssConstants.HIDDEN:
+ case CssConstants.SCROLL:
+ case CssConstants.AUTO:
+ element.setProperty(Property.OVERFLOW_Y, OverflowPropertyValue.HIDDEN);
+ break;
+ default:
+ element.setProperty(Property.OVERFLOW_Y, OverflowPropertyValue.VISIBLE);
+ break;
}
}
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/PaddingApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/PaddingApplierUtil.java
index 1f522ed65..5e244952c 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/PaddingApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/PaddingApplierUtil.java
@@ -90,57 +90,26 @@ public static void applyPaddings(Map cssProps, ProcessorContext
* @param baseValueVertical value used by default for vertical dimension
*/
public static void applyPaddings(Map cssProps, ProcessorContext context, IPropertyContainer element, float baseValueVertical, float baseValueHorizontal) {
- String paddingTop = cssProps.get(CssConstants.PADDING_TOP);
- String paddingBottom = cssProps.get(CssConstants.PADDING_BOTTOM);
- String paddingLeft = cssProps.get(CssConstants.PADDING_LEFT);
- String paddingRight = cssProps.get(CssConstants.PADDING_RIGHT);
float em = CssDimensionParsingUtils.parseAbsoluteLength(cssProps.get(CssConstants.FONT_SIZE));
float rem = context.getCssContext().getRootFontSize();
- UnitValue paddingTopVal = CssDimensionParsingUtils.parseLengthValueToPt(paddingTop, em, rem);
- UnitValue paddingBottomVal = CssDimensionParsingUtils.parseLengthValueToPt(paddingBottom, em, rem);
- UnitValue paddingLeftVal = CssDimensionParsingUtils.parseLengthValueToPt(paddingLeft, em, rem);
- UnitValue paddingRightVal = CssDimensionParsingUtils.parseLengthValueToPt(paddingRight, em, rem);
-
- if (paddingTopVal != null) {
- if (paddingTopVal.isPointValue()) {
- element.setProperty(Property.PADDING_TOP, paddingTopVal);
- } else {
- if (baseValueVertical != 0.0f)
- element.setProperty(Property.PADDING_TOP, new UnitValue(UnitValue.POINT, baseValueVertical * paddingTopVal.getValue() * 0.01f));
- else
- logger.error(Html2PdfLogMessageConstant.PADDING_VALUE_IN_PERCENT_NOT_SUPPORTED);
- }
- }
-
- if (paddingBottomVal != null) {
- if (paddingBottomVal.isPointValue()) {
- element.setProperty(Property.PADDING_BOTTOM, paddingBottomVal);
- } else {
- if (baseValueVertical != 0.0f)
- element.setProperty(Property.PADDING_BOTTOM, new UnitValue(UnitValue.POINT, baseValueVertical * paddingBottomVal.getValue() * 0.01f));
- else
- logger.error(Html2PdfLogMessageConstant.PADDING_VALUE_IN_PERCENT_NOT_SUPPORTED);
- }
- }
-
- if (paddingLeftVal != null) {
- if (paddingLeftVal.isPointValue()) {
- element.setProperty(Property.PADDING_LEFT, paddingLeftVal);
- } else {
- if (baseValueHorizontal != 0.0f)
- element.setProperty(Property.PADDING_LEFT, new UnitValue(UnitValue.POINT, baseValueHorizontal * paddingLeftVal.getValue() * 0.01f));
- else
- logger.error(Html2PdfLogMessageConstant.PADDING_VALUE_IN_PERCENT_NOT_SUPPORTED);
- }
- }
+ applyPaddings(cssProps, CssConstants.PADDING_TOP, em, rem, Property.PADDING_TOP, element, baseValueVertical);
+ applyPaddings(cssProps, CssConstants.PADDING_BOTTOM, em, rem, Property.PADDING_BOTTOM, element, baseValueVertical);
+ applyPaddings(cssProps, CssConstants.PADDING_LEFT, em, rem, Property.PADDING_LEFT, element, baseValueHorizontal);
+ applyPaddings(cssProps, CssConstants.PADDING_RIGHT, em, rem, Property.PADDING_RIGHT, element, baseValueHorizontal);
+ }
- if (paddingRightVal != null) {
- if (paddingRightVal.isPointValue()) {
- element.setProperty(Property.PADDING_RIGHT, paddingRightVal);
+ private static void applyPaddings(Map cssProps, String cssConstants,
+ float em, float rem, int paddingProperty,
+ IPropertyContainer element, float baseValue) {
+ String paddingPropertyValue = cssProps.get(cssConstants);
+ UnitValue paddingVal = CssDimensionParsingUtils.parseLengthValueToPt(paddingPropertyValue, em, rem);
+ if (paddingVal != null) {
+ if (paddingVal.isPointValue()) {
+ element.setProperty(paddingProperty, paddingVal);
} else {
- if (baseValueHorizontal != 0.0f)
- element.setProperty(Property.PADDING_RIGHT, new UnitValue(UnitValue.POINT, baseValueHorizontal * paddingRightVal.getValue() * 0.01f));
+ if (baseValue != 0.0f)
+ element.setProperty(paddingProperty, new UnitValue(UnitValue.POINT, baseValue * paddingVal.getValue() * 0.01f));
else
logger.error(Html2PdfLogMessageConstant.PADDING_VALUE_IN_PERCENT_NOT_SUPPORTED);
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/PageBreakApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/PageBreakApplierUtil.java
index 103751734..692524ef4 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/PageBreakApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/PageBreakApplierUtil.java
@@ -132,12 +132,16 @@ private static boolean isEligibleForBreakBeforeAfter(ITagWorker parentTagWorker,
*/
private static HtmlPageBreak createHtmlPageBreak(String pageBreakVal) {
HtmlPageBreak pageBreak = null;
- if (CssConstants.ALWAYS.equals(pageBreakVal)) {
- pageBreak = new HtmlPageBreak(HtmlPageBreakType.ALWAYS);
- } else if (CssConstants.LEFT.equals(pageBreakVal)) {
- pageBreak = new HtmlPageBreak(HtmlPageBreakType.LEFT);
- } else if (CssConstants.RIGHT.equals(pageBreakVal)) {
- pageBreak = new HtmlPageBreak(HtmlPageBreakType.RIGHT);
+ switch (pageBreakVal) {
+ case CssConstants.ALWAYS:
+ pageBreak = new HtmlPageBreak(HtmlPageBreakType.ALWAYS);
+ break;
+ case CssConstants.LEFT:
+ pageBreak = new HtmlPageBreak(HtmlPageBreakType.LEFT);
+ break;
+ case CssConstants.RIGHT:
+ pageBreak = new HtmlPageBreak(HtmlPageBreakType.RIGHT);
+ break;
}
return pageBreak;
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/PositionApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/PositionApplierUtil.java
index c242cedf6..590ff4368 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/PositionApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/PositionApplierUtil.java
@@ -81,18 +81,22 @@ private PositionApplierUtil() {
*/
public static void applyPosition(Map cssProps, ProcessorContext context, IPropertyContainer element) {
String position = cssProps.get(CssConstants.POSITION);
- if (CssConstants.ABSOLUTE.equals(position)) {
- element.setProperty(Property.POSITION, LayoutPosition.ABSOLUTE);
- applyLeftRightTopBottom(cssProps, context, element, position);
- } else if (CssConstants.RELATIVE.equals(position)) {
- element.setProperty(Property.POSITION, LayoutPosition.RELATIVE);
- applyLeftRightTopBottom(cssProps, context, element, position);
- } else if (CssConstants.FIXED.equals(position)) {
+ switch (position) {
+ case CssConstants.ABSOLUTE:
+ element.setProperty(Property.POSITION, LayoutPosition.ABSOLUTE);
+ applyLeftRightTopBottom(cssProps, context, element, position);
+ break;
+ case CssConstants.RELATIVE:
+ element.setProperty(Property.POSITION, LayoutPosition.RELATIVE);
+ applyLeftRightTopBottom(cssProps, context, element, position);
+ break;
+ case CssConstants.FIXED:
// element.setProperty(Property.POSITION, LayoutPosition.FIXED);
// float em = CssUtils.parseAbsoluteLength(cssProps.get(CommonCssConstants.FONT_SIZE));
// applyLeftProperty(cssProps, element, em, Property.X);
// applyTopProperty(cssProps, element, em, Property.Y);
- // TODO DEVSIX-4104 support "fixed" value of position property
+ // TODO DEVSIX-4104 support "fixed" value of position property
+ break;
}
}
@@ -135,16 +139,7 @@ private static void applyLeftRightTopBottom(Map cssProps, Proces
* @param layoutPropertyMapping the layout property mapping
*/
private static void applyLeftProperty(Map cssProps, IPropertyContainer element, float em, float rem, int layoutPropertyMapping) {
- String left = cssProps.get(CssConstants.LEFT);
- UnitValue leftVal = CssDimensionParsingUtils.parseLengthValueToPt(left, em, rem);
- if (leftVal != null) {
- if (leftVal.isPointValue()) {
- element.setProperty(layoutPropertyMapping, leftVal.getValue());
- } else {
- logger.error(MessageFormatUtil.format(
- Html2PdfLogMessageConstant.CSS_PROPERTY_IN_PERCENTS_NOT_SUPPORTED, CommonCssConstants.LEFT));
- }
- }
+ applyProperty(cssProps, element, em, rem, layoutPropertyMapping, CssConstants.LEFT, CommonCssConstants.LEFT);
}
/**
@@ -157,16 +152,7 @@ private static void applyLeftProperty(Map cssProps, IPropertyCon
* @param layoutPropertyMapping the layout property mapping
*/
private static void applyRightProperty(Map cssProps, IPropertyContainer element, float em, float rem, int layoutPropertyMapping) {
- String right = cssProps.get(CssConstants.RIGHT);
- UnitValue rightVal = CssDimensionParsingUtils.parseLengthValueToPt(right, em, rem);
- if (rightVal != null) {
- if (rightVal.isPointValue()) {
- element.setProperty(layoutPropertyMapping, rightVal.getValue());
- } else {
- logger.error(MessageFormatUtil.format(
- Html2PdfLogMessageConstant.CSS_PROPERTY_IN_PERCENTS_NOT_SUPPORTED, CommonCssConstants.RIGHT));
- }
- }
+ applyProperty(cssProps, element, em, rem, layoutPropertyMapping, CssConstants.RIGHT, CommonCssConstants.RIGHT);
}
/**
@@ -179,16 +165,7 @@ private static void applyRightProperty(Map cssProps, IPropertyCo
* @param layoutPropertyMapping the layout property mapping
*/
private static void applyTopProperty(Map cssProps, IPropertyContainer element, float em, float rem, int layoutPropertyMapping) {
- String top = cssProps.get(CssConstants.TOP);
- UnitValue topVal = CssDimensionParsingUtils.parseLengthValueToPt(top, em, rem);
- if (topVal != null) {
- if (topVal.isPointValue()) {
- element.setProperty(layoutPropertyMapping, topVal.getValue());
- } else {
- logger.error(MessageFormatUtil.format(
- Html2PdfLogMessageConstant.CSS_PROPERTY_IN_PERCENTS_NOT_SUPPORTED, CommonCssConstants.TOP));
- }
- }
+ applyProperty(cssProps, element, em, rem, layoutPropertyMapping, CssConstants.TOP, CommonCssConstants.TOP);
}
/**
@@ -201,14 +178,19 @@ private static void applyTopProperty(Map cssProps, IPropertyCont
* @param layoutPropertyMapping the layout property mapping
*/
private static void applyBottomProperty(Map cssProps, IPropertyContainer element, float em, float rem, int layoutPropertyMapping) {
- String bottom = cssProps.get(CssConstants.BOTTOM);
- UnitValue bottomVal = CssDimensionParsingUtils.parseLengthValueToPt(bottom, em, rem);
- if (bottomVal != null) {
- if (bottomVal.isPointValue()) {
- element.setProperty(layoutPropertyMapping, bottomVal.getValue());
+ applyProperty(cssProps, element, em, rem, layoutPropertyMapping, CssConstants.BOTTOM, CommonCssConstants.BOTTOM);
+ }
+
+ private static void applyProperty(Map cssProps, IPropertyContainer element, float em, float rem,
+ int layoutPropertyMapping, String cssConstant, String commonCssConstant) {
+ String value = cssProps.get(cssConstant);
+ UnitValue val = CssDimensionParsingUtils.parseLengthValueToPt(value, em, rem);
+ if (val != null) {
+ if (val.isPointValue()) {
+ element.setProperty(layoutPropertyMapping, val.getValue());
} else {
logger.error(MessageFormatUtil.format(
- Html2PdfLogMessageConstant.CSS_PROPERTY_IN_PERCENTS_NOT_SUPPORTED, CommonCssConstants.BOTTOM));
+ Html2PdfLogMessageConstant.CSS_PROPERTY_IN_PERCENTS_NOT_SUPPORTED, commonCssConstant));
}
}
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/SupportedColColgroupPropertiesUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/SupportedColColgroupPropertiesUtil.java
index e234988ab..455c46e37 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/SupportedColColgroupPropertiesUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/SupportedColColgroupPropertiesUtil.java
@@ -134,6 +134,6 @@ private static Map getFilteredMap(Map map, Set 0 ? result : null;
+ return !result.isEmpty() ? result : null;
}
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/TransformationApplierUtil.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/TransformationApplierUtil.java
index 7e09d3c7d..b12159aae 100644
--- a/src/main/java/com/itextpdf/html2pdf/css/apply/util/TransformationApplierUtil.java
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/TransformationApplierUtil.java
@@ -51,6 +51,7 @@ This file is part of the iText (R) project.
import com.itextpdf.styledxmlparser.css.util.CssDimensionParsingUtils;
import java.util.Map;
+import java.util.Objects;
import static java.lang.Math.toRadians;
import static java.lang.Math.cos;
@@ -73,11 +74,10 @@ private TransformationApplierUtil() {
* @param element the element
*/
public static void applyTransformation(Map cssProps, ProcessorContext context, IPropertyContainer element) {
- String transformationFunction;
- if (cssProps.get(CssConstants.TRANSFORM) != null)
- transformationFunction = cssProps.get(CssConstants.TRANSFORM).toLowerCase();
- else
+ if(Objects.isNull(cssProps.get(CssConstants.TRANSFORM))) {
return;
+ }
+ String transformationFunction = cssProps.get(CssConstants.TRANSFORM).toLowerCase();
String[] components = transformationFunction.split("\\)");
Transform multipleFunction = new Transform(components.length);
for (String component : components) {
@@ -226,7 +226,7 @@ private static Transform.SingleTransform getSingleTransform(float a, float b, fl
*
* @param floats the transformation matrix (flattened) as array
*/
- private static Transform.SingleTransform getSingleTransform(float floats[]) {
+ private static Transform.SingleTransform getSingleTransform(float[] floats) {
return new Transform.SingleTransform(floats[0], floats[1], floats[2], floats[3],
new UnitValue(UnitValue.POINT, floats[4]), new UnitValue(UnitValue.POINT, floats[5]));
}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/BorderEnum.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/BorderEnum.java
new file mode 100644
index 000000000..01a09b9aa
--- /dev/null
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/BorderEnum.java
@@ -0,0 +1,8 @@
+package com.itextpdf.html2pdf.css.apply.util.enums;
+
+public enum BorderEnum {
+ TOP,
+ RIGHT,
+ BOTTOM,
+ LEFT;
+}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/BorderRadii.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/BorderRadii.java
new file mode 100644
index 000000000..d70499eca
--- /dev/null
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/BorderRadii.java
@@ -0,0 +1,8 @@
+package com.itextpdf.html2pdf.css.apply.util.enums;
+
+public enum BorderRadii {
+ TOP_LEFT,
+ TOP_RIGHT,
+ BOTTOM_RIGHT,
+ BOTTOM_LEFT;
+}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/CssCounterManagerOperation.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/CssCounterManagerOperation.java
new file mode 100644
index 000000000..5e127823b
--- /dev/null
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/CssCounterManagerOperation.java
@@ -0,0 +1,5 @@
+package com.itextpdf.html2pdf.css.apply.util.enums;
+
+public enum CssCounterManagerOperation {
+ RESET, INCREMENT
+}
diff --git a/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/RgbaColorProperty.java b/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/RgbaColorProperty.java
new file mode 100644
index 000000000..4f95f33f2
--- /dev/null
+++ b/src/main/java/com/itextpdf/html2pdf/css/apply/util/enums/RgbaColorProperty.java
@@ -0,0 +1,8 @@
+package com.itextpdf.html2pdf.css.apply.util.enums;
+
+public enum RgbaColorProperty {
+ RED,
+ GREEN,
+ BLUE,
+ ALPHA;
+}