]> source.dussan.org Git - poi.git/commitdiff
#55030 - RichTextRun getFontName can not get Chinese font name
authorAndreas Beeker <kiwiwings@apache.org>
Thu, 31 Dec 2015 23:49:34 +0000 (23:49 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Thu, 31 Dec 2015 23:49:34 +0000 (23:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1722479 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java
src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java
test-data/slideshow/bug55030.ppt [new file with mode: 0644]

index 8460a5b9795ca4890f378700e3fd5c683b97aaba..f1443ccfe01cfd41ea72b19ae89ec73af6fe1209 100644 (file)
@@ -680,10 +680,16 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
      * Fetch the value of the given Paragraph related TextProp. Returns null if\r
      * that TextProp isn't present. If the TextProp isn't present, the value\r
      * from the appropriate Master Sheet will apply.\r
+     * \r
+     * The propName can be a comma-separated list, in case multiple equivalent values\r
+     * are queried\r
      */\r
     protected static TextProp getPropVal(TextPropCollection props, String propName, HSLFTextParagraph paragraph) {\r
-        TextProp prop = props.findByName(propName);\r
-        if (prop != null) return prop;\r
+        String propNames[] = propName.split(",");\r
+        for (String pn : propNames) {\r
+            TextProp prop = props.findByName(pn);\r
+            if (prop != null) return prop;\r
+        }\r
 \r
         BitMaskTextProp maskProp = (BitMaskTextProp) props.findByName(ParagraphFlagsTextProp.NAME);\r
         boolean hardAttribute = (maskProp != null && maskProp.getValue() == 0);\r
@@ -698,7 +704,13 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         }\r
 \r
         boolean isChar = props.getTextPropType() == TextPropType.character;\r
-        return master.getStyleAttribute(txtype, paragraph.getIndentLevel(), propName, isChar);\r
+        \r
+        for (String pn : propNames) {\r
+            TextProp prop = master.getStyleAttribute(txtype, paragraph.getIndentLevel(), pn, isChar);\r
+            if (prop != null) return prop;\r
+        }\r
+        \r
+        return null;\r
     }\r
 \r
     /**\r
index 5e6a705def1c160e5791ba3ace21c65365ab498d..437fb745b8ad9396417f9168dcf41aafeef13df7 100644 (file)
@@ -319,7 +319,7 @@ public final class HSLFTextRun implements TextRun {
                if (sheet == null || slideShow == null) {
                        return _fontFamily;
                }
-        TextProp tp = getPropVal(characterStyle, "font.index", parentParagraph);
+        TextProp tp = getPropVal(characterStyle, "font.index,asian.font.index,ansi.font.index,symbol.font.index", parentParagraph);
         if (tp == null) { return null; }
                return slideShow.getFontCollection().getFontWithId(tp.getValue());
        }
index b57d9e4f2f795fcb2fd1013e1027c53e9a208462..2c166ebf1f8c5806620e38311efe79c8062b21d5 100644 (file)
@@ -43,9 +43,7 @@ import org.apache.poi.hslf.exceptions.OldPowerPointFormatException;
 import org.apache.poi.hslf.extractor.PowerPointExtractor;
 import org.apache.poi.hslf.model.HeadersFooters;
 import org.apache.poi.hslf.record.Document;
-import org.apache.poi.hslf.record.OEPlaceholderAtom;
 import org.apache.poi.hslf.record.Record;
-import org.apache.poi.hslf.record.RoundTripHFPlaceholder12;
 import org.apache.poi.hslf.record.SlideListWithText;
 import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet;
 import org.apache.poi.hslf.record.TextHeaderAtom;
@@ -783,8 +781,7 @@ public final class TestBugs {
 
     @Test
     public void bug58159() throws IOException {
-        File sample = HSLFTestDataSamples.getSampleFile("bug58159_headers-and-footers.ppt");
-        HSLFSlideShow ppt = (HSLFSlideShow)SlideShowFactory.create(sample);
+        HSLFSlideShow ppt = open("bug58159_headers-and-footers.ppt");
         HeadersFooters hf = ppt.getSlideHeadersFooters();
         assertNull(hf.getHeaderText());
         assertEquals("Slide footer", hf.getFooterText());
@@ -806,6 +803,25 @@ public final class TestBugs {
         }
         ppt.close();
     }
+
+    @Test
+    public void bug55030() throws IOException {
+        HSLFSlideShow ppt = open("bug55030.ppt");
+        
+        String expFamily = "\u96b6\u4e66";
+        
+        HSLFSlide sl = ppt.getSlides().get(0);
+        for (List<HSLFTextParagraph> paraList : sl.getTextParagraphs()) {
+            for (HSLFTextParagraph htp : paraList) {
+                for (HSLFTextRun htr : htp) {
+                    String actFamily = htr.getFontFamily();
+                    assertEquals(expFamily, actFamily);
+                }
+            }
+        }
+        
+        ppt.close();
+    }
     
     private static HSLFSlideShow open(String fileName) throws IOException {
         File sample = HSLFTestDataSamples.getSampleFile(fileName);
diff --git a/test-data/slideshow/bug55030.ppt b/test-data/slideshow/bug55030.ppt
new file mode 100644 (file)
index 0000000..1f2f22b
Binary files /dev/null and b/test-data/slideshow/bug55030.ppt differ