From ba9a2dc400a148c6b2ae32aa8cb11af30ef5572d Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Mon, 24 Dec 2007 09:51:14 +0000 Subject: [PATCH] fix bug #43781: slide->getShapes->getTextRun returns wrong text git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@606685 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/org/apache/poi/hslf/model/Sheet.java | 5 +-- .../org/apache/poi/hslf/model/TextBox.java | 16 +++++++-- .../org/apache/poi/hslf/model/TextRun.java | 15 ++++++++ .../org/apache/poi/hslf/data/43781.ppt | Bin 0 -> 39424 bytes .../apache/poi/hslf/usermodel/TestBugs.java | 32 ++++++++++++++++++ 5 files changed, 64 insertions(+), 4 deletions(-) create mode 100755 src/scratchpad/testcases/org/apache/poi/hslf/data/43781.ppt diff --git a/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java b/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java index b1761b2d9a..d8ddc7d2f2 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java +++ b/src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java @@ -153,7 +153,7 @@ public abstract class Sheet { */ protected static void findTextRuns(Record[] records, Vector found) { // Look for a TextHeaderAtom - for (int i = 0; i < (records.length - 1); i++) { + for (int i = 0, slwtIndex=0; i < (records.length - 1); i++) { if (records[i] instanceof TextHeaderAtom) { TextRun trun = null; TextHeaderAtom tha = (TextHeaderAtom) records[i]; @@ -179,7 +179,6 @@ public abstract class Sheet { // TextSpecInfoAtom - Safe to ignore } else { System.err.println("Found a TextHeaderAtom not followed by a TextBytesAtom or TextCharsAtom: Followed by " + records[i + 1].getRecordType()); - continue; } if (trun != null) { @@ -191,12 +190,14 @@ public abstract class Sheet { Record[] recs = new Record[lst.size()]; lst.toArray(recs); trun._records = recs; + trun.setIndex(slwtIndex); found.add(trun); i++; } else { // Not a valid one, so skip on to next and look again } + slwtIndex++; } } } diff --git a/src/scratchpad/src/org/apache/poi/hslf/model/TextBox.java b/src/scratchpad/src/org/apache/poi/hslf/model/TextBox.java index 2d5c866f77..1649b63bad 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/model/TextBox.java +++ b/src/scratchpad/src/org/apache/poi/hslf/model/TextBox.java @@ -196,7 +196,7 @@ public class TextBox extends SimpleShape { } catch (IOException e){ throw new HSLFException(e); } - if(getAnchor().equals(new java.awt.Rectangle())) resizeToFitText(); + if(getAnchor().equals(new java.awt.Rectangle()) && !"".equals(getText())) resizeToFitText(); } /** @@ -264,6 +264,14 @@ public class TextBox extends SimpleShape { EscherOptRecord opt = (EscherOptRecord)getEscherChild(_escherContainer, EscherOptRecord.RECORD_ID); setEscherProperty(opt, EscherProperties.TEXT__ANCHORTEXT, align); } + + public void setHorizontalAlignment(int align){ + _txtrun.getRichTextRuns()[0].setAlignment(align); + } + public int getHorizontalAlignment(){ + return _txtrun.getRichTextRuns()[0].getAlignment(); + } + /** * Returns the distance (in points) between the bottom of the text frame * and the bottom of the inscribed rectangle of the shape that contains the text. @@ -466,7 +474,11 @@ public class TextBox extends SimpleShape { TextRun[] runs = sheet.getTextRuns(); if (ota != null) { int idx = ota.getTextIndex(); - if(idx < runs.length) _txtrun = runs[idx]; + for (int i = 0; i < runs.length; i++) { + if(runs[i].getIndex() == idx){ + _txtrun = runs[i]; + } + } if(_txtrun == null) { logger.log(POILogger.WARN, "text run not found for OutlineTextRefAtom.TextIndex=" + idx); } diff --git a/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java b/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java index 4999df7581..ca6e02d69b 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java +++ b/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java @@ -50,6 +50,7 @@ public class TextRun private SlideShow slideShow; private Sheet sheet; private int shapeId; + private int slwtIndex; //position in the owning SlideListWithText /** * all text run records that follow TextHeaderAtom. * (there can be misc InteractiveInfo, TxInteractiveInfo and other records) @@ -537,6 +538,20 @@ public class TextRun shapeId = id; } + /** + * @return 0-based index of the text run in the SLWT container + */ + protected int getIndex(){ + return slwtIndex; + } + + /** + * @param id 0-based index of the text run in the SLWT container + */ + protected void setIndex(int id){ + slwtIndex = id; + } + /** * Returns the array of all hyperlinks in this text run * diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/data/43781.ppt b/src/scratchpad/testcases/org/apache/poi/hslf/data/43781.ppt new file mode 100755 index 0000000000000000000000000000000000000000..ddea91fe89e801f86f79907514f5b9e060d88840 GIT binary patch literal 39424 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 JNaw%P{XZN4W!C@z literal 0 HcmV?d00001 diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java index 933aa176b7..996a733ac9 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java @@ -25,6 +25,7 @@ import org.apache.poi.hslf.model.Shape; import java.io.*; import java.util.HashSet; import java.util.HashMap; +import java.util.ArrayList; import java.awt.*; /** @@ -298,4 +299,35 @@ public class TestBugs extends TestCase { } + /** + * Bug 38256: RuntimeException: Couldn't instantiate the class for type with id 0. + * ( also fixed followup: getTextRuns() returns no text ) + */ + public void test43781 () throws Exception { + FileInputStream is = new FileInputStream(new File(cwd, "43781.ppt")); + SlideShow ppt = new SlideShow(is); + is.close(); + + assertTrue("No Exceptions while reading file", true); + + Slide slide = ppt.getSlides()[0]; + TextRun[] tr1 = slide.getTextRuns(); + + ArrayList lst = new ArrayList(); + Shape[] shape = slide.getShapes(); + for (int i = 0; i < shape.length; i++) { + if( shape[i] instanceof TextBox){ + TextRun textRun = ((TextBox)shape[i]).getTextRun(); + if(textRun != null) lst.add(textRun); + } + + } + TextRun[] tr2 = new TextRun[lst.size()]; + lst.toArray(tr2); + + assertEquals(tr1.length, tr2.length); + for (int i = 0; i < tr1.length; i++) { + assertEquals(tr1[i].getText(), tr2[i].getText()); + } + } } -- 2.39.5