#55030 - RichTextRun getFontName can not get Chinese font name

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1722479 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andreas Beeker 2015-12-31 23:49:34 +00:00
parent 8bfebb7a3a
commit e7d60982c7
4 changed files with 36 additions and 8 deletions

View 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 * Fetch the value of the given Paragraph related TextProp. Returns null if
* that TextProp isn't present. If the TextProp isn't present, the value * that TextProp isn't present. If the TextProp isn't present, the value
* from the appropriate Master Sheet will apply. * from the appropriate Master Sheet will apply.
*
* The propName can be a comma-separated list, in case multiple equivalent values
* are queried
*/ */
protected static TextProp getPropVal(TextPropCollection props, String propName, HSLFTextParagraph paragraph) { protected static TextProp getPropVal(TextPropCollection props, String propName, HSLFTextParagraph paragraph) {
TextProp prop = props.findByName(propName); String propNames[] = propName.split(",");
if (prop != null) return prop; for (String pn : propNames) {
TextProp prop = props.findByName(pn);
if (prop != null) return prop;
}
BitMaskTextProp maskProp = (BitMaskTextProp) props.findByName(ParagraphFlagsTextProp.NAME); BitMaskTextProp maskProp = (BitMaskTextProp) props.findByName(ParagraphFlagsTextProp.NAME);
boolean hardAttribute = (maskProp != null && maskProp.getValue() == 0); boolean hardAttribute = (maskProp != null && maskProp.getValue() == 0);
@ -698,7 +704,13 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
} }
boolean isChar = props.getTextPropType() == TextPropType.character; boolean isChar = props.getTextPropType() == TextPropType.character;
return master.getStyleAttribute(txtype, paragraph.getIndentLevel(), propName, isChar);
for (String pn : propNames) {
TextProp prop = master.getStyleAttribute(txtype, paragraph.getIndentLevel(), pn, isChar);
if (prop != null) return prop;
}
return null;
} }
/** /**

View File

@ -319,7 +319,7 @@ public final class HSLFTextRun implements TextRun {
if (sheet == null || slideShow == null) { if (sheet == null || slideShow == null) {
return _fontFamily; 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; } if (tp == null) { return null; }
return slideShow.getFontCollection().getFontWithId(tp.getValue()); return slideShow.getFontCollection().getFontWithId(tp.getValue());
} }

View File

@ -43,9 +43,7 @@ import org.apache.poi.hslf.exceptions.OldPowerPointFormatException;
import org.apache.poi.hslf.extractor.PowerPointExtractor; import org.apache.poi.hslf.extractor.PowerPointExtractor;
import org.apache.poi.hslf.model.HeadersFooters; import org.apache.poi.hslf.model.HeadersFooters;
import org.apache.poi.hslf.record.Document; 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.Record;
import org.apache.poi.hslf.record.RoundTripHFPlaceholder12;
import org.apache.poi.hslf.record.SlideListWithText; import org.apache.poi.hslf.record.SlideListWithText;
import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet;
import org.apache.poi.hslf.record.TextHeaderAtom; import org.apache.poi.hslf.record.TextHeaderAtom;
@ -783,8 +781,7 @@ public final class TestBugs {
@Test @Test
public void bug58159() throws IOException { public void bug58159() throws IOException {
File sample = HSLFTestDataSamples.getSampleFile("bug58159_headers-and-footers.ppt"); HSLFSlideShow ppt = open("bug58159_headers-and-footers.ppt");
HSLFSlideShow ppt = (HSLFSlideShow)SlideShowFactory.create(sample);
HeadersFooters hf = ppt.getSlideHeadersFooters(); HeadersFooters hf = ppt.getSlideHeadersFooters();
assertNull(hf.getHeaderText()); assertNull(hf.getHeaderText());
assertEquals("Slide footer", hf.getFooterText()); assertEquals("Slide footer", hf.getFooterText());
@ -806,6 +803,25 @@ public final class TestBugs {
} }
ppt.close(); 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 { private static HSLFSlideShow open(String fileName) throws IOException {
File sample = HSLFTestDataSamples.getSampleFile(fileName); File sample = HSLFTestDataSamples.getSampleFile(fileName);

Binary file not shown.