Author: fanningpj Date: Thu Jul 16 12:50:40 2020 New Revision: 1879950 URL: http://svn.apache.org/viewvc?rev=1879950&view=rev Log: [bug-64605] add support for non-integer font sizes on character runs (use double instead of float)
Modified: poi/trunk/src/java/org/apache/poi/wp/usermodel/CharacterRun.java poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultRunStyle.java poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFStyles.java poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterRun.java Modified: poi/trunk/src/java/org/apache/poi/wp/usermodel/CharacterRun.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/wp/usermodel/CharacterRun.java?rev=1879950&r1=1879949&r2=1879950&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/wp/usermodel/CharacterRun.java (original) +++ poi/trunk/src/java/org/apache/poi/wp/usermodel/CharacterRun.java Thu Jul 16 12:50:40 2020 @@ -48,9 +48,9 @@ public interface CharacterRun { void setImprinted(boolean imprint); int getFontSize(); - float getFontSizeAsFloat(); + Double getFontSizeAsDouble(); void setFontSize(int halfPoints); - void setFontSize(float halfPoints); + void setFontSize(double halfPoints); int getCharacterSpacing(); void setCharacterSpacing(int twips); Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultRunStyle.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultRunStyle.java?rev=1879950&r1=1879949&r2=1879950&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultRunStyle.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDefaultRunStyle.java Thu Jul 16 12:50:40 2020 @@ -19,6 +19,9 @@ package org.apache.poi.xwpf.usermodel; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; +import java.math.BigDecimal; +import java.math.RoundingMode; + /** * Default Character Run style, from which other styles will override * TODO Share logic with {@link XWPFRun} which also uses CTRPr @@ -35,8 +38,18 @@ public class XWPFDefaultRunStyle { } public int getFontSize() { - if (rpr.isSetSz()) - return rpr.getSz().getVal().intValue() / 2; - return -1; + BigDecimal bd = getFontSizeAsBigDecimal(0); + return bd == null ? -1 : bd.intValue(); + } + + public Double getFontSizeAsDouble() { + BigDecimal bd = getFontSizeAsBigDecimal(1); + return bd == null ? null : bd.doubleValue(); + } + + 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; } } Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java?rev=1879950&r1=1879949&r2=1879950&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java Thu Jul 16 12:50:40 2020 @@ -868,13 +868,14 @@ public class XWPFRun implements ISDTCont * characters in the contents of this run when displayed. * * @return value representing the font size (non-integer size will be rounded with half rounding up) - * @deprecated use {@link #getFontSizeAsFloat()} + * @deprecated use {@link #getFontSizeAsDouble()} */ @Deprecated @Removal(version = "6.0.0") @Override public int getFontSize() { - return getFontSizeAsBigDecimal(0).intValue(); + BigDecimal bd = getFontSizeAsBigDecimal(0); + return bd == null ? -1 : bd.intValue(); } /** @@ -885,15 +886,16 @@ public class XWPFRun implements ISDTCont * @since POI 5.0.0 */ @Override - public float getFontSizeAsFloat() { - return getFontSizeAsBigDecimal(1).floatValue(); + public Double getFontSizeAsDouble() { + BigDecimal bd = getFontSizeAsBigDecimal(1); + return bd == null ? null : bd.doubleValue(); } 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) : - BigDecimal.valueOf(-1); + null; } /** @@ -930,7 +932,7 @@ public class XWPFRun implements ISDTCont * @since POI 5.0.0 */ @Override - public void setFontSize(float size) { + public void setFontSize(double size) { BigDecimal bd = BigDecimal.valueOf(size); CTRPr pr = getRunProperties(true); CTHpsMeasure ctSize = pr.isSetSz() ? pr.getSz() : pr.addNewSz(); Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java?rev=1879950&r1=1879949&r2=1879950&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFRun.java Thu Jul 16 12:50:40 2020 @@ -183,7 +183,7 @@ public class TestXWPFRun { XWPFRun run = new XWPFRun(ctRun, irb); assertEquals(7, run.getFontSize()); - assertEquals(7.0f, run.getFontSizeAsFloat(), 0.01); + assertEquals(7.0, run.getFontSizeAsDouble(), 0.01); run.setFontSize(24); assertEquals(48, rpr.getSz().getVal().longValue()); @@ -191,7 +191,7 @@ public class TestXWPFRun { run.setFontSize(24.5f); assertEquals(49, rpr.getSz().getVal().longValue()); assertEquals(25, run.getFontSize()); - assertEquals(24.5f, run.getFontSizeAsFloat(), 0.01); + assertEquals(24.5, run.getFontSizeAsDouble(), 0.01); } @Test Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFStyles.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFStyles.java?rev=1879950&r1=1879949&r2=1879950&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFStyles.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFStyles.java Thu Jul 16 12:50:40 2020 @@ -202,6 +202,7 @@ public final class TestXWPFStyles { assertNotNull(styles.getDefaultParagraphStyle()); assertEquals(11, styles.getDefaultRunStyle().getFontSize()); + assertEquals(11.0, styles.getDefaultRunStyle().getFontSizeAsDouble(), 0.01); assertEquals(200, styles.getDefaultParagraphStyle().getSpacingAfter()); } } Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterRun.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterRun.java?rev=1879950&r1=1879949&r2=1879950&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterRun.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterRun.java Thu Jul 16 12:50:40 2020 @@ -352,9 +352,9 @@ public final class CharacterRun extends return _props.getHps(); } - public float getFontSizeAsFloat() + public Double getFontSizeAsDouble() { - return (float)getFontSize(); + return (double)getFontSize(); } public void setFontSize(int halfPoints) @@ -365,7 +365,7 @@ public final class CharacterRun extends } - public void setFontSize(float halfPoints) + public void setFontSize(double halfPoints) { setFontSize(BigDecimal.valueOf(halfPoints).setScale(0, RoundingMode.HALF_UP).intValue()); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org