]> source.dussan.org Git - poi.git/commitdiff
support kerning in XSLF text runs
authorYegor Kozlov <yegor@apache.org>
Wed, 25 Jan 2012 07:53:07 +0000 (07:53 +0000)
committerYegor Kozlov <yegor@apache.org>
Wed, 25 Jan 2012 07:53:07 +0000 (07:53 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1235668 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextRun.java
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java
src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java [new file with mode: 0644]

index e78acefb8e9394b7a164ee1774d9c4ff6b80c4d3..b2d5953743a0ca4ce8f98bdc4641fa61cbef0382 100644 (file)
@@ -117,7 +117,8 @@ public class XSLFTextParagraph implements Iterable<XSLFTextRun>{
 \r
     public XSLFTextRun addNewTextRun(){\r
         CTRegularTextRun r = _p.addNewR();\r
-        r.addNewRPr();\r
+        CTTextCharacterProperties rPr = r.addNewRPr();\r
+        rPr.setLang("en-US");\r
         XSLFTextRun run = new XSLFTextRun(r, this);\r
         _runs.add(run);\r
         return run;\r
index cd94cdd0b3dada22574c6b130bd483228b3d24d4..ff54d5ceba8f35b66345208aa47cfb05ab7952a7 100644 (file)
@@ -167,6 +167,10 @@ public class XSLFTextRun {
         if(fontSize == -1.0) {\r
             if(rPr.isSetSz()) rPr.unsetSz();\r
         } else {\r
+            if(fontSize < 1.0) {\r
+                throw new IllegalArgumentException("Minimum font size is 1pt but was " + fontSize);\r
+            }\r
+\r
             rPr.setSz((int)(100*fontSize));\r
         }\r
     }\r
@@ -212,6 +216,24 @@ public class XSLFTextRun {
         return fetcher.getValue() == null ? 0 : fetcher.getValue();\r
     }\r
 \r
+    /**\r
+     * Set the spacing between characters within a text run.\r
+     * <p>\r
+     * The spacing is specified in points. Positive values will cause the text to expand,\r
+     * negative values to condense.\r
+     * </p>\r
+     *\r
+     * @param spc  character spacing in points.\r
+     */\r
+    public void setCharacterSpacing(double spc){\r
+        CTTextCharacterProperties rPr = getRpR();\r
+        if(spc == 0.0) {\r
+            if(rPr.isSetSpc()) rPr.unsetSpc();\r
+        } else {\r
+            rPr.setSpc((int)(100*spc));\r
+        }\r
+    }\r
+\r
     /**\r
      * Specifies the typeface, or name of the font that is to be used for this text run.\r
      *\r
index 50d4c812b5c650c7e8ced62256179c8f683a6439..19eee771f4bffeeb6995ecb5f0f4b3bfc0f89adc 100644 (file)
@@ -27,11 +27,7 @@ import java.awt.image.BufferedImage;
 import java.util.List;\r
 \r
 /**\r
- * Created by IntelliJ IDEA.\r
- * User: yegor\r
- * Date: Nov 10, 2011\r
- * Time: 1:43:25 PM\r
- * To change this template use File | Settings | File Templates.\r
+ * @author Yegor Kozlov\r
  */\r
 public class TestXSLFTextParagraph extends TestCase {\r
     private static POILogger _logger = POILogFactory.getLogger(XSLFTextParagraph.class);\r
diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java
new file mode 100644 (file)
index 0000000..3ee2616
--- /dev/null
@@ -0,0 +1,66 @@
+/*\r
+ *  ====================================================================\r
+ *    Licensed to the Apache Software Foundation (ASF) under one or more\r
+ *    contributor license agreements.  See the NOTICE file distributed with\r
+ *    this work for additional information regarding copyright ownership.\r
+ *    The ASF licenses this file to You under the Apache License, Version 2.0\r
+ *    (the "License"); you may not use this file except in compliance with\r
+ *    the License.  You may obtain a copy of the License at\r
+ *\r
+ *        http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ *    Unless required by applicable law or agreed to in writing, software\r
+ *    distributed under the License is distributed on an "AS IS" BASIS,\r
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ *    See the License for the specific language governing permissions and\r
+ *    limitations under the License.\r
+ * ====================================================================\r
+ */\r
+package org.apache.poi.xslf.usermodel;\r
+\r
+import junit.framework.TestCase;\r
+import org.apache.poi.util.POILogFactory;\r
+import org.apache.poi.util.POILogger;\r
+import org.apache.poi.xslf.XSLFTestDataSamples;\r
+\r
+import java.awt.*;\r
+import java.awt.geom.Rectangle2D;\r
+import java.awt.image.BufferedImage;\r
+import java.util.List;\r
+\r
+/**\r
+ * @author Yegor Kozlov\r
+ */\r
+public class TestXSLFTextRun extends TestCase {\r
+\r
+    public void testRunProperties(){\r
+        XMLSlideShow ppt = new XMLSlideShow();\r
+        XSLFSlide slide = ppt.createSlide();\r
+        XSLFTextShape sh = slide.createAutoShape();\r
+\r
+        XSLFTextRun r = sh.addNewTextParagraph().addNewTextRun();\r
+        assertEquals("en-US", r.getRpR().getLang());\r
+\r
+        assertEquals(0., r.getCharacterSpacing());\r
+        r.setCharacterSpacing(3);\r
+        assertEquals(3., r.getCharacterSpacing());\r
+        r.setCharacterSpacing(-3);\r
+        assertEquals(-3., r.getCharacterSpacing());\r
+        r.setCharacterSpacing(0);\r
+        assertEquals(0., r.getCharacterSpacing());\r
+        assertFalse(r.getRpR().isSetSpc());\r
+\r
+        assertEquals(Color.black, r.getFontColor());\r
+        r.setFontColor(Color.red);\r
+        assertEquals(Color.red, r.getFontColor());\r
+\r
+        assertEquals("Calibri", r.getFontFamily());\r
+        r.setFontFamily("Arial");\r
+        assertEquals("Arial", r.getFontFamily());\r
+\r
+        assertEquals(18.0, r.getFontSize());\r
+        r.setFontSize(13.0);\r
+        assertEquals(13.0, r.getFontSize());\r
+\r
+    }\r
+}\r