From 9eea29da5b7d6e1a2dcb915e0e7272a3f04ec28e Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Tue, 18 Dec 2018 22:52:36 +0000 Subject: [PATCH] #63017 - Remove rows from a XSLFTable git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1849244 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/sl/draw/DrawPaint.java | 10 +- .../org/apache/poi/sl/draw/DrawShape.java | 8 +- .../apache/poi/sl/draw/DrawSimpleShape.java | 4 + .../apache/poi/xslf/usermodel/XSLFTable.java | 35 ++++-- .../poi/xslf/usermodel/TestXSLFTable.java | 100 +++++++++++++++++- 5 files changed, 138 insertions(+), 19 deletions(-) diff --git a/src/java/org/apache/poi/sl/draw/DrawPaint.java b/src/java/org/apache/poi/sl/draw/DrawPaint.java index 80c5bcb00b..4fda618d0e 100644 --- a/src/java/org/apache/poi/sl/draw/DrawPaint.java +++ b/src/java/org/apache/poi/sl/draw/DrawPaint.java @@ -143,7 +143,7 @@ public class DrawPaint { public Paint getPaint(Graphics2D graphics, PaintStyle paint, PaintModifier modifier) { if (modifier == PaintModifier.NONE) { - return null; + return TRANSPARENT; } if (paint instanceof SolidPaint) { return getSolidPaint((SolidPaint)paint, graphics, modifier); @@ -152,7 +152,7 @@ public class DrawPaint { } else if (paint instanceof TexturePaint) { return getTexturePaint((TexturePaint)paint, graphics); } - return null; + return TRANSPARENT; } @SuppressWarnings({"WeakerAccess", "unused"}) @@ -236,7 +236,7 @@ public class DrawPaint { protected Paint getTexturePaint(TexturePaint fill, Graphics2D graphics) { InputStream is = fill.getImageData(); if (is == null) { - return null; + return TRANSPARENT; } assert(graphics != null); @@ -250,7 +250,7 @@ public class DrawPaint { } } catch (IOException e) { LOG.log(POILogger.ERROR, "Can't load image data - using transparent color", e); - return null; + return TRANSPARENT; } int alpha = fill.getAlpha(); @@ -270,7 +270,7 @@ public class DrawPaint { if(image == null) { LOG.log(POILogger.ERROR, "Can't load image data"); - return null; + return TRANSPARENT; } return new java.awt.TexturePaint(image, textAnchor); diff --git a/src/java/org/apache/poi/sl/draw/DrawShape.java b/src/java/org/apache/poi/sl/draw/DrawShape.java index df5960b538..0c6054c8a9 100644 --- a/src/java/org/apache/poi/sl/draw/DrawShape.java +++ b/src/java/org/apache/poi/sl/draw/DrawShape.java @@ -121,7 +121,10 @@ public class DrawShape implements Drawable { } public static Rectangle2D getAnchor(Graphics2D graphics, PlaceableShape shape) { -// return getAnchor(graphics, shape.getAnchor()); + final Rectangle2D shapeAnchor = shape.getAnchor(); + if (shapeAnchor == null) { + return null; + } final boolean isHSLF = isHSLF(shape); AffineTransform tx = graphics == null ? null : (AffineTransform)graphics.getRenderingHint(Drawable.GROUP_TRANSFORM); @@ -146,7 +149,6 @@ public class DrawShape implements Drawable { // and later on, turn it around again to compare it with its original size ... - final Rectangle2D shapeAnchor = shape.getAnchor(); final Rectangle2D anchorO = tx.createTransformedShape(shapeAnchor).getBounds2D(); final Rectangle2D anchorT; @@ -190,7 +192,7 @@ public class DrawShape implements Drawable { normalizedShape = txs2.createTransformedShape(shapeAnchor).getBounds2D(); } } else { - normalizedShape = shape.getAnchor(); + normalizedShape = shapeAnchor; } if (tx.isIdentity()) { diff --git a/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java b/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java index a8d6fb534e..eacc6ed806 100644 --- a/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java +++ b/src/java/org/apache/poi/sl/draw/DrawSimpleShape.java @@ -69,6 +69,10 @@ public class DrawSimpleShape extends DrawShape { @Override public void draw(Graphics2D graphics) { + if (getAnchor(graphics, getShape()) == null) { + return; + } + DrawPaint drawPaint = DrawFactory.getInstance(graphics).getPaint(getShape()); Paint fill = drawPaint.getPaint(graphics, getShape().getFillStyle().getPaint()); Paint line = drawPaint.getPaint(graphics, getShape().getStrokeStyle().getPaint()); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java index c8624f071a..5266c13c09 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTable.java @@ -159,6 +159,16 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable maxHeight) { + tab.removeRow(rowIdx-startRow); + break; + } + rowIdx++; + } + + tab.updateCellAnchor(); + as.setAnchor(tab.getAnchor()); + } + + File fileOut = TempFile.createTempFile("tabtest", "pptx"); + try (FileOutputStream fos = new FileOutputStream(fileOut)) { + ppt.write(fos); + } + + String[] args = { + "-format", "null", // png,gif,jpg or null for test + "-slide", "-1", // -1 for all + "-outdir", fileOut.getParentFile().getCanonicalPath(), + "-quiet", + fileOut.getAbsolutePath() + }; + PPTX2PNG.main(args); + } + + private static String[][] getDummyData(int rows) { + String[] header = { "Row#", "ID", "Name", "Description", "Price", "Percent", "Current Value" }; + String[][] data = new String[rows+1][header.length]; + System.arraycopy(header, 0, data[0], 0, header.length); + + String[] names = { "car", "rubber duckie", "phone", "gadget" }; + String[] desc = { "new", "used", "untouched" }; + + Random r = new Random(); + + for (int row=1; row<=rows; row++) { + String[] line = new String[header.length]; + line[0] = Integer.toString(row); + line[1] = Integer.toString(r.nextInt(1000)); + line[2] = names[r.nextInt(names.length)]; + line[3] = "The "+desc[r.nextInt(desc.length)]+" "+line[2]+" in "+(2017+row); + line[4] = "$"+r.nextInt(50000); + line[5] = r.nextInt(100)+"%"; + line[6] = "$"+r.nextInt(50000); + System.arraycopy(line, 0, data[row], 0, header.length); + } + + return data; + } + + @Test public void testRead() throws IOException { XMLSlideShow ppt = XSLFTestDataSamples.openSampleDocument("shapes.pptx"); -- 2.39.5