* @author Yegor Kozlov\r
*/\r
public abstract class CharacterPropertyFetcher<T> extends ParagraphPropertyFetcher<T> {\r
+ public boolean isFetchingFromMaster = false;\r
\r
public CharacterPropertyFetcher(int level) {\r
super(level);\r
public Stroke applyStroke(Graphics2D graphics) {\r
\r
float lineWidth = (float) _shape.getLineWidth();\r
+ if(lineWidth == 0.0f) lineWidth = 0.25f; // Both PowerPoint and OOo draw zero-length lines as 0.25pt\r
+\r
LineDash lineDash = _shape.getLineDash();\r
float[] dash = null;\r
float dash_phase = 0;\r
lst.add(new Outline(canvasShape, p));\r
}\r
\r
- // add any shape-specific stuff here (line decorations, etc.)\r
- lst.addAll(_shape.getCustomOutlines());\r
return lst;\r
}\r
\r
import org.openxmlformats.schemas.presentationml.x2006.main.CTConnectorNonVisual;\r
\r
import java.awt.Shape;\r
+import java.awt.Graphics2D;\r
+import java.awt.Color;\r
import java.awt.geom.AffineTransform;\r
import java.awt.geom.Ellipse2D;\r
import java.awt.geom.GeneralPath;\r
import java.awt.geom.Rectangle2D;\r
import java.util.ArrayList;\r
-import java.util.Collections;\r
import java.util.List;\r
\r
/**\r
LineEndLength tailLength = getLineTailLength();\r
LineEndWidth tailWidth = getLineTailWidth();\r
\r
- double lineWidth = getLineWidth();\r
+ double lineWidth = Math.max(2.5, getLineWidth());\r
+\r
Rectangle2D anchor = getAnchor();\r
double x2 = anchor.getX() + anchor.getWidth(),\r
y2 = anchor.getY() + anchor.getHeight();\r
LineEndLength headLength = getLineHeadLength();\r
LineEndWidth headWidth = getLineHeadWidth();\r
\r
- double lineWidth = getLineWidth();\r
+ double lineWidth = Math.max(2.5, getLineWidth());\r
Rectangle2D anchor = getAnchor();\r
double x1 = anchor.getX(),\r
y1 = anchor.getY();\r
break;\r
case STEALTH:\r
case ARROW:\r
- p = new Path();\r
+ p = new Path(false, true);\r
GeneralPath arrow = new GeneralPath();\r
arrow.moveTo((float) (lineWidth * 3 * scaleX), (float) (-lineWidth * scaleY * 2));\r
arrow.lineTo(0, 0);\r
return shape == null ? null : new Outline(shape, p);\r
}\r
\r
- @Override\r
- List<Outline> getCustomOutlines(){\r
+ private List<Outline> getDecorationOutlines(){\r
List<Outline> lst = new ArrayList<Outline>();\r
\r
Outline head = getHeadDecoration();\r
public XSLFShadow getShadow() {\r
return null;\r
}\r
+\r
+ @Override\r
+ public void draw(Graphics2D graphics){\r
+ super.draw(graphics);\r
+\r
+ // draw line decorations\r
+ Color lineColor = getLineColor();\r
+ if(lineColor != null) {\r
+ graphics.setPaint(lineColor);\r
+ for(Outline o : getDecorationOutlines()){\r
+ if(o.getPath().isFilled()){\r
+ graphics.fill(o.getOutline());\r
+ } \r
+ if(o.getPath().isStroked()){\r
+ graphics.draw(o.getOutline());\r
+ }\r
+ }\r
+ }\r
+ }\r
}
\ No newline at end of file
graphics.translate(exterior.getX(), exterior.getY());\r
double scaleX = exterior.getWidth() / interior.getWidth();\r
double scaleY = exterior.getHeight() / interior.getHeight();\r
+\r
+ // group transform scales shapes but not fonts\r
+ Number prevFontScale = (Number)graphics.getRenderingHint(XSLFRenderingHint.FONT_SCALE);\r
+ graphics.setRenderingHint(XSLFRenderingHint.FONT_SCALE, Math.abs(1/scaleY));\r
+\r
graphics.scale(scaleX, scaleY);\r
graphics.translate(-interior.getX(), -interior.getY());\r
\r
graphics.setTransform(at);\r
graphics.setRenderingHint(XSLFRenderingHint.GRESTORE, true);\r
}\r
+\r
+ graphics.setRenderingHint(XSLFRenderingHint.FONT_SCALE, prevFontScale);\r
+ \r
}\r
\r
}
\ No newline at end of file
\r
package org.apache.poi.xslf.usermodel;\r
\r
+import org.apache.poi.util.Internal;\r
+\r
import java.awt.RenderingHints;\r
\r
/**\r
* draw text via {@link java.awt.font.TextLayout#draw(java.awt.Graphics2D, float, float)}\r
*/\r
public static final int TEXT_MODE_GLYPHS = 2;\r
+\r
+ @Internal\r
+ public static final XSLFRenderingHint FONT_SCALE = new XSLFRenderingHint(5);\r
}
\ No newline at end of file
}\r
\r
\r
- /**\r
- * @return any shape-specific geometry that is not included in presetShapeDefinitions.xml\r
- * (line decorations, etc)\r
- */\r
- List<Outline> getCustomOutlines(){\r
- return Collections.emptyList();\r
- }\r
-\r
/**\r
* draw any content within this shape (image, text, etc.).\r
*\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties;\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextSpacing;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextTabStop;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextTabStopList;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STTextAlignType;\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextFont;\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharBullet;\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor;\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBulletSizePoint;\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextLineBreak;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextNormalAutofit;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties;\r
import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder;\r
import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType;\r
\r
CTTextParagraphProperties pr = _p.isSetPPr() ? _p.getPPr() : _p.addNewPPr();\r
CTColor c = pr.isSetBuClr() ? pr.getBuClr() : pr.addNewBuClr();\r
CTSRgbColor clr = c.isSetSrgbClr() ? c.getSrgbClr() : c.addNewSrgbClr();\r
- clr.setVal(new byte[]{(byte)color.getRed(), (byte)color.getGreen(), (byte)color.getBlue()});\r
+ clr.setVal(new byte[]{(byte) color.getRed(), (byte) color.getGreen(), (byte) color.getBlue()});\r
}\r
\r
public double getBulletFontSize(){\r
};\r
fetchParagraphProperty(fetcher);\r
// if the marL attribute is omitted, then a value of 347663 is implied\r
- return fetcher.getValue() == null ? Units.toPoints(347663) : fetcher.getValue();\r
+ return fetcher.getValue() == null ? 0 : fetcher.getValue();\r
+ }\r
+\r
+ /**\r
+ *\r
+ * @return the default size for a tab character within this paragraph\r
+ */\r
+ public double getDefaultTabSize(){\r
+ ParagraphPropertyFetcher<Double> fetcher = new ParagraphPropertyFetcher<Double>(getLevel()){\r
+ public boolean fetch(CTTextParagraphProperties props){\r
+ if(props.isSetDefTabSz()){\r
+ double val = Units.toPoints(props.getDefTabSz());\r
+ setValue(val);\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ };\r
+ fetchParagraphProperty(fetcher);\r
+ return fetcher.getValue() == null ? 0 : fetcher.getValue();\r
+ }\r
+\r
+ public double getTabStop(final int idx){\r
+ ParagraphPropertyFetcher<Double> fetcher = new ParagraphPropertyFetcher<Double>(getLevel()){\r
+ public boolean fetch(CTTextParagraphProperties props){\r
+ if(props.isSetTabLst()){\r
+ CTTextTabStopList tabStops = props.getTabLst();\r
+ if(idx < tabStops.sizeOfTabArray() ) {\r
+ CTTextTabStop ts = tabStops.getTabArray(idx);\r
+ double val = Units.toPoints(ts.getPos());\r
+ setValue(val);\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+ };\r
+ fetchParagraphProperty(fetcher);\r
+ return fetcher.getValue() == null ? getDefaultTabSize() : fetcher.getValue();\r
}\r
\r
/**\r
}\r
};\r
fetchParagraphProperty(fetcher);\r
- return fetcher.getValue() == null ? 100 : fetcher.getValue();\r
+\r
+ double lnSpc = fetcher.getValue() == null ? 100 : fetcher.getValue();\r
+ if(lnSpc > 0) {\r
+ // check if the percentage value is scaled\r
+ CTTextNormalAutofit normAutofit = getParentShape().getTextBodyPr().getNormAutofit();\r
+ if(normAutofit != null) {\r
+ double scale = 1 - (double)normAutofit.getLnSpcReduction() / 100000;\r
+ lnSpc *= scale;\r
+ }\r
+ }\r
+ \r
+ return lnSpc;\r
}\r
\r
/**\r
}\r
};\r
fetchParagraphProperty(fetcher);\r
- return fetcher.getValue() == null ? 0 : fetcher.getValue();\r
+\r
+ double spcBef = fetcher.getValue() == null ? 0 : fetcher.getValue();\r
+ return spcBef;\r
}\r
\r
/**\r
setValue(false);\r
return true;\r
}\r
- if(props.isSetBuFont()){\r
+ if(props.isSetBuFont() || props.isSetBuChar()){\r
setValue(true);\r
return true;\r
}\r
width = anchor.getWidth() - leftInset - rightInset - leftMargin;\r
if(firstLine) {\r
if(isBullet()){\r
- width -= Math.abs(indent);\r
+ if(indent > 0) width -= indent;\r
} else {\r
if(indent > 0) width -= indent; // first line indentation\r
else if (indent < 0) { // hanging indentation: the first line start at the left margin\r
double leftMargin = getLeftMargin();\r
boolean firstLine = true;\r
double indent = getIndent();\r
+\r
+ //The vertical line spacing\r
+ double spacing = getLineSpacing();\r
for(TextFragment line : _lines){\r
- double penX = x;\r
+ double penX = x + leftMargin;\r
\r
if(firstLine) {\r
-\r
if(_bullet != null){\r
if(indent < 0) {\r
// a negative value means "Hanging" indentation and\r
// indicates the position of the actual bullet character.\r
// (the bullet is shifted to right relative to the text)\r
- _bullet.draw(graphics, penX, penY);\r
- penX -= indent;\r
+ _bullet.draw(graphics, penX + indent, penY);\r
} else if(indent > 0){\r
- penX += leftMargin;\r
// a positive value means the "First Line" indentation:\r
// the first line is indented and other lines start at the bullet ofset\r
_bullet.draw(graphics, penX, penY);\r
penX += indent;\r
} else {\r
- // no special indent. The first line behaves like all others\r
- penX += leftMargin;\r
-\r
// a zero indent means that the bullet and text have the same offset\r
_bullet.draw(graphics, penX, penY);\r
\r
penX += _bullet._layout.getAdvance() + 1;\r
}\r
} else {\r
- if(indent < 0) {\r
- // if bullet=false and indentation=hanging then the first line\r
- // starts at the left offset (penX is not incremented)\r
- } else if(indent > 0) {\r
- // first line indent shifts penX\r
- penX += indent + leftMargin;\r
- } else {\r
- // no special indent. The first line behaves like all others\r
- penX += leftMargin;\r
- }\r
+ penX += indent;\r
}\r
- } else {\r
- penX += leftMargin;\r
}\r
\r
\r
penX += (anchor.getWidth() - line.getWidth() - leftInset - rightInset);\r
break;\r
default:\r
- //penX += leftInset;\r
break;\r
}\r
\r
line.draw(graphics, penX, penY);\r
\r
- //The vertical line spacing\r
- double spacing = getLineSpacing();\r
if(spacing > 0) {\r
// If linespacing >= 0, then linespacing is a percentage of normal line height.\r
penY += spacing*0.01* _maxLineHeight;\r
\r
firstLine = false;\r
}\r
+ \r
return penY - y;\r
}\r
\r
}\r
\r
AttributedString getAttributedString(Graphics2D graphics){\r
+\r
String text = getRenderableText();\r
\r
AttributedString string = new AttributedString(text);\r
// user can pass an object to convert fonts via a rendering hint\r
string.addAttribute(TextAttribute.FAMILY, run.getFontFamily(), startIndex, endIndex);\r
\r
- string.addAttribute(TextAttribute.SIZE, (float)run.getFontSize(), startIndex, endIndex);\r
+ float fontSz = (float)run.getFontSize();\r
+ Number fontScale = (Number)graphics.getRenderingHint(XSLFRenderingHint.FONT_SCALE);\r
+ if(fontScale != null) fontSz *= fontScale.floatValue();\r
+\r
+ string.addAttribute(TextAttribute.SIZE, fontSz , startIndex, endIndex);\r
if(run.isBold()) {\r
string.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, startIndex, endIndex);\r
}\r
return string;\r
}\r
\r
+ /**\r
+ * ensure that the paragraph contains at least one character\r
+ */\r
+ private void ensureNotEmpty(){\r
+ XSLFTextRun r = addNewTextRun();\r
+ r.setText(" ");\r
+ CTTextCharacterProperties endPr = _p.getEndParaRPr();\r
+ if(endPr != null) {\r
+ if(endPr.isSetSz()) r.setFontSize(endPr.getSz() / 100);\r
+ }\r
+ }\r
+\r
void breakText(Graphics2D graphics){\r
_lines = new ArrayList<TextFragment>();\r
\r
+ // does this paragraph contain text?\r
+ boolean emptyParagraph = _runs.size() == 0;\r
+\r
+ // ensure that the paragraph contains at least one character\r
+ if(_runs.size() == 0) ensureNotEmpty();\r
+\r
String text = getRenderableText();\r
+ if(text.length() == 0) return;\r
+\r
AttributedString at = getAttributedString(graphics);\r
AttributedCharacterIterator it = at.getIterator();\r
- if(it.getBeginIndex() == it.getEndIndex()) {\r
- return;\r
- }\r
LineBreakMeasurer measurer = new LineBreakMeasurer(it, graphics.getFontRenderContext());\r
for (;;) {\r
int startIndex = measurer.getPosition();\r
double wrappingWidth = getWrappingWidth(_lines.size() == 0) + 1; // add a pixel to compensate rounding errors\r
-\r
+ // shape width can be smaller that the sum of insets (proved by a test file)\r
+ if(wrappingWidth < 0) wrappingWidth = 1;\r
\r
int nextBreak = text.indexOf('\n', startIndex + 1);\r
if(nextBreak == -1) nextBreak = it.getEndIndex();\r
\r
TextLayout layout = measurer.nextLayout((float)wrappingWidth, nextBreak, true);\r
- if (layout == null) {\r
+ if (layout == null) {\r
// layout can be null if the entire word at the current position\r
// does not fit within the wrapping width. Try with requireNextWord=false.\r
layout = measurer.nextLayout((float)wrappingWidth, nextBreak, false);\r
- }\r
+ }\r
\r
int endIndex = measurer.getPosition();\r
\r
if(endIndex == it.getEndIndex()) break;\r
}\r
\r
- if(isBullet()) {\r
+ if(isBullet() && !emptyParagraph) {\r
String buCharacter = getBulletCharacter();\r
String buFont = getBulletFont();\r
+ if(buFont == null) buFont = getTextRuns().get(0).getFontFamily();\r
if(buCharacter != null && buFont != null && _lines.size() > 0) {\r
AttributedString str = new AttributedString(buCharacter);\r
\r
r2.copy(r1);\r
}\r
}\r
+\r
}\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STTextStrikeType;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STTextUnderlineType;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.STSchemeColorVal;\r
\r
import java.awt.Color;\r
+import java.awt.font.FontRenderContext;\r
+import java.awt.font.TextLayout;\r
+import java.awt.font.TextAttribute;\r
+import java.text.AttributedString;\r
\r
/**\r
* Represents a run of text within the containing text body. The run element is the\r
\r
String getRenderableText(){\r
String txt = _r.getT();\r
- switch (getTextCap()){\r
- case ALL:\r
- txt = txt.toUpperCase();\r
- break;\r
- case SMALL:\r
- txt = txt.toLowerCase();\r
- break;\r
+\r
+ StringBuffer buf = new StringBuffer();\r
+ for(int i = 0; i < txt.length(); i++) {\r
+ char c = txt.charAt(i);\r
+ if(c == '\t') {\r
+ // replace tab with the effective number of white spaces\r
+ buf.append(" ");\r
+ } else {\r
+ switch (getTextCap()){\r
+ case ALL:\r
+ buf.append(Character.toUpperCase(c));\r
+ break;\r
+ case SMALL:\r
+ buf.append(Character.toLowerCase(c));\r
+ break;\r
+ default:\r
+ buf.append(c);\r
+ }\r
+ }\r
}\r
- // TODO-1 is is the place to convert wingdings to unicode\r
- \r
- // TODO-2 this is a temporary hack. Rendering text with tabs is not yet supported.\r
- // for now tabs are replaced with some number of spaces.\r
- return txt.replace("\t", " ");\r
+\r
+ return buf.toString();\r
}\r
\r
+ /**\r
+ * Replace a tab with the effective number of white spaces.\r
+ *\r
+ * @return\r
+ */\r
+ private String tab2space(){\r
+ AttributedString string = new AttributedString(" ");\r
+ // user can pass an object to convert fonts via a rendering hint\r
+ string.addAttribute(TextAttribute.FAMILY, getFontFamily());\r
+\r
+ string.addAttribute(TextAttribute.SIZE, (float)getFontSize());\r
+ TextLayout l = new TextLayout(string.getIterator(), new FontRenderContext(null, true, true));\r
+ double wspace = l.getAdvance();\r
+\r
+ double tabSz = _p.getDefaultTabSize();\r
+\r
+ int numSpaces = (int)Math.ceil(tabSz / wspace);\r
+ StringBuffer buf = new StringBuffer();\r
+ for(int i = 0; i < numSpaces; i++) {\r
+ buf.append(' ');\r
+ }\r
+ return buf.toString();\r
+ }\r
+ \r
public void setText(String text){\r
_r.setT(text);\r
}\r
public Color getFontColor(){\r
final XSLFTheme theme = _p.getParentShape().getSheet().getTheme();\r
CTShapeStyle style = _p.getParentShape().getSpStyle();\r
- final CTSchemeColor shapeStyle = style == null ? null : style.getFontRef().getSchemeClr();\r
+ final CTSchemeColor phClr = style == null ? null : style.getFontRef().getSchemeClr();\r
\r
CharacterPropertyFetcher<Color> fetcher = new CharacterPropertyFetcher<Color>(_p.getLevel()){\r
public boolean fetch(CTTextCharacterProperties props){\r
CTSolidColorFillProperties solidFill = props.getSolidFill();\r
if(solidFill != null) {\r
- Color c = new XSLFColor(solidFill, theme, shapeStyle).getColor();\r
+ boolean useCtxColor =\r
+ (solidFill.isSetSchemeClr() && solidFill.getSchemeClr().getVal() == STSchemeColorVal.PH_CLR)\r
+ || isFetchingFromMaster;\r
+ Color c = new XSLFColor(solidFill, theme, useCtxColor ? phClr : null).getColor();\r
setValue(c);\r
return true;\r
}\r
ok = shape.fetchShapeProperty(fetcher);\r
if(!ok) {\r
CTTextParagraphProperties defaultProps = _p.getDefaultStyle();\r
- if(defaultProps != null) ok = fetcher.fetch(defaultProps);\r
+ if(defaultProps != null) {\r
+ fetcher.isFetchingFromMaster = true;\r
+ ok = fetcher.fetch(defaultProps);\r
+ }\r
}\r
}\r
\r
==================================================================== */
package org.apache.poi.xslf;
-import java.net.URI;
-import java.util.List;
-
import junit.framework.TestCase;
-
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
+import java.net.URI;
+import java.util.List;
+
public class TestXSLFBugs extends TestCase {
public void test51187() throws Exception {
package org.apache.poi.xslf;
import junit.framework.TestCase;
-
import org.apache.poi.POIDataSamples;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackagePart;
==================================================================== */\r
package org.apache.poi.xslf;\r
\r
-import java.io.ByteArrayInputStream;\r
-import java.io.ByteArrayOutputStream;\r
-import java.io.InputStream;\r
-\r
import org.apache.poi.POIDataSamples;\r
import org.apache.poi.openxml4j.opc.OPCPackage;\r
import org.apache.poi.xslf.usermodel.XMLSlideShow;\r
\r
+import java.io.ByteArrayInputStream;\r
+import java.io.ByteArrayOutputStream;\r
+import java.io.InputStream;\r
+\r
/**\r
* @author Yegor Kozlov\r
*/\r
==================================================================== */
package org.apache.poi.xslf.extractor;
+import junit.framework.TestCase;
import org.apache.poi.POIDataSamples;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xslf.XSLFSlideShow;
-import junit.framework.TestCase;
-
/**
* Tests for HXFPowerPointExtractor
*/
package org.apache.poi.xslf.geom;
import junit.framework.TestCase;
-import org.apache.poi.xslf.model.geom.*;
+import org.apache.poi.xslf.model.geom.Context;
+import org.apache.poi.xslf.model.geom.CustomGeometry;
+import org.apache.poi.xslf.model.geom.Formula;
+import org.apache.poi.xslf.model.geom.Guide;
import org.openxmlformats.schemas.drawingml.x2006.main.CTCustomGeometry2D;
/**
package org.apache.poi.xslf.geom;
import junit.framework.TestCase;
-import org.apache.poi.xslf.model.geom.*;
+import org.apache.poi.xslf.model.geom.Context;
+import org.apache.poi.xslf.model.geom.CustomGeometry;
+import org.apache.poi.xslf.model.geom.Guide;
+import org.apache.poi.xslf.model.geom.IAdjustableShape;
+import org.apache.poi.xslf.model.geom.Path;
+import org.apache.poi.xslf.model.geom.PresetGeometries;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
package org.apache.poi.xslf.usermodel;
import junit.framework.TestCase;
-
import org.apache.poi.POIDataSamples;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackagePart;
-import org.apache.poi.xslf.usermodel.XMLSlideShow;
-import org.apache.poi.xslf.usermodel.XSLFRelation;
import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesMasterIdListEntry;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterIdListEntry;
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
import org.apache.poi.util.Units;\r
-import org.openxmlformats.schemas.drawingml.x2006.main.STTextUnderlineType;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STTextStrikeType;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.STTextUnderlineType;\r
\r
/**\r
* @author Yegor Kozlov\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTColor;\r
-import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor;\r
-import org.openxmlformats.schemas.drawingml.x2006.main.STSchemeColorVal;\r
-import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor;\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTHslColor;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STPresetColorVal;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.STSchemeColorVal;\r
\r
-import java.awt.*;\r
+import java.awt.Color;\r
\r
/**\r
* @author Yegor Kozlov\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
-import org.apache.poi.util.Units;\r
-import org.apache.poi.xslf.usermodel.LineCap;\r
-import org.apache.poi.xslf.usermodel.LineDash;\r
-import org.openxmlformats.schemas.drawingml.x2006.main.STLineCap;\r
-import org.openxmlformats.schemas.drawingml.x2006.main.STPresetLineDashVal;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.STLineEndLength;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STLineEndType;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STLineEndWidth;\r
-import org.openxmlformats.schemas.drawingml.x2006.main.STLineEndLength;\r
-\r
-import java.awt.*;\r
\r
/**\r
* @author Yegor Kozlov\r
\r
import junit.framework.TestCase;\r
\r
-import java.awt.*;\r
+import java.awt.Rectangle;\r
import java.awt.geom.Ellipse2D;\r
import java.awt.geom.GeneralPath;\r
\r
\r
import junit.framework.TestCase;\r
\r
-import java.awt.*;\r
+import java.awt.Dimension;\r
import java.awt.geom.Rectangle2D;\r
\r
/**\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
-import java.awt.*;\r
-import java.awt.geom.Ellipse2D;\r
-import java.awt.geom.GeneralPath;\r
-import java.util.*;\r
-import java.util.List;\r
-import java.net.URI;\r
-\r
-import org.apache.poi.xslf.XSLFTestDataSamples;\r
-import org.apache.poi.xssf.usermodel.XSSFTable;\r
import org.apache.poi.openxml4j.opc.PackageRelationship;\r
import org.apache.poi.openxml4j.opc.TargetMode;\r
+import org.apache.poi.xslf.XSLFTestDataSamples;\r
+\r
+import java.net.URI;\r
\r
/**\r
* @author Yegor Kozlov\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
+import org.apache.poi.xslf.XSLFTestDataSamples;\r
\r
-import java.awt.*;\r
-import java.awt.geom.Ellipse2D;\r
-import java.awt.geom.GeneralPath;\r
-import java.util.*;\r
+import java.util.Arrays;\r
import java.util.List;\r
\r
-import org.apache.poi.xslf.XSLFTestDataSamples;\r
-\r
/**\r
* @author Yegor Kozlov\r
*/\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
import org.apache.poi.xslf.XSLFTestDataSamples;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STTextUnderlineType;\r
\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
import org.apache.poi.xslf.XSLFTestDataSamples;\r
\r
/**\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
import org.apache.poi.util.Units;\r
-import org.apache.poi.xslf.usermodel.LineCap;\r
-import org.apache.poi.xslf.usermodel.LineDash;\r
import org.apache.poi.xslf.XSLFTestDataSamples;\r
+import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STLineCap;\r
import org.openxmlformats.schemas.drawingml.x2006.main.STPresetLineDashVal;\r
-import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor;\r
\r
-import java.awt.*;\r
+import java.awt.Color;\r
\r
/**\r
* @author Yegor Kozlov\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
import org.apache.poi.xslf.XSLFTestDataSamples;\r
-import org.apache.poi.openxml4j.opc.PackagePart;\r
\r
import java.awt.Color;\r
-import java.util.List;\r
import java.util.Arrays;\r
-import java.util.regex.Pattern;\r
\r
/**\r
* @author Yegor Kozlov\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
+import org.apache.poi.POIXMLDocumentPart;\r
+import org.apache.poi.xslf.XSLFTestDataSamples;\r
\r
import java.awt.Dimension;\r
import java.util.List;\r
\r
-import org.apache.poi.POIXMLDocumentPart;\r
-import org.apache.poi.xslf.XSLFTestDataSamples;\r
-\r
/**\r
* @author Yegor Kozlov\r
*/\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
-import java.awt.*;\r
-import java.awt.geom.Ellipse2D;\r
-import java.awt.geom.GeneralPath;\r
-import java.util.*;\r
-import java.util.List;\r
-\r
import org.apache.poi.xslf.XSLFTestDataSamples;\r
import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame;\r
\r
+import java.awt.Color;\r
+import java.util.List;\r
+\r
/**\r
* @author Yegor Kozlov\r
*/\r
\r
import junit.framework.TestCase;\r
\r
-import java.awt.*;\r
-import java.awt.geom.Ellipse2D;\r
-import java.awt.geom.GeneralPath;\r
-import java.util.*;\r
-import java.util.List;\r
-\r
-import org.apache.poi.xslf.XSLFTestDataSamples;\r
-import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame;\r
-\r
/**\r
* @author Yegor Kozlov\r
*/\r
\r
import junit.framework.TestCase;\r
\r
-import java.awt.Rectangle;\r
import java.awt.Color;\r
+import java.awt.Rectangle;\r
import java.awt.geom.Rectangle2D;\r
-import java.io.FileOutputStream;\r
-\r
-import org.apache.poi.xssf.dev.XSSFDump;\r
-import org.apache.poi.xslf.util.PPTX2PNG;\r
\r
/**\r
* Created by IntelliJ IDEA.\r
\r
import junit.framework.TestCase;\r
import org.apache.poi.xslf.XSLFTestDataSamples;\r
-import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType;\r
-import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder;\r
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBodyProperties;\r
+import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder;\r
+import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType;\r
\r
-import java.awt.*;\r
+import java.awt.Color;\r
\r
/**\r
* @author Yegor Kozlov\r
package org.apache.poi.xslf.usermodel;\r
\r
import junit.framework.TestCase;\r
-\r
-\r
import org.apache.poi.xslf.XSLFTestDataSamples;\r
\r
import java.awt.Color;\r