]> source.dussan.org Git - poi.git/commitdiff
Bugzilla 52209: fixed inserting multiple pictures to a group or slide in XSLF
authorYegor Kozlov <yegor@apache.org>
Sat, 19 Nov 2011 12:28:33 +0000 (12:28 +0000)
committerYegor Kozlov <yegor@apache.org>
Sat, 19 Nov 2011 12:28:33 +0000 (12:28 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1203969 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java

index ace9d1164228dfe29a264dc032ee98b87910055b..4741a2e3416582737888befb1a798cb4eba826d7 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta5" date="2011-??-??">
+           <action dev="poi-developers" type="fix">52209 - fixed inserting multiple pictures in XSLF </action>
            <action dev="poi-developers" type="fix">51803 - fixed HSLF TextExtractor to extract content from master slide </action>
            <action dev="poi-developers" type="fix">52190 - null check on XWPF setFontFamily</action>
            <action dev="poi-developers" type="fix">52062 - ensure that temporary files in SXSSF are deleted</action>
index efec667a933fac9b288e691959fafcb4519ae18d..9de0c7493a4e3186e1a123c4d8c694faf8094c46 100644 (file)
@@ -338,7 +338,7 @@ public class XMLSlideShow  extends POIXMLDocument {
     public int addPicture(byte[] pictureData, int format) {
         getAllPictures();
         
-        int imageNumber = getPackage().getPartsByName(Pattern.compile("/ppt/media/.*?")).size() + 1;
+        int imageNumber = _pictures.size() + 1;
         XSLFPictureData img = (XSLFPictureData) createRelationship(
                 XSLFPictureData.RELATIONS[format], XSLFFactory.getInstance(), imageNumber, true);
         _pictures.add(img);
index 85b426ef9245d54a47eb46d07f61f2e785718ff6..7993f11dda6063457c4dc78d77300048960aa237 100644 (file)
@@ -227,9 +227,13 @@ public class XSLFGroupShape extends XSLFShape {
     public XSLFPictureShape createPicture(int pictureIndex){\r
 \r
         List<PackagePart>  pics = _sheet.getPackagePart().getPackage()\r
-                .getPartsByName(Pattern.compile("/ppt/media/.*?"));\r
+                .getPartsByName(Pattern.compile("/ppt/media/image" + (pictureIndex + 1) + ".*?"));\r
 \r
-        PackagePart pic = pics.get(pictureIndex);\r
+        if(pics.size() == 0) {\r
+            throw new IllegalArgumentException("Picture with index=" + pictureIndex + " was not found");\r
+        }\r
+\r
+        PackagePart pic = pics.get(0);\r
 \r
         PackageRelationship rel = _sheet.getPackagePart().addRelationship(\r
                 pic.getPartName(), TargetMode.INTERNAL, XSLFRelation.IMAGES.getRelation());\r
index a5baed5312a84de821c738d3b8f50c81cfd8be7a..8a74e2d0f61fd9ed2c2589af63e4375ad749f642 100644 (file)
@@ -172,9 +172,13 @@ public abstract class XSLFSheet extends POIXMLDocumentPart implements Iterable<X
 
     public XSLFPictureShape createPicture(int pictureIndex){
         List<PackagePart>  pics = getPackagePart().getPackage()
-                .getPartsByName(Pattern.compile("/ppt/media/.*?"));
+                .getPartsByName(Pattern.compile("/ppt/media/image" + (pictureIndex + 1) + ".*?"));
 
-        PackagePart pic = pics.get(pictureIndex);
+        if(pics.size() == 0) {
+            throw new IllegalArgumentException("Picture with index=" + pictureIndex + " was not found");
+        }
+
+        PackagePart pic = pics.get(0);
 
         PackageRelationship rel = getPackagePart().addRelationship(
                 pic.getPartName(), TargetMode.INTERNAL, XSLFRelation.IMAGES.getRelation());
index a0a5c73fdaa41ace3ac540ba31524ffcd5976cac..dcca92fbf94078a2922cd8df471fb4e4601274a4 100644 (file)
@@ -841,18 +841,22 @@ public class XSLFTextParagraph implements Iterable<XSLFTextRun>{
                  layout = measurer.nextLayout((float)wrappingWidth, nextBreak, false);\r
             }\r
 \r
-            int endIndex = measurer.getPosition();\r
-\r
-            TextAlign hAlign = getTextAlign();\r
-            if(hAlign == TextAlign.JUSTIFY || hAlign == TextAlign.JUSTIFY_LOW) {\r
-                layout = layout.getJustifiedLayout((float)wrappingWidth);\r
+            if(layout == null) {\r
+                // exit if can't break any more\r
+                break;\r
             }\r
 \r
+            int endIndex = measurer.getPosition();\r
             // skip over new line breaks (we paint 'clear' text runs not starting or ending with \n)\r
             if(endIndex < it.getEndIndex() && text.charAt(endIndex) == '\n'){\r
                 measurer.setPosition(endIndex + 1);\r
             }\r
 \r
+            TextAlign hAlign = getTextAlign();\r
+            if(hAlign == TextAlign.JUSTIFY || hAlign == TextAlign.JUSTIFY_LOW) {\r
+                layout = layout.getJustifiedLayout((float)wrappingWidth);\r
+            }\r
+\r
             AttributedString str = new AttributedString(it, startIndex, endIndex);\r
             TextFragment line = new TextFragment(\r
                     layout, // we will not paint empty paragraphs\r