diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/model/CharacterPropertyFetcher.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/model/CharacterPropertyFetcher.java index beb8c5a431..0ad4ef8743 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/model/CharacterPropertyFetcher.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/model/CharacterPropertyFetcher.java @@ -65,6 +65,7 @@ public final class CharacterPropertyFetcher extends PropertyFetcher { if (!(sheet instanceof XSLFSlideMaster)) { fetchRunProp(); + fetchParagraphDefaultRunProp(); fetchShapeProp(shape); fetchThemeProp(shape); } @@ -78,6 +79,15 @@ public final class CharacterPropertyFetcher extends PropertyFetcher { fetchProp(run.getRPr(false)); } + private void fetchParagraphDefaultRunProp() { + if (!isSet()) { + CTTextParagraphProperties pr = run.getParagraph().getXmlObject().getPPr(); + if (pr != null) { + fetchProp(pr.getDefRPr()); + } + } + } + private void fetchShapeProp(XSLFShape shape) { if (!isSet()) { shape.fetchShapeProperty(this); diff --git a/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFBugs.java b/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFBugs.java index acbf365046..08250192ac 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFBugs.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFBugs.java @@ -77,25 +77,7 @@ import org.apache.poi.sl.usermodel.TextShape; import org.apache.poi.sl.usermodel.VerticalAlignment; import org.apache.poi.util.IOUtils; import org.apache.poi.util.NullPrintStream; -import org.apache.poi.xslf.usermodel.XMLSlideShow; -import org.apache.poi.xslf.usermodel.XSLFAutoShape; -import org.apache.poi.xslf.usermodel.XSLFGroupShape; -import org.apache.poi.xslf.usermodel.XSLFHyperlink; -import org.apache.poi.xslf.usermodel.XSLFNotes; -import org.apache.poi.xslf.usermodel.XSLFObjectShape; -import org.apache.poi.xslf.usermodel.XSLFPictureData; -import org.apache.poi.xslf.usermodel.XSLFPictureShape; -import org.apache.poi.xslf.usermodel.XSLFRelation; -import org.apache.poi.xslf.usermodel.XSLFShape; -import org.apache.poi.xslf.usermodel.XSLFSlide; -import org.apache.poi.xslf.usermodel.XSLFSlideLayout; -import org.apache.poi.xslf.usermodel.XSLFSlideMaster; -import org.apache.poi.xslf.usermodel.XSLFTable; -import org.apache.poi.xslf.usermodel.XSLFTableCell; -import org.apache.poi.xslf.usermodel.XSLFTableRow; -import org.apache.poi.xslf.usermodel.XSLFTextBox; -import org.apache.poi.xslf.usermodel.XSLFTextParagraph; -import org.apache.poi.xslf.usermodel.XSLFTextRun; +import org.apache.poi.xslf.usermodel.*; import org.apache.poi.xslf.util.DummyGraphics2d; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; @@ -1080,4 +1062,18 @@ class TestXSLFBugs { } } + @Test + public void bug65228() throws IOException { + try (XMLSlideShow ppt = openSampleDocument("bug65228.pptx")) { + TextRun.TextCap act = ppt.getSlides().stream() + .flatMap(s -> s.getShapes().stream()) + .filter(s -> "März 2021\u2026".equals(s.getShapeName())) + .map(XSLFTextShape.class::cast) + .flatMap(s -> s.getTextParagraphs().stream()) + .flatMap(s -> s.getTextRuns().stream()) + .map(XSLFTextRun::getTextCap) + .findFirst().orElse(null); + assertEquals(TextRun.TextCap.ALL, act); + } + } } diff --git a/poi/src/main/java/org/apache/poi/sl/image/ImageHeaderEMF.java b/poi/src/main/java/org/apache/poi/sl/image/ImageHeaderEMF.java index 6dd5faf440..646c88eb9d 100644 --- a/poi/src/main/java/org/apache/poi/sl/image/ImageHeaderEMF.java +++ b/poi/src/main/java/org/apache/poi/sl/image/ImageHeaderEMF.java @@ -50,7 +50,7 @@ public class ImageHeaderEMF { int top = LittleEndian.getInt(data, offset); offset += 4; int right = LittleEndian.getInt(data, offset); offset += 4; int bottom = LittleEndian.getInt(data, offset); offset += 4; - deviceBounds = new Rectangle(left, top, right-left, bottom-top); + deviceBounds = new Rectangle(left, top, right-left == -1 ? 0 : right-left, bottom-top == -1 ? 0 : bottom-top); // ignore frame bounds offset += 16; String signature = new String(data, offset, EMF_SIGNATURE.length(), LocaleUtil.CHARSET_1252); diff --git a/test-data/slideshow/bug65228.pptx b/test-data/slideshow/bug65228.pptx new file mode 100644 index 0000000000..e7de0c0d9a Binary files /dev/null and b/test-data/slideshow/bug65228.pptx differ