mirror of
https://github.com/apache/poi.git
synced 2026-02-27 20:40:08 +08:00
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1791500 13f79535-47bb-0310-9956-ffa450edef68
217 lines
8.1 KiB
Java
217 lines
8.1 KiB
Java
/*
|
|
* ====================================================================
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* ====================================================================
|
|
*/
|
|
|
|
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;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.IOException;
|
|
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;
|
|
import org.apache.poi.sl.usermodel.TableShape;
|
|
import org.apache.poi.sl.usermodel.TextShape.TextDirection;
|
|
import org.apache.poi.xslf.usermodel.XMLSlideShow;
|
|
import org.junit.BeforeClass;
|
|
import org.junit.Test;
|
|
|
|
public class TestTable {
|
|
private static POIDataSamples _slTests = POIDataSamples.getSlideShowInstance();
|
|
private static boolean xslfOnly = false;
|
|
|
|
@BeforeClass
|
|
public static void checkHslf() {
|
|
try {
|
|
Class.forName("org.apache.poi.hslf.usermodel.HSLFSlideShow");
|
|
} catch (Exception e) {
|
|
xslfOnly = true;
|
|
}
|
|
}
|
|
|
|
|
|
/** a generic way to open a sample slideshow document **/
|
|
public static SlideShow<?,?> openSampleSlideshow(String sampleName) throws IOException {
|
|
InputStream is = _slTests.openResourceAsStream(sampleName);
|
|
try {
|
|
return SlideShowFactory.create(is);
|
|
} catch (Exception e) {
|
|
throw new RuntimeException(e);
|
|
} finally {
|
|
is.close();
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void colWidthRowHeight() throws IOException {
|
|
assumeFalse(xslfOnly);
|
|
|
|
// Test of table dimensions of same slideshow saved as ppt/x
|
|
// to check if both return similar (points) value
|
|
SlideShow<?,?> ppt = openSampleSlideshow("table_test.ppt");
|
|
TableShape<?,?> ts = (TableShape<?,?>)ppt.getSlides().get(0).getShapes().get(0);
|
|
|
|
SlideShow<?,?> pptx = openSampleSlideshow("table_test.pptx");
|
|
TableShape<?,?> tsx = (TableShape<?,?>)pptx.getSlides().get(0).getShapes().get(0);
|
|
|
|
// assume table shape should be equal to itself
|
|
confirmTableShapeEqual(ts, ts);
|
|
confirmTableShapeEqual(tsx, tsx);
|
|
|
|
// assert ppt and pptx versions of the same table have the same shape
|
|
confirmTableShapeEqual(ts, tsx);
|
|
|
|
pptx.close();
|
|
ppt.close();
|
|
}
|
|
|
|
private void confirmTableShapeEqual(TableShape<?,?> tableA, TableShape<?,?> tableB) {
|
|
int cols = tableA.getNumberOfColumns();
|
|
int rows = tableA.getNumberOfRows();
|
|
|
|
int colsx = tableB.getNumberOfColumns();
|
|
int rowsx = tableB.getNumberOfRows();
|
|
|
|
assertEquals("tables should have same number of columns", cols, colsx);
|
|
assertEquals("tables should have same number of rows", rows, rowsx);
|
|
|
|
for (int i=0; i<cols; i++) {
|
|
assertEquals("Width of column " + i + " should be equal",
|
|
tableA.getColumnWidth(i), tableB.getColumnWidth(i), 0.2);
|
|
}
|
|
|
|
for (int i=0; i<rows; i++) {
|
|
assertEquals("Height of row " + i + " should be equal",
|
|
tableA.getRowHeight(i), tableB.getRowHeight(i), 0.3);
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void textDirectionHSLF() throws IOException {
|
|
assumeFalse(xslfOnly);
|
|
SlideShow<?,?> ppt1 = new HSLFSlideShow();
|
|
testTextDirection(ppt1);
|
|
ppt1.close();
|
|
}
|
|
|
|
@Test
|
|
public void textDirectionXSLF() throws IOException {
|
|
SlideShow<?,?> ppt1 = new XMLSlideShow();
|
|
testTextDirection(ppt1);
|
|
ppt1.close();
|
|
}
|
|
|
|
private void testTextDirection(SlideShow<?,?> ppt1) throws IOException {
|
|
|
|
TextDirection tds[] = {
|
|
TextDirection.HORIZONTAL,
|
|
TextDirection.VERTICAL,
|
|
TextDirection.VERTICAL_270,
|
|
// TextDirection.STACKED is not supported on HSLF
|
|
};
|
|
|
|
TableShape<?,?> tbl1 = ppt1.createSlide().createTable(1, 3);
|
|
tbl1.setAnchor(new Rectangle2D.Double(50, 50, 200, 200));
|
|
|
|
int col = 0;
|
|
for (TextDirection td : tds) {
|
|
TableCell<?,?> c = tbl1.getCell(0, col++);
|
|
if (c != null) {
|
|
c.setTextDirection(td);
|
|
c.setText("bla");
|
|
}
|
|
}
|
|
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
ppt1.write(bos);
|
|
ppt1.close();
|
|
|
|
InputStream is = new ByteArrayInputStream(bos.toByteArray());
|
|
SlideShow<?,?> ppt2 = SlideShowFactory.create(is);
|
|
TableShape<?,?> tbl2 = (TableShape<?,?>)ppt2.getSlides().get(0).getShapes().get(0);
|
|
|
|
col = 0;
|
|
for (TextDirection td : tds) {
|
|
TableCell<?,?> c = tbl2.getCell(0, col++);
|
|
assertEquals(td, c.getTextDirection());
|
|
}
|
|
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();
|
|
}
|
|
}
|
|
} |