You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by jm...@apache.org on 2016/12/16 03:21:03 UTC
svn commit: r1774551 - in /poi: site/src/documentation/content/xdocs/
trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/
trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/
trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/
Author: jmarkmurphy
Date: Fri Dec 16 03:21:02 2016
New Revision: 1774551
URL: http://svn.apache.org/viewvc?rev=1774551&view=rev
Log:
60465: Cannot specify interline spacing for a Paragraph in XWPF
Task-Url: https://bz.apache.org/bugzilla/show_bug.cgi?id=60465
Modified:
poi/site/src/documentation/content/xdocs/status.xml
poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/SimpleDocument.java
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java
Modified: poi/site/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/site/src/documentation/content/xdocs/status.xml?rev=1774551&r1=1774550&r2=1774551&view=diff
==============================================================================
--- poi/site/src/documentation/content/xdocs/status.xml (original)
+++ poi/site/src/documentation/content/xdocs/status.xml Fri Dec 16 03:21:02 2016
@@ -61,6 +61,7 @@
<summary-item>The third-party jar for commons-collections4 is now required for handling of OLE2 properties</summary-item>
</summary>
<actions>
+ <action dev="PD" type="add" fixes-bug="60465" module="XWPF">Cannot specify Interline spacing for paragraphs</action>
<action dev="PD" type="fix" fixes-bug="58237" module="XWPF">Unable to add image to Word document header</action>
<action dev="PD" type="update" fixes-bug="55902" module="SL Common">Mixed fonts issue with Chinese characters (unable to form images from ppt)</action>
<action dev="PD" type="remove" fixes-bug="60331" breaks-compatibility="true" module="OOXML">Remove deprecated classes - remove constructors with PackageRelationship argument</action>
Modified: poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/SimpleDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/SimpleDocument.java?rev=1774551&r1=1774550&r2=1774551&view=diff
==============================================================================
--- poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/SimpleDocument.java (original)
+++ poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/SimpleDocument.java Fri Dec 16 03:21:02 2016
@@ -85,7 +85,7 @@ public class SimpleDocument {
//p3.setAlignment(ParagraphAlignment.DISTRIBUTE);
p3.setAlignment(ParagraphAlignment.BOTH);
- p3.setSpacingLineRule(LineSpacingRule.EXACT);
+ p3.setSpacingBetween(15, LineSpacingRule.EXACT);
p3.setIndentationFirstLine(600);
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java?rev=1774551&r1=1774550&r2=1774551&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java Fri Dec 16 03:21:02 2016
@@ -899,7 +899,7 @@ public class XWPFParagraph implements IB
* Specifies the spacing that should be added after the last line in this
* paragraph in the document in absolute units.
*
- * @return bigInteger - value representing the spacing after the paragraph
+ * @return int - value representing the spacing after the paragraph
* @see #setSpacingAfterLines(int)
*/
public int getSpacingAfterLines() {
@@ -922,7 +922,7 @@ public class XWPFParagraph implements IB
*
* @param spaces -
* a positive whole number, whose contents consist of a
- * measurement in twentieths of a
+ * measurement in hundredths of a line
*/
public void setSpacingAfterLines(int spaces) {
CTSpacing spacing = getCTSpacing(true);
@@ -1012,12 +1012,67 @@ public class XWPFParagraph implements IB
* @param rule
* @see LineSpacingRule
*/
+ // TODO Fix this to convert line to equivalent value, or deprecate this in
+ // favor of setSpacingLine(double, LineSpacingRule)
public void setSpacingLineRule(LineSpacingRule rule) {
CTSpacing spacing = getCTSpacing(true);
spacing.setLineRule(STLineSpacingRule.Enum.forInt(rule.getValue()));
}
/**
+ * Return the spacing between lines of a paragraph. The units of the return value depends on the
+ * {@link LineSpacingRule}. If AUTO, the return value is in lines, otherwise the return
+ * value is in points
+ *
+ * @return a double specifying points or lines.
+ */
+ public double getSpacingBetween() {
+ 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);
+ }
+
+ /**
+ * Sets the spacing between lines in a paragraph
+ *
+ * @param spacing - A double specifying spacing in inches or lines. If rule is
+ * AUTO, then spacing is in lines. Otherwise spacing is in points.
+ * @param rule - {@link LineSpacingRule} indicating how spacing is interpreted. If
+ * AUTO, then spacing value is in lines, and the height depends on the
+ * font size. If AT_LEAST, then spacing value is in inches, and is the
+ * minimum size of the line. If the line height is taller, then the
+ * line expands to match. If EXACT, then spacing is the exact line
+ * height. If the text is taller than the line height, then it is
+ * clipped at the top.
+ */
+ public void setSpacingBetween(double spacing, LineSpacingRule rule) {
+ CTSpacing ctSp = getCTSpacing(true);
+ switch (rule) {
+ case AUTO:
+ ctSp.setLine(new BigInteger(String.valueOf(Math.round(spacing * 240.0))));
+ break;
+ default:
+ ctSp.setLine(new BigInteger(String.valueOf(Math.round(spacing * 20.0))));
+ }
+ ctSp.setLineRule(STLineSpacingRule.Enum.forInt(rule.getValue()));
+ }
+
+ /**
+ * Sets the spacing between lines in a paragraph
+ *
+ * @param spacing - A double specifying spacing in lines.
+ */
+ public void setSpacingBetween(double spacing) {
+ setSpacingBetween(spacing, LineSpacingRule.AUTO);
+ }
+
+ /**
* Specifies the indentation which shall be placed between the left text
* margin for this paragraph and the left edge of that paragraph's content
* in a left to right paragraph, and the right text margin and the right
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java?rev=1774551&r1=1774550&r2=1774551&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFParagraph.java Fri Dec 16 03:21:02 2016
@@ -160,14 +160,34 @@ public final class TestXWPFParagraph {
CTP ctp = p.getCTP();
CTPPr ppr = ctp.getPPr() == null ? ctp.addNewPPr() : ctp.getPPr();
+ assertEquals(-1, p.getSpacingBefore());
assertEquals(-1, p.getSpacingAfter());
+ assertEquals(-1, p.getSpacingBetween(), 0.1);
+ assertEquals(LineSpacingRule.AUTO, p.getSpacingLineRule());
CTSpacing spacing = ppr.addNewSpacing();
spacing.setAfter(new BigInteger("10"));
assertEquals(10, p.getSpacingAfter());
+ spacing.setBefore(new BigInteger("10"));
+ assertEquals(10, p.getSpacingBefore());
p.setSpacingAfter(100);
assertEquals(100, spacing.getAfter().intValue());
+ p.setSpacingBefore(100);
+ assertEquals(100, spacing.getBefore().intValue());
+
+ p.setSpacingBetween(.25, LineSpacingRule.EXACT);
+ assertEquals(.25, p.getSpacingBetween(), 0.01);
+ assertEquals(LineSpacingRule.EXACT, p.getSpacingLineRule());
+ p.setSpacingBetween(1.25, LineSpacingRule.AUTO);
+ assertEquals(1.25, p.getSpacingBetween(), 0.01);
+ assertEquals(LineSpacingRule.AUTO, p.getSpacingLineRule());
+ p.setSpacingBetween(.5, LineSpacingRule.AT_LEAST);
+ assertEquals(.5, p.getSpacingBetween(), 0.01);
+ assertEquals(LineSpacingRule.AT_LEAST, p.getSpacingLineRule());
+ p.setSpacingBetween(1.15);
+ assertEquals(1.15, p.getSpacingBetween(), 0.01);
+ assertEquals(LineSpacingRule.AUTO, p.getSpacingLineRule());
doc.close();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org