Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java Sun Aug 9 22:44:13 2015 @@ -19,19 +19,22 @@ package org.apache.poi.xslf.util; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.xslf.usermodel.XMLSlideShow; -import org.apache.poi.xslf.usermodel.XSLFSlide; - -import javax.imageio.ImageIO; - -import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; -import java.io.FileOutputStream; +import java.io.File; +import java.util.HashMap; import java.util.List; +import java.util.Map; + +import javax.imageio.ImageIO; + +import org.apache.poi.sl.SlideShowFactory; +import org.apache.poi.sl.draw.Drawable; +import org.apache.poi.sl.usermodel.Slide; +import org.apache.poi.sl.usermodel.SlideShow; +import org.apache.poi.util.JvmBugs; /** * An utulity to convert slides of a .pptx slide show to a PNG image @@ -40,22 +43,33 @@ import java.util.List; */ public class PPTX2PNG { - static void usage(){ - System.out.println("Usage: PPTX2PNG [options] <pptx file>"); - System.out.println("Options:"); - System.out.println(" -scale <float> scale factor"); - System.out.println(" -slide <integer> 1-based index of a slide to render"); + static void usage(String error){ + String msg = + "Usage: PPTX2PNG [options] <ppt or pptx file>\n" + + (error == null ? "" : ("Error: "+error+"\n")) + + "Options:\n" + + " -scale <float> scale factor\n" + + " -slide <integer> 1-based index of a slide to render\n" + + " -format <type> png,gif,jpg (,null for testing)" + + " -outdir <dir> output directory, defaults to origin of the ppt/pptx file" + + " -quite do not write to console (for normal processing)"; + + System.out.println(msg); + // no System.exit here, as we also run in junit tests! } public static void main(String[] args) throws Exception { if (args.length == 0) { - usage(); + usage(null); return; } int slidenum = -1; float scale = 1; - String file = null; + File file = null; + String format = "png"; + File outdir = null; + boolean quite = false; for (int i = 0; i < args.length; i++) { if (args[i].startsWith("-")) { @@ -63,55 +77,104 @@ public class PPTX2PNG { scale = Float.parseFloat(args[++i]); } else if ("-slide".equals(args[i])) { slidenum = Integer.parseInt(args[++i]); + } else if ("-format".equals(args[i])) { + format = args[++i]; + } else if ("-outdir".equals(args[i])) { + outdir = new File(args[++i]); + } else if ("-quite".equals(args[i])) { + quite = true; } } else { - file = args[i]; + file = new File(args[i]); } } - if(file == null){ - usage(); + if (file == null || !file.exists()) { + usage("File not specified or it doesn't exist"); + return; + } + + if (outdir == null) { + outdir = file.getParentFile(); + } + + if (outdir == null || !outdir.exists() || !outdir.isDirectory()) { + usage("Output directory doesn't exist"); return; } - System.out.println("Processing " + file); - XMLSlideShow ppt = new XMLSlideShow(OPCPackage.open(file)); + if (scale < 0) { + usage("Invalid scale given"); + return; + } + + if (format == null || !format.matches("^(png|gif|jpg|null)$")) { + usage("Invalid format given"); + return; + } + + if (!quite) { + System.out.println("Processing " + file); + } + SlideShow ss = SlideShowFactory.create(file, null, true); + List<? extends Slide<?,?,?>> slides = ss.getSlides(); - Dimension pgsize = ppt.getPageSize(); + + if (slidenum < -1 || slidenum == 0 || slidenum > slides.size()) { + usage("slidenum must be either -1 (for all) or within range: [1.."+slides.size()+"] for "+file); + return; + } + + Dimension pgsize = ss.getPageSize(); int width = (int) (pgsize.width * scale); int height = (int) (pgsize.height * scale); - List<XSLFSlide> slide = ppt.getSlides(); - for (int i = 0; i < slide.size(); i++) { - if (slidenum != -1 && slidenum != (i + 1)) continue; - - String title = slide.get(i).getTitle(); - System.out.println("Rendering slide " + (i + 1) + (title == null ? "" : ": " + title)); - - BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); - Graphics2D graphics = img.createGraphics(); - - // default rendering options - graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); - graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); - graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); - - graphics.setColor(Color.white); - graphics.clearRect(0, 0, width, height); - - graphics.scale(scale, scale); - - // draw stuff - slide.get(i).draw(graphics); - - // save the result - int sep = file.lastIndexOf("."); - String fname = file.substring(0, sep == -1 ? file.length() : sep) + "-" + (i + 1) +".png"; - FileOutputStream out = new FileOutputStream(fname); - ImageIO.write(img, "png", out); - out.close(); + int slideNo=1; + for(Slide<?,?,?> slide : slides) { + if (slidenum == -1 || slideNo == slidenum) { + String title = slide.getTitle(); + if (!quite) { + System.out.println("Rendering slide " + slideNo + (title == null ? "" : ": " + title)); + } + + BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D graphics = img.createGraphics(); + fixFonts(graphics); + + // default rendering options + graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); + + graphics.scale(scale, scale); + + // draw stuff + slide.draw(graphics); + + // save the result + if (!"null".equals(format)) { + String outname = file.getName().replaceFirst(".pptx?", ""); + outname = String.format("%1$s-%2$04d.%3$s", outname, slideNo, format); + File outfile = new File(outdir, outname); + ImageIO.write(img, format, outfile); + } + } + slideNo++; } - System.out.println("Done"); + + if (!quite) { + System.out.println("Done"); + } + } + + @SuppressWarnings("unchecked") + private static void fixFonts(Graphics2D graphics) { + if (!JvmBugs.hasLineBreakMeasurerBug()) return; + Map<String,String> fontMap = (Map<String,String>)graphics.getRenderingHint(Drawable.FONT_MAP); + if (fontMap == null) fontMap = new HashMap<String,String>(); + fontMap.put("Calibri", "Lucida Sans"); + fontMap.put("Cambria", "Lucida Bright"); + graphics.setRenderingHint(Drawable.FONT_MAP, fontMap); } }
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java Sun Aug 9 22:44:13 2015 @@ -19,16 +19,11 @@ package org.apache.poi.xslf.usermodel; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; +import java.io.File; import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; -import org.apache.poi.sl.draw.Drawable; -import org.apache.poi.util.JvmBugs; -import org.apache.poi.xslf.XSLFTestDataSamples; +import org.apache.poi.POIDataSamples; +import org.apache.poi.xslf.util.PPTX2PNG; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -44,7 +39,6 @@ public class TestPPTX2PNG { @BeforeClass public static void activateJaxpDebug() { jaxpDebugEnable = setDebugFld(true); -// setXmlInputFactory(); } @AfterClass @@ -66,48 +60,26 @@ public class TestPPTX2PNG { return false; } } - -// private static void setXmlInputFactory() { -// String propName = "javax.xml.stream.XMLInputFactory"; -// String propVal = "com.sun.xml.internal.stream.XMLInputFactoryImpl"; -// try { -// Class.forName(propVal); -// System.setProperty(propName, propVal); -// } catch (Exception e){ -// // ignore -// } -// } - @Test public void render() throws Exception { - String[] testFiles = {"backgrounds.pptx","layouts.pptx", "sample.pptx", "shapes.pptx", "themes.pptx",}; + POIDataSamples samples = POIDataSamples.getSlideShowInstance(); + + String[] testFiles = {"alterman_security.ppt","alterman_security.pptx","KEY02.pptx","themes.pptx","backgrounds.pptx","layouts.pptx", "sample.pptx", "shapes.pptx",}; + String[] args = { + "-format", "null", // png,gif,jpg or null for test + "-slide", "-1", // -1 for all + "-outdir", new File("build/tmp/").getCanonicalPath(), + "-quite", + "dummyfile" + }; for(String sampleFile : testFiles){ + args[args.length-1] = samples.getFile(sampleFile).getCanonicalPath(); try { - XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument(sampleFile); - Dimension pg = pptx.getPageSize(); - //int slideNo=1; - for(XSLFSlide slide : pptx.getSlides()){ - BufferedImage img = new BufferedImage(pg.width, pg.height, BufferedImage.TYPE_INT_ARGB); - Graphics2D graphics = img.createGraphics(); - fixFonts(graphics); - slide.draw(graphics); - // ImageIO.write(img, "PNG", new File("build/tmp/"+sampleFile.replaceFirst(".pptx?", "-")+slideNo+".png")); - //slideNo++; - } + PPTX2PNG.main(args); } catch (IllegalStateException e) { throw new IllegalStateException("While reading file " + sampleFile, e); } } } - - @SuppressWarnings("unchecked") - private void fixFonts(Graphics2D graphics) { - if (!JvmBugs.hasLineBreakMeasurerBug()) return; - Map<String,String> fontMap = (Map<String,String>)graphics.getRenderingHint(Drawable.FONT_MAP); - if (fontMap == null) fontMap = new HashMap<String,String>(); - fontMap.put("Calibri", "Lucida Sans"); - fontMap.put("Cambria", "Lucida Bright"); - graphics.setRenderingHint(Drawable.FONT_MAP, fontMap); - } } Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSimpleShape.java Sun Aug 9 22:44:13 2015 @@ -16,7 +16,12 @@ ==================================================================== */ package org.apache.poi.xslf.usermodel; -import static org.junit.Assert.*; +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.Assert.fail; import java.awt.Color; import java.io.IOException; Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java Sun Aug 9 22:44:13 2015 @@ -16,9 +16,15 @@ ==================================================================== */ package org.apache.poi.xslf.usermodel; -import static org.junit.Assert.*; +import static org.apache.poi.sl.TestCommonSL.sameColor; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import java.awt.Color; +import java.io.IOException; import java.util.List; import org.apache.poi.xslf.XSLFTestDataSamples; @@ -98,7 +104,7 @@ public class TestXSLFSlide { } @Test - public void testCreateSlide(){ + public void testCreateSlide() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); assertEquals(0, ppt.getSlides().size()); @@ -108,10 +114,12 @@ public class TestXSLFSlide { assertFalse(slide.getFollowMasterGraphics()); slide.setFollowMasterGraphics(true); assertTrue(slide.getFollowMasterGraphics()); + + ppt.close(); } @Test - public void testImportContent(){ + public void testImportContent() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); XMLSlideShow src = XSLFTestDataSamples.openSampleDocument("themes.pptx"); @@ -128,7 +136,7 @@ public class TestXSLFSlide { assertEquals(40.0, r1.getFontSize(), 0); assertTrue(r1.isBold()); assertTrue(r1.isItalic()); - assertEquals(new Color(148, 198, 0), r1.getFontColor()); + assertTrue(sameColor(new Color(148, 198, 0), r1.getFontColor())); assertNull(sh1.getFillColor()); assertNull(sh1.getLineColor()); @@ -141,7 +149,7 @@ public class TestXSLFSlide { assertEquals(18.0, r2.getFontSize(), 0); assertFalse(r2.isBold()); assertFalse(r2.isItalic()); - assertEquals(Color.white, r2.getFontColor()); + assertTrue(sameColor(Color.white, r2.getFontColor())); assertEquals(new Color(148, 198, 0), sh2.getFillColor()); assertEquals(new Color(148, 198, 0), sh2.getLineColor()); // slightly different from PowerPoint! @@ -157,17 +165,19 @@ public class TestXSLFSlide { //assertEquals(32.4.0, r3.getFontSize()); assertTrue(r3.isBold()); assertTrue(r3.isItalic()); - assertEquals(new Color(148, 198, 0), r3.getFontColor()); + assertTrue(sameColor(new Color(148, 198, 0), r3.getFontColor())); assertNull(sh3.getFillColor()); assertNull(sh3.getLineColor()); XSLFPictureShape sh4 = (XSLFPictureShape)shapes2.get(1); XSLFPictureShape srcPic = (XSLFPictureShape)src.getSlides().get(4).getShapes().get(1); assertArrayEquals(sh4.getPictureData().getData(), srcPic.getPictureData().getData()); + + ppt.close(); } @Test - public void testMergeSlides(){ + public void testMergeSlides() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); String[] pptx = {"shapes.pptx", "themes.pptx", "layouts.pptx", "backgrounds.pptx"}; @@ -179,5 +189,7 @@ public class TestXSLFSlide { } } assertEquals(30, ppt.getSlides().size()); + + ppt.close(); } } \ No newline at end of file Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextParagraph.java Sun Aug 9 22:44:13 2015 @@ -16,19 +16,24 @@ ==================================================================== */ package org.apache.poi.xslf.usermodel; -import static org.junit.Assert.*; - -import java.awt.*; +import static org.apache.poi.sl.TestCommonSL.sameColor; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Rectangle; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; +import java.io.IOException; import java.util.List; import org.apache.poi.sl.draw.DrawTextFragment; import org.apache.poi.sl.draw.DrawTextParagraph; import org.apache.poi.sl.usermodel.AutoNumberingScheme; import org.apache.poi.sl.usermodel.TextParagraph.TextAlign; -import org.apache.poi.util.POILogFactory; -import org.apache.poi.util.POILogger; import org.apache.poi.xslf.XSLFTestDataSamples; import org.junit.Assume; import org.junit.Test; @@ -37,7 +42,7 @@ import org.junit.Test; * @author Yegor Kozlov */ public class TestXSLFTextParagraph { - private static POILogger _logger = POILogFactory.getLogger(XSLFTextParagraph.class); + // private static POILogger _logger = POILogFactory.getLogger(XSLFTextParagraph.class); static class DrawTextParagraphProxy extends DrawTextParagraph<XSLFTextRun> { DrawTextParagraphProxy(XSLFTextParagraph p) { @@ -58,7 +63,7 @@ public class TestXSLFTextParagraph { } @Test - public void testWrappingWidth() throws Exception { + public void testWrappingWidth() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); XSLFSlide slide = ppt.createSlide(); XSLFTextShape sh = slide.createAutoShape(); @@ -142,6 +147,8 @@ public class TestXSLFTextParagraph { expectedWidth = anchor.getWidth() - leftInset - rightInset - leftMargin; assertEquals(244.0, expectedWidth, 0); // 300 - 10 - 10 - 36 assertEquals(expectedWidth, dtp.getWrappingWidth(false, null), 0); + + ppt.close(); } /** @@ -149,7 +156,7 @@ public class TestXSLFTextParagraph { * This test requires that the Arial font is available and will run only on windows */ @Test - public void testBreakLines(){ + public void testBreakLines() throws IOException { String os = System.getProperty("os.name"); Assume.assumeTrue("Skipping testBreakLines(), it is executed only on Windows machines", (os != null && os.contains("Windows"))); @@ -237,10 +244,11 @@ public class TestXSLFTextParagraph { // the first line is at least two times higher than the second assertTrue(lines.get(0).getHeight() > lines.get(1).getHeight()*2); + ppt.close(); } @Test - public void testThemeInheritance(){ + public void testThemeInheritance() throws IOException { XMLSlideShow ppt = XSLFTestDataSamples.openSampleDocument("prProps.pptx"); List<XSLFShape> shapes = ppt.getSlides().get(0).getShapes(); XSLFTextShape sh1 = (XSLFTextShape)shapes.get(0); @@ -252,10 +260,11 @@ public class TestXSLFTextParagraph { XSLFTextShape sh3 = (XSLFTextShape)shapes.get(2); assertEquals("Foundation", sh3.getText()); assertEquals(TextAlign.CENTER, sh3.getTextParagraphs().get(0).getTextAlign()); + ppt.close(); } @Test - public void testParagraphProperties(){ + public void testParagraphProperties() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); XSLFSlide slide = ppt.createSlide(); XSLFTextShape sh = slide.createAutoShape(); @@ -275,7 +284,7 @@ public class TestXSLFTextParagraph { assertEquals(null, p.getBulletFontColor()); p.setBulletFontColor(Color.red); - assertEquals(Color.red, p.getBulletFontColor()); + assertTrue(sameColor(Color.red, p.getBulletFontColor())); assertNull(p.getBulletFontSize()); p.setBulletFontSize(200.); @@ -342,34 +351,35 @@ public class TestXSLFTextParagraph { assertEquals(72.0, p.getDefaultTabSize(), 0); + ppt.close(); } - @Test - public void testLineBreak(){ + @Test(expected = IllegalStateException.class) + public void testLineBreak() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); - XSLFSlide slide = ppt.createSlide(); - XSLFTextShape sh = slide.createAutoShape(); - - XSLFTextParagraph p = sh.addNewTextParagraph(); - XSLFTextRun r1 = p.addNewTextRun(); - r1.setText("Hello,"); - XSLFTextRun r2 = p.addLineBreak(); - assertEquals("\n", r2.getRawText()); - r2.setFontSize(10.0); - assertEquals(10.0, r2.getFontSize(), 0); - XSLFTextRun r3 = p.addNewTextRun(); - r3.setText("World!"); - r3.setFontSize(20.0); - XSLFTextRun r4 = p.addLineBreak(); - assertEquals(20.0, r4.getFontSize(), 0); - - assertEquals("Hello,\nWorld!\n",sh.getText()); - try { + XSLFSlide slide = ppt.createSlide(); + XSLFTextShape sh = slide.createAutoShape(); + + XSLFTextParagraph p = sh.addNewTextParagraph(); + XSLFTextRun r1 = p.addNewTextRun(); + r1.setText("Hello,"); + XSLFTextRun r2 = p.addLineBreak(); + assertEquals("\n", r2.getRawText()); + r2.setFontSize(10.0); + assertEquals(10.0, r2.getFontSize(), 0); + XSLFTextRun r3 = p.addNewTextRun(); + r3.setText("World!"); + r3.setFontSize(20.0); + XSLFTextRun r4 = p.addLineBreak(); + assertEquals(20.0, r4.getFontSize(), 0); + + assertEquals("Hello,\nWorld!\n",sh.getText()); + + // "You cannot change text of a line break, it is always '\\n'" r2.setText("aaa"); - fail("Expected IllegalStateException"); - } catch (IllegalStateException e){ - assertEquals("You cannot change text of a line break, it is always '\\n'", e.getMessage()); + } finally { + ppt.close(); } } } Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextRun.java Sun Aug 9 22:44:13 2015 @@ -18,16 +18,23 @@ */ package org.apache.poi.xslf.usermodel; -import junit.framework.TestCase; +import static org.apache.poi.sl.TestCommonSL.sameColor; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; -import java.awt.*; +import java.awt.Color; +import java.io.IOException; + +import org.junit.Test; /** * @author Yegor Kozlov */ -public class TestXSLFTextRun extends TestCase { +public class TestXSLFTextRun { - public void testRunProperties(){ + @Test + public void testRunProperties() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); XSLFSlide slide = ppt.createSlide(); XSLFTextShape sh = slide.createAutoShape(); @@ -35,26 +42,26 @@ public class TestXSLFTextRun extends Tes XSLFTextRun r = sh.addNewTextParagraph().addNewTextRun(); assertEquals("en-US", r.getRPr().getLang()); - assertEquals(0., r.getCharacterSpacing()); + assertEquals(0., r.getCharacterSpacing(), 0); r.setCharacterSpacing(3); - assertEquals(3., r.getCharacterSpacing()); + assertEquals(3., r.getCharacterSpacing(), 0); r.setCharacterSpacing(-3); - assertEquals(-3., r.getCharacterSpacing()); + assertEquals(-3., r.getCharacterSpacing(), 0); r.setCharacterSpacing(0); - assertEquals(0., r.getCharacterSpacing()); + assertEquals(0., r.getCharacterSpacing(), 0); assertFalse(r.getRPr().isSetSpc()); - assertEquals(Color.black, r.getFontColor()); + assertTrue(sameColor(Color.black, r.getFontColor())); r.setFontColor(Color.red); - assertEquals(Color.red, r.getFontColor()); + assertTrue(sameColor(Color.red, r.getFontColor())); assertEquals("Calibri", r.getFontFamily()); r.setFontFamily("Arial"); assertEquals("Arial", r.getFontFamily()); - assertEquals(18.0, r.getFontSize()); + assertEquals(18.0, r.getFontSize(), 0); r.setFontSize(13.0); - assertEquals(13.0, r.getFontSize()); + assertEquals(13.0, r.getFontSize(), 0); assertEquals(false, r.isSuperscript()); r.setSuperscript(true); @@ -67,5 +74,7 @@ public class TestXSLFTextRun extends Tes assertEquals(true, r.isSubscript()); r.setSubscript(false); assertEquals(false, r.isSubscript()); + + ppt.close(); } } Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java Sun Aug 9 22:44:13 2015 @@ -16,16 +16,26 @@ ==================================================================== */ package org.apache.poi.xslf.usermodel; -import static org.junit.Assert.*; +import static org.apache.poi.sl.TestCommonSL.sameColor; +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.assertSame; +import static org.junit.Assert.assertTrue; import java.awt.Color; +import java.io.IOException; import java.util.List; import org.apache.poi.sl.usermodel.TextParagraph.TextAlign; import org.apache.poi.sl.usermodel.VerticalAlignment; import org.apache.poi.xslf.XSLFTestDataSamples; import org.junit.Test; -import org.openxmlformats.schemas.drawingml.x2006.main.*; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBodyProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.STTextAlignType; import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; @@ -82,7 +92,7 @@ public class TestXSLFTextShape { XSLFTextRun r1 = shape1.getTextParagraphs().get(0).getTextRuns().get(0); assertEquals("Calibri", r1.getFontFamily()); assertEquals(44.0, r1.getFontSize(), 0); - assertEquals(Color.black, r1.getFontColor()); + assertTrue(sameColor(Color.black, r1.getFontColor())); XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1); CTPlaceholder ph2 = shape2.getCTPlaceholder(); @@ -151,7 +161,7 @@ public class TestXSLFTextShape { XSLFTextRun r1 = shape1.getTextParagraphs().get(0).getTextRuns().get(0); assertEquals("Calibri", r1.getFontFamily()); assertEquals(44.0, r1.getFontSize(), 0); - assertEquals(Color.black, r1.getFontColor()); + assertTrue(sameColor(Color.black, r1.getFontColor())); XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1); CTPlaceholder ph2 = shape2.getCTPlaceholder(); @@ -262,7 +272,7 @@ public class TestXSLFTextShape { assertEquals(TextAlign.LEFT, r1.getParentParagraph().getTextAlign()); assertEquals("Calibri", r1.getFontFamily()); assertEquals(40.0, r1.getFontSize(), 0); - assertEquals(Color.black, r1.getFontColor()); + assertTrue(sameColor(Color.black, r1.getFontColor())); assertTrue(r1.isBold()); assertFalse(r1.isItalic()); assertFalse(r1.isUnderlined()); @@ -336,7 +346,7 @@ public class TestXSLFTextShape { assertEquals(TextAlign.CENTER, r1.getParentParagraph().getTextAlign()); assertEquals("Calibri", r1.getFontFamily()); assertEquals(44.0, r1.getFontSize(), 0); - assertEquals(Color.black, r1.getFontColor()); + assertTrue(sameColor(Color.black, r1.getFontColor())); XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1); CTPlaceholder ph2 = shape2.getCTPlaceholder(); @@ -404,7 +414,7 @@ public class TestXSLFTextShape { assertEquals(0, pr5.getParentParagraph().getIndentLevel()); assertEquals("Right", pr5.getRawText()); assertEquals("Calibri", pr5.getFontFamily()); - assertEquals(Color.black, pr5.getFontColor()); + assertTrue(sameColor(Color.black, pr5.getFontColor())); } @SuppressWarnings("unused") @@ -444,7 +454,7 @@ public class TestXSLFTextShape { assertEquals(TextAlign.CENTER, r1.getParentParagraph().getTextAlign()); assertEquals("Calibri", r1.getFontFamily()); assertEquals(44.0, r1.getFontSize(), 0); - assertEquals(Color.black, r1.getFontColor()); + assertTrue(sameColor(Color.black, r1.getFontColor())); assertFalse(r1.isBold()); XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1); @@ -517,7 +527,7 @@ public class TestXSLFTextShape { assertEquals(TextAlign.LEFT, r1.getParentParagraph().getTextAlign()); assertEquals("Calibri", r1.getFontFamily()); assertEquals(20.0, r1.getFontSize(), 0); - assertEquals(Color.black, r1.getFontColor()); + assertTrue(sameColor(Color.black, r1.getFontColor())); assertTrue(r1.isBold()); XSLFTextShape shape2 = (XSLFTextShape)shapes.get(1); @@ -605,7 +615,7 @@ public class TestXSLFTextShape { assertEquals("Calibri", r1.getFontFamily()); assertEquals(12.0, r1.getFontSize(), 0); // TODO calculation of tint is incorrect - assertEquals(new Color(64,64,64), r1.getFontColor()); + assertTrue(sameColor(new Color(64,64,64), r1.getFontColor())); XSLFTextShape dt = (XSLFTextShape)slide.getPlaceholderByType(STPlaceholderType.INT_DT); assertEquals("Friday, October 21, 2011", dt.getText()); @@ -615,7 +625,7 @@ public class TestXSLFTextShape { } @Test - public void testTitleStyles(){ + public void testTitleStyles() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); XSLFSlideMaster master = ppt.getSlideMasters().get(0); @@ -693,10 +703,12 @@ public class TestXSLFTextShape { assertEquals("Calibri", textRun.getFontFamily()); lv5PPr.setAlgn(STTextAlignType.CTR); assertEquals(TextAlign.CENTER, paragraph.getTextAlign()); + + ppt.close(); } @Test - public void testBodyStyles(){ + public void testBodyStyles() throws IOException { XMLSlideShow ppt = new XMLSlideShow(); XSLFSlideMaster master = ppt.getSlideMasters().get(0); @@ -895,7 +907,7 @@ public class TestXSLFTextShape { assertEquals("Calibri", r3.getFontFamily()); lv3PPr.setAlgn(STTextAlignType.CTR); assertEquals(TextAlign.CENTER, p3.getTextAlign()); - + + ppt.close(); } - } \ No newline at end of file Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java Sun Aug 9 22:44:13 2015 @@ -16,6 +16,7 @@ ==================================================================== */ package org.apache.poi.xslf.usermodel; +import static org.apache.poi.sl.TestCommonSL.sameColor; import static org.junit.Assert.*; import java.awt.Color; @@ -66,7 +67,7 @@ public class TestXSLFTheme { XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Rectangle 3"); XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0); - assertEquals(Color.white, run1.getFontColor()); + assertTrue(sameColor(Color.white, run1.getFontColor())); assertEquals(new Color(79, 129, 189), sh1.getFillColor()); assertTrue(sh1.getFillStyle().getPaint() instanceof SolidPaint) ; // solid fill @@ -89,13 +90,13 @@ public class TestXSLFTheme { XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Rectangle 4"); XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0); - assertEquals(Color.white, run1.getFontColor()); + assertTrue(sameColor(Color.white, run1.getFontColor())); assertEquals(new Color(148, 198, 0), sh1.getFillColor()); assertTrue(sh1.getFillStyle().getPaint() instanceof SolidPaint) ; // solid fill XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Title 3"); XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0); - assertEquals(new Color(148, 198, 0), run2.getFontColor()); + assertTrue(sameColor(new Color(148, 198, 0), run2.getFontColor())); assertNull(sh2.getFillColor()); // no fill assertTrue(slide.getSlideLayout().getFollowMasterGraphics()); @@ -107,7 +108,7 @@ public class TestXSLFTheme { XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Title 1"); XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0); - assertEquals(new Color(148, 198, 0), run2.getFontColor()); + assertTrue(sameColor(new Color(148, 198, 0), run2.getFontColor())); assertNull(sh2.getFillColor()); // no fill // font size is 40pt and scale factor is 90% assertEquals(36.0, run2.getFontSize(), 0); @@ -119,12 +120,12 @@ public class TestXSLFTheme { XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Subtitle 3"); XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0); - assertEquals(new Color(66, 66, 66), run1.getFontColor()); + assertTrue(sameColor(new Color(66, 66, 66), run1.getFontColor())); assertNull(sh1.getFillColor()); // no fill XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Title 2"); XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0); - assertEquals(new Color(148, 198, 0), run2.getFontColor()); + assertTrue(sameColor(new Color(148, 198, 0), run2.getFontColor())); assertNull(sh2.getFillColor()); // no fill assertFalse(slide.getSlideLayout().getFollowMasterGraphics()); @@ -154,12 +155,12 @@ public class TestXSLFTheme { XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Title 3"); XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0); - assertEquals(Color.white, run1.getFontColor()); + assertTrue(sameColor(Color.white, run1.getFontColor())); assertNull(sh1.getFillColor()); // no fill XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Subtitle 4"); XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0); - assertEquals(Color.white, run2.getFontColor()); + assertTrue(sameColor(Color.white, run2.getFontColor())); assertNull(sh2.getFillColor()); // no fill } } Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Line.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Line.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Line.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/Line.java Sun Aug 9 22:44:13 2015 @@ -17,8 +17,14 @@ package org.apache.poi.hslf.model; -import org.apache.poi.ddf.*; -import org.apache.poi.hslf.usermodel.*; +import org.apache.poi.ddf.EscherContainerRecord; +import org.apache.poi.ddf.EscherOptRecord; +import org.apache.poi.ddf.EscherProperties; +import org.apache.poi.ddf.EscherSpRecord; +import org.apache.poi.hslf.usermodel.HSLFGroupShape; +import org.apache.poi.hslf.usermodel.HSLFShape; +import org.apache.poi.hslf.usermodel.HSLFTextParagraph; +import org.apache.poi.hslf.usermodel.HSLFTextShape; import org.apache.poi.sl.usermodel.ShapeContainer; import org.apache.poi.sl.usermodel.ShapeType; @@ -27,7 +33,7 @@ import org.apache.poi.sl.usermodel.Shape * * @author Yegor Kozlov */ -public final class Line extends HSLFSimpleShape { +public final class Line extends HSLFTextShape implements org.apache.poi.sl.usermodel.Line<HSLFTextParagraph> { public Line(EscherContainerRecord escherRecord, ShapeContainer<HSLFShape> parent){ super(escherRecord, parent); } @@ -64,23 +70,23 @@ public final class Line extends HSLFSimp return _escherContainer; } - /** - * Sets the orientation of the line, if inverse is false, then line goes - * from top-left to bottom-right, otherwise use inverse equals true - * - * @param inverse the orientation of the line - */ - public void setInverse(boolean inverse) { - setShapeType(inverse ? ShapeType.LINE_INV : ShapeType.LINE); - } - - /** - * Gets the orientation of the line, if inverse is false, then line goes - * from top-left to bottom-right, otherwise inverse equals true - * - * @return inverse the orientation of the line - */ - public boolean isInverse() { - return (getShapeType() == ShapeType.LINE_INV); - } +// /** +// * Sets the orientation of the line, if inverse is false, then line goes +// * from top-left to bottom-right, otherwise use inverse equals true +// * +// * @param inverse the orientation of the line +// */ +// public void setInverse(boolean inverse) { +// setShapeType(inverse ? ShapeType.LINE_INV : ShapeType.LINE); +// } +// +// /** +// * Gets the orientation of the line, if inverse is false, then line goes +// * from top-left to bottom-right, otherwise inverse equals true +// * +// * @return inverse the orientation of the line +// */ +// public boolean isInverse() { +// return (getShapeType() == ShapeType.LINE_INV); +// } } Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/PPGraphics2D.java Sun Aug 9 22:44:13 2015 @@ -18,19 +18,49 @@ package org.apache.poi.hslf.model; -import java.awt.*; -import java.awt.font.*; -import java.awt.geom.*; -import java.awt.image.*; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; +import java.awt.Image; +import java.awt.Paint; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.Shape; +import java.awt.Stroke; +import java.awt.Toolkit; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.awt.font.TextLayout; +import java.awt.geom.AffineTransform; +import java.awt.geom.Arc2D; +import java.awt.geom.Ellipse2D; +import java.awt.geom.GeneralPath; +import java.awt.geom.Line2D; +import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; +import java.awt.image.BufferedImage; +import java.awt.image.BufferedImageOp; +import java.awt.image.ImageObserver; +import java.awt.image.RenderedImage; import java.awt.image.renderable.RenderableImage; import java.text.AttributedCharacterIterator; import java.util.Map; import org.apache.poi.hslf.exceptions.HSLFException; -import org.apache.poi.hslf.usermodel.*; +import org.apache.poi.hslf.usermodel.HSLFFreeformShape; +import org.apache.poi.hslf.usermodel.HSLFGroupShape; +import org.apache.poi.hslf.usermodel.HSLFSimpleShape; +import org.apache.poi.hslf.usermodel.HSLFTextBox; +import org.apache.poi.hslf.usermodel.HSLFTextRun; +import org.apache.poi.sl.draw.DrawPaint; import org.apache.poi.sl.usermodel.StrokeStyle; import org.apache.poi.sl.usermodel.VerticalAlignment; -import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; @@ -259,7 +289,7 @@ public final class PPGraphics2D extends rt.setFontSize((double)_font.getSize()); rt.setFontFamily(_font.getFamily()); - if (getColor() != null) rt.setFontColor(getColor()); + if (getColor() != null) rt.setFontColor(DrawPaint.createSolidPaint(getColor())); if (_font.isBold()) rt.setBold(true); if (_font.isItalic()) rt.setItalic(true); Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFill.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFill.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFill.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFill.java Sun Aug 9 22:44:13 2015 @@ -22,10 +22,16 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.List; -import org.apache.poi.ddf.*; +import org.apache.poi.ddf.EscherBSERecord; +import org.apache.poi.ddf.EscherContainerRecord; +import org.apache.poi.ddf.EscherOptRecord; +import org.apache.poi.ddf.EscherProperties; +import org.apache.poi.ddf.EscherRecord; +import org.apache.poi.ddf.EscherSimpleProperty; import org.apache.poi.hslf.record.Document; -import org.apache.poi.sl.usermodel.*; -import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint; +import org.apache.poi.sl.draw.DrawPaint; +import org.apache.poi.sl.usermodel.FillStyle; +import org.apache.poi.sl.usermodel.PaintStyle; import org.apache.poi.sl.usermodel.PaintStyle.TexturePaint; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; @@ -113,20 +119,8 @@ public final class HSLFFill { return new FillStyle() { public PaintStyle getPaint() { switch (getFillType()) { - case FILL_SOLID: { - return new SolidPaint() { - public ColorStyle getSolidColor() { - return new ColorStyle() { - public Color getColor() { return getForegroundColor(); } - public int getAlpha() { return -1; } - public int getLumOff() { return -1; } - public int getLumMod() { return -1; } - public int getShade() { return -1; } - public int getTint() { return -1; } - }; - } - }; - } + case FILL_SOLID: + return DrawPaint.createSolidPaint(getForegroundColor()); case FILL_PICTURE: { final HSLFPictureData pd = getPictureData(); if (pd == null) break; @@ -149,7 +143,7 @@ public final class HSLFFill { logger.log(POILogger.WARN, "unsuported fill type: " + getFillType()); break; } - return PaintStyle.TRANSPARENT_PAINT; + return null; } }; } Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java Sun Aug 9 22:44:13 2015 @@ -188,16 +188,14 @@ public final class HSLFSlide extends HSL // Complex Accesser methods follow /** - * Return title of this slide or <code>null</code> if the slide does not have title. * <p> * The title is a run of text of type <code>TextHeaderAtom.CENTER_TITLE_TYPE</code> or * <code>TextHeaderAtom.TITLE_TYPE</code> * </p> * * @see TextHeaderAtom - * - * @return title of this slide */ + @Override public String getTitle(){ for (List<HSLFTextParagraph> tp : getTextParagraphs()) { if (tp.isEmpty()) continue; Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java Sun Aug 9 22:44:13 2015 @@ -132,6 +132,20 @@ public final class HSLFSlideShow impleme this(new HSLFSlideShowImpl(inputStream)); } + /** + * Constructs a Powerpoint document from an POIFSFileSystem. + */ + public HSLFSlideShow(POIFSFileSystem inputStream) throws IOException { + this(new HSLFSlideShowImpl(inputStream)); + } + + /** + * Constructs a Powerpoint document from an DirectoryNode. + */ + public HSLFSlideShow(DirectoryNode root) throws IOException { + this(new HSLFSlideShowImpl(root)); + } + /** * Use the PersistPtrHolder entries to figure out what is the "most recent" * version of all the core records (Document, Notes, Slide etc), and save a Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java Sun Aug 9 22:44:13 2015 @@ -27,7 +27,10 @@ import org.apache.poi.hslf.model.PPFont; import org.apache.poi.hslf.model.textproperties.*; import org.apache.poi.hslf.model.textproperties.TextPropCollection.TextPropType; import org.apache.poi.hslf.record.*; +import org.apache.poi.sl.draw.DrawPaint; import org.apache.poi.sl.usermodel.AutoNumberingScheme; +import org.apache.poi.sl.usermodel.PaintStyle; +import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint; import org.apache.poi.sl.usermodel.TextParagraph; import org.apache.poi.util.*; @@ -403,8 +406,24 @@ public final class HSLFTextParagraph imp } @Override - public Color getBulletFontColor() { - return HSLFTextParagraph.this.getBulletColor(); + public void setBulletFontColor(Color color) { + setBulletFontColor(DrawPaint.createSolidPaint(color)); + } + + @Override + public void setBulletFontColor(PaintStyle color) { + if (!(color instanceof SolidPaint)) { + throw new IllegalArgumentException("HSLF only supports SolidPaint"); + } + SolidPaint sp = (SolidPaint)color; + Color col = DrawPaint.applyColorTransform(sp.getSolidColor()); + HSLFTextParagraph.this.setBulletColor(col); + } + + @Override + public PaintStyle getBulletFontColor() { + Color col = HSLFTextParagraph.this.getBulletColor(); + return DrawPaint.createSolidPaint(col); } @Override @@ -497,7 +516,9 @@ public final class HSLFTextParagraph imp TextProp tp = getPropVal(_paragraphStyle, "bullet.color", this); if (tp == null) { // if bullet color is undefined, return color of first run - return (_runs.isEmpty()) ? null : _runs.get(0).getFontColor(); + if (_runs.isEmpty()) return null; + SolidPaint sp = _runs.get(0).getFontColor(); + return DrawPaint.applyColorTransform(sp.getSolidColor()); } return getColorFromColorIndexStruct(tp.getValue(), _sheet); Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java (original) +++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextRun.java Sun Aug 9 22:44:13 2015 @@ -21,8 +21,14 @@ import static org.apache.poi.hslf.usermo import java.awt.Color; -import org.apache.poi.hslf.model.textproperties.*; +import org.apache.poi.hslf.model.textproperties.BitMaskTextProp; +import org.apache.poi.hslf.model.textproperties.CharFlagsTextProp; +import org.apache.poi.hslf.model.textproperties.TextProp; +import org.apache.poi.hslf.model.textproperties.TextPropCollection; import org.apache.poi.hslf.model.textproperties.TextPropCollection.TextPropType; +import org.apache.poi.sl.draw.DrawPaint; +import org.apache.poi.sl.usermodel.PaintStyle; +import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint; import org.apache.poi.sl.usermodel.TextRun; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; @@ -315,13 +321,15 @@ public final class HSLFTextRun implement } /** - * @return font color as RGB value - * @see java.awt.Color + * @return font color as PaintStyle */ - public Color getFontColor() { + @Override + public SolidPaint getFontColor() { TextProp tp = getPropVal(characterStyle, "font.color", parentParagraph); - return (tp == null) ? null - : HSLFTextParagraph.getColorFromColorIndexStruct(tp.getValue(), parentParagraph.getSheet()); + if (tp == null) return null; + Color color = HSLFTextParagraph.getColorFromColorIndexStruct(tp.getValue(), parentParagraph.getSheet()); + SolidPaint ps = DrawPaint.createSolidPaint(color); + return ps; } /** @@ -334,12 +342,21 @@ public final class HSLFTextRun implement setCharTextPropVal("font.color", bgr); } - /** - * Sets color of the text, as a java.awt.Color - */ - public void setFontColor(Color color) { + + @Override + public void setFontColor(Color color) { + setFontColor(DrawPaint.createSolidPaint(color)); + } + + @Override + public void setFontColor(PaintStyle color) { + if (!(color instanceof SolidPaint)) { + throw new IllegalArgumentException("HSLF only supports solid paint"); + } // In PowerPont RGB bytes are swapped, as BGR - int rgb = new Color(color.getBlue(), color.getGreen(), color.getRed(), 254).getRGB(); + SolidPaint sp = (SolidPaint)color; + Color c = DrawPaint.applyColorTransform(sp.getSolidColor()); + int rgb = new Color(c.getBlue(), c.getGreen(), c.getRed(), 254).getRGB(); setFontColor(rgb); } Modified: poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java (original) +++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/model/TestShapes.java Sun Aug 9 22:44:13 2015 @@ -17,6 +17,7 @@ package org.apache.poi.hslf.model; +import static org.apache.poi.sl.TestCommonSL.sameColor; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -53,9 +54,9 @@ import org.apache.poi.hslf.usermodel.HSL import org.apache.poi.hslf.usermodel.HSLFTextParagraph; import org.apache.poi.hslf.usermodel.HSLFTextRun; import org.apache.poi.hslf.usermodel.HSLFTextShape; +import org.apache.poi.sl.usermodel.PictureData.PictureType; import org.apache.poi.sl.usermodel.ShapeType; import org.apache.poi.sl.usermodel.StrokeStyle.LineDash; -import org.apache.poi.sl.usermodel.PictureData.PictureType; import org.junit.Before; import org.junit.Test; @@ -189,16 +190,16 @@ public final class TestShapes { List<HSLFTextParagraph> para = tb.getTextParagraphs(); HSLFTextRun tr = para.get(0).getTextRuns().get(0); assertEquals("para 1 run 1. ", tr.getRawText()); - assertEquals(Color.black, tr.getFontColor()); + assertTrue(sameColor(Color.black, tr.getFontColor())); tr = para.get(0).getTextRuns().get(1); assertEquals("para 1 run 2.\r", tr.getRawText()); - assertEquals(Color.red, tr.getFontColor()); + assertTrue(sameColor(Color.red, tr.getFontColor())); tr = para.get(1).getTextRuns().get(0); assertEquals("para 2 run 1. ", tr.getRawText()); - assertEquals(Color.yellow, tr.getFontColor()); + assertTrue(sameColor(Color.yellow, tr.getFontColor())); tr = para.get(1).getTextRuns().get(1); assertEquals("para 2 run 2. para 2 run 3.", tr.getRawText()); - assertEquals(Color.black, tr.getFontColor()); + assertTrue(sameColor(Color.black, tr.getFontColor())); assertTrue(tr.isStrikethrough()); } @@ -235,7 +236,7 @@ public final class TestShapes { assertTrue(rt.isItalic()); assertFalse(rt.isUnderlined()); assertEquals("Arial", rt.getFontFamily()); - assertEquals(Color.red, rt.getFontColor()); + assertTrue(sameColor(Color.red, rt.getFontColor())); // Serialize and read again ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -255,7 +256,7 @@ public final class TestShapes { assertTrue(rt.isItalic()); assertFalse(rt.isUnderlined()); assertEquals("Arial", rt.getFontFamily()); - assertEquals(Color.red, rt.getFontColor()); + assertTrue(sameColor(Color.red, rt.getFontColor())); } /** Modified: poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java?rev=1694925&r1=1694924&r2=1694925&view=diff ============================================================================== --- poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java (original) +++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestTextRun.java Sun Aug 9 22:44:13 2015 @@ -17,15 +17,26 @@ package org.apache.poi.hslf.usermodel; -import static org.junit.Assert.*; +import static org.apache.poi.sl.TestCommonSL.sameColor; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; import java.awt.Color; -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.util.List; import org.apache.poi.POIDataSamples; import org.apache.poi.hslf.model.textproperties.TextPropCollection; -import org.apache.poi.hslf.record.*; +import org.apache.poi.hslf.record.Record; +import org.apache.poi.hslf.record.TextBytesAtom; +import org.apache.poi.hslf.record.TextCharsAtom; +import org.apache.poi.hslf.record.TextHeaderAtom; import org.junit.Before; import org.junit.Test; @@ -539,7 +550,7 @@ public final class TestTextRun { List<HSLFTextParagraph> run = tx.getTextParagraphs(); HSLFTextRun rt = run.get(0).getTextRuns().get(0); assertTrue(rt.isBold()); - assertEquals(rt.getFontColor(), Color.RED); + assertTrue(sameColor(Color.RED, rt.getFontColor())); } } } Added: poi/trunk/src/testcases/org/apache/poi/sl/TestCommonSL.java URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/sl/TestCommonSL.java?rev=1694925&view=auto ============================================================================== --- poi/trunk/src/testcases/org/apache/poi/sl/TestCommonSL.java (added) +++ poi/trunk/src/testcases/org/apache/poi/sl/TestCommonSL.java Sun Aug 9 22:44:13 2015 @@ -0,0 +1,38 @@ +/* ==================================================================== + 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 java.awt.Color; + +import org.apache.poi.sl.draw.DrawPaint; +import org.apache.poi.sl.usermodel.PaintStyle; +import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint; +import org.junit.Ignore; + +/** + * Currently only contains helper methods + */ +@Ignore +public class TestCommonSL { + + public static boolean sameColor(Color colorExpected, PaintStyle paintActual) { + if (!(paintActual instanceof SolidPaint)) return false; + Color thisC = DrawPaint.applyColorTransform(((SolidPaint)paintActual).getSolidColor()); + return thisC.equals(colorExpected); + } + +} Added: poi/trunk/test-data/slideshow/KEY02.pptx URL: http://svn.apache.org/viewvc/poi/trunk/test-data/slideshow/KEY02.pptx?rev=1694925&view=auto ============================================================================== Binary file - no diff available. Propchange: poi/trunk/test-data/slideshow/KEY02.pptx ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Copied: poi/trunk/test-data/slideshow/alterman_security.pptx (from r1692593, poi/trunk/test-data/slideshow/alterman_security2.pptx) URL: http://svn.apache.org/viewvc/poi/trunk/test-data/slideshow/alterman_security.pptx?p2=poi/trunk/test-data/slideshow/alterman_security.pptx&p1=poi/trunk/test-data/slideshow/alterman_security2.pptx&r1=1692593&r2=1694925&rev=1694925&view=diff ============================================================================== Binary files - no diff available. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
