mirror of https://github.com/apache/poi.git
#60993 - HSLF: Grid and rowspan calculation in table cells is wrong
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1791500 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8fa92c2e6a
commit
19fe559090
|
@ -20,6 +20,10 @@
|
|||
package org.apache.poi.sl;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assume.assumeFalse;
|
||||
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
@ -30,6 +34,7 @@ import java.io.InputStream;
|
|||
|
||||
import org.apache.poi.POIDataSamples;
|
||||
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
|
||||
import org.apache.poi.sl.usermodel.Slide;
|
||||
import org.apache.poi.sl.usermodel.SlideShow;
|
||||
import org.apache.poi.sl.usermodel.SlideShowFactory;
|
||||
import org.apache.poi.sl.usermodel.TableCell;
|
||||
|
@ -66,7 +71,7 @@ public class TestTable {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testColWidthRowHeight() throws IOException {
|
||||
public void colWidthRowHeight() throws IOException {
|
||||
assumeFalse(xslfOnly);
|
||||
|
||||
// Test of table dimensions of same slideshow saved as ppt/x
|
||||
|
@ -110,7 +115,7 @@ public class TestTable {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testTextDirectionHSLF() throws IOException {
|
||||
public void textDirectionHSLF() throws IOException {
|
||||
assumeFalse(xslfOnly);
|
||||
SlideShow<?,?> ppt1 = new HSLFSlideShow();
|
||||
testTextDirection(ppt1);
|
||||
|
@ -118,7 +123,7 @@ public class TestTable {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testTextDirectionXSLF() throws IOException {
|
||||
public void textDirectionXSLF() throws IOException {
|
||||
SlideShow<?,?> ppt1 = new XMLSlideShow();
|
||||
testTextDirection(ppt1);
|
||||
ppt1.close();
|
||||
|
@ -160,4 +165,53 @@ public class TestTable {
|
|||
}
|
||||
ppt2.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tableSpan() throws IOException {
|
||||
String files[] = (xslfOnly) ? new String[]{ "bug60993.pptx" } : new String[]{ "bug60993.pptx", "bug60993.ppt" };
|
||||
for (String f : files) {
|
||||
SlideShow<?,?> ppt = openSampleSlideshow(f);
|
||||
Slide<?,?> slide = ppt.getSlides().get(0);
|
||||
TableShape<?,?> ts = (TableShape<?,?>)slide.getShapes().get(0);
|
||||
int cols = ts.getNumberOfColumns();
|
||||
int rows = ts.getNumberOfRows();
|
||||
for (int r=0; r<rows; r++) {
|
||||
for (int c=0; c<cols; c++) {
|
||||
TableCell<?,?> tc = ts.getCell(r, c);
|
||||
int rc = r*10+c;
|
||||
String msg = f+" (r"+r+",c"+c+")";
|
||||
switch (rc) {
|
||||
case 22:
|
||||
case 51:
|
||||
if (f.endsWith("ppt")) {
|
||||
assertNull(msg, tc);
|
||||
} else {
|
||||
assertNotNull(msg, tc);
|
||||
assertTrue(msg, tc.isMerged());
|
||||
}
|
||||
break;
|
||||
case 21:
|
||||
assertNotNull(msg, tc);
|
||||
assertEquals(msg, 1, tc.getRowSpan());
|
||||
assertEquals(msg, 2, tc.getGridSpan());
|
||||
assertFalse(msg, tc.isMerged());
|
||||
break;
|
||||
case 41:
|
||||
assertNotNull(msg, tc);
|
||||
assertEquals(msg, 2, tc.getRowSpan());
|
||||
assertEquals(msg, 1, tc.getGridSpan());
|
||||
assertFalse(msg, tc.isMerged());
|
||||
break;
|
||||
default:
|
||||
assertNotNull(msg, tc);
|
||||
assertEquals(msg, 1, tc.getRowSpan());
|
||||
assertEquals(msg, 1, tc.getGridSpan());
|
||||
assertFalse(msg, tc.isMerged());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
ppt.close();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -21,6 +21,7 @@ import java.awt.geom.Rectangle2D;
|
|||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
@ -218,15 +219,11 @@ implements HSLFShapeContainer, TableShape<HSLFShape,HSLFTextParagraph> {
|
|||
}
|
||||
|
||||
private int calcSpan(List<Double> spaces, double totalSpace, int idx) {
|
||||
if (idx == spaces.size()-1) {
|
||||
return 1;
|
||||
}
|
||||
int span = 0;
|
||||
double remainingSpace = totalSpace;
|
||||
while (idx+1 < spaces.size() && remainingSpace > 0) {
|
||||
remainingSpace -= spaces.get(idx+1)-spaces.get(idx);
|
||||
int span = 1;
|
||||
ListIterator<Double> li = spaces.listIterator(idx);
|
||||
double start = li.next();
|
||||
while (li.hasNext() && li.next()-start < totalSpace) {
|
||||
span++;
|
||||
idx++;
|
||||
}
|
||||
return span;
|
||||
}
|
||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue