+ This page offers a short introduction into the XSLF API. More examples can be found in the
+ XSLF Examples
+ in the POI SVN repository.
+
Please note that XSLF is still in early development and is a subject to incompatible changes in a future release.
diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/DataExtraction.java b/src/examples/src/org/apache/poi/xslf/usermodel/DataExtraction.java
new file mode 100755
index 000000000..b7e08fc6f
--- /dev/null
+++ b/src/examples/src/org/apache/poi/xslf/usermodel/DataExtraction.java
@@ -0,0 +1,94 @@
+/*
+ * ====================================================================
+ * 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.xslf.usermodel;
+
+import org.apache.poi.openxml4j.opc.PackagePart;
+
+import java.awt.*;
+import java.awt.geom.Rectangle2D;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
+
+/**
+ * Demonstrates how you can extract data from a .pptx file
+ *
+ * @author Yegor Kozlov
+ */
+public final class DataExtraction {
+
+ public static void main(String args[]) throws Exception {
+
+ if (args.length == 0) {
+ System.out.println("Input file is required");
+ return;
+ }
+
+ FileInputStream is = new FileInputStream(args[0]);
+ XMLSlideShow ppt = new XMLSlideShow(is);
+ is.close();
+
+ // Get the document's embedded files.
+ List embeds = ppt.getAllEmbedds();
+ for (PackagePart p : embeds) {
+ String type = p.getContentType();
+ String name = p.getPartName().getName(); //typically file name
+
+ InputStream pIs = p.getInputStream();
+ // make sense of the part data
+ pIs.close();
+
+ }
+
+ // Get the document's embedded files.
+ List images = ppt.getAllPictures();
+ for (XSLFPictureData data : images) {
+ PackagePart p = data.getPackagePart();
+
+ String type = p.getContentType();
+ String name = data.getFileName();
+
+ InputStream pIs = p.getInputStream();
+ // make sense of the image data
+ pIs.close();
+
+
+
+ }
+
+ Dimension pageSize = ppt.getPageSize(); // size of the canvas in points
+ for(XSLFSlide slide : ppt.getSlides()) {
+ for(XSLFShape shape : slide){
+ Rectangle2D anchor = shape.getAnchor(); // position on the canvas
+ if(shape instanceof XSLFTextShape) {
+ XSLFTextShape txShape = (XSLFTextShape)shape;
+ System.out.println(txShape.getText());
+ } else if (shape instanceof XSLFPictureShape){
+ XSLFPictureShape pShape = (XSLFPictureShape)shape;
+ XSLFPictureData pData = pShape.getPictureData();
+ System.out.println(pData.getFileName());
+ } else {
+ System.out.println("Process me: " + shape.getClass());
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/MergePresentations.java b/src/examples/src/org/apache/poi/xslf/usermodel/MergePresentations.java
new file mode 100755
index 000000000..994f94c25
--- /dev/null
+++ b/src/examples/src/org/apache/poi/xslf/usermodel/MergePresentations.java
@@ -0,0 +1,50 @@
+/*
+ * ====================================================================
+ * 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.xslf.usermodel;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+
+/**
+ * Merge multiple pptx presentations together
+ *
+ * @author Yegor Kozlov
+ */
+public final class MergePresentations {
+
+ public static void main(String args[]) throws Exception {
+ XMLSlideShow ppt = new XMLSlideShow();
+
+ for(String arg : args){
+ FileInputStream is = new FileInputStream(arg);
+ XMLSlideShow src = new XMLSlideShow(is);
+ is.close();
+
+ for(XSLFSlide srcSlide : src.getSlides()){
+ ppt.createSlide().importContent(srcSlide);
+ }
+ }
+
+ FileOutputStream out = new FileOutputStream("merged.pptx");
+ ppt.write(out);
+ out.close();
+ }
+
+}
diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/SlidesAndShapes.java b/src/examples/src/org/apache/poi/xslf/usermodel/SlidesAndShapes.java
deleted file mode 100644
index cb700c613..000000000
--- a/src/examples/src/org/apache/poi/xslf/usermodel/SlidesAndShapes.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/* ====================================================================
- 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.xslf.usermodel;
-
-import java.awt.*;
-import java.awt.geom.Ellipse2D;
-import java.awt.geom.GeneralPath;
-import java.io.FileOutputStream;
-
-/**
- * Simple demo that creates a pptx slide show using the XSLF API
- *
- * @author Yegor Kozlov
- */
-public class SlidesAndShapes {
-
- public static void main(String[] args) throws Exception {
- XMLSlideShow ppt = new XMLSlideShow();
- ppt.setPageSize(new Dimension(792, 612));
-
- XSLFSlide slide1 = ppt.createSlide();
- XSLFTextBox textBox = slide1.createTextBox();
- XSLFTextRun r1 = textBox.addNewTextParagraph().addNewTextRun();
- r1.setBold(true);
- r1.setItalic(true);
- r1.setFontColor(Color.yellow);
- r1.setFontFamily("Arial");
- r1.setFontSize(24);
- r1.setText("Apache");
- XSLFTextRun r2 = textBox.addNewTextParagraph().addNewTextRun();
- r2.setStrikethrough(true);
- r2.setUnderline(true);
- r2.setText("POI\u2122");
- XSLFTextRun r3 = textBox.addNewTextParagraph().addNewTextRun();
- r3.setFontFamily("Wingdings");
- r3.setText(" Version 3.8");
-
- textBox.setAnchor(new Rectangle(50, 50, 200, 100));
- textBox.setLineColor(Color.black);
- textBox.setFillColor(Color.orange);
-
- XSLFAutoShape shape2 = slide1.createAutoShape();
-
- shape2.setAnchor(new Rectangle(100, 100, 200, 200));
-
- XSLFFreeformShape shape3 = slide1.createFreeform();
- Rectangle rect = new Rectangle(150, 150, 300, 300);
- GeneralPath path = new GeneralPath(rect);
- path.append(new Ellipse2D.Double(200, 200, 100, 50), false);
- shape3.setPath(path);
- shape3.setAnchor(path.getBounds2D());
- shape3.setLineColor(Color.black);
- shape3.setFillColor(Color.lightGray);
-
- XSLFSlide slide2 = ppt.createSlide();
- XSLFGroupShape group = slide2.createGroup();
-
- group.setAnchor(new Rectangle(0, 0, 792, 612));
- group.setInteriorAnchor(new Rectangle(-10, -10, 20, 20));
-
- XSLFAutoShape shape4 = group.createAutoShape();
- shape4.setAnchor(new Rectangle(0, 0, 5, 5));
- shape4.setLineWidth(5);
- shape4.setLineColor(Color.black);
-
-
- FileOutputStream out = new FileOutputStream("xslf-demo.pptx");
- ppt.write(out);
- out.close();
- }
-
-}
diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial1.java b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial1.java
new file mode 100755
index 000000000..726013d82
--- /dev/null
+++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial1.java
@@ -0,0 +1,72 @@
+/*
+ * ====================================================================
+ * 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.xslf.usermodel;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Demonstrates how to create slides with predefined layout
+ * and fill the placeholder shapes
+ *
+ * @author Yegor Kozlov
+ */
+public class Tutorial1 {
+
+ public static void main(String[] args) throws IOException{
+ XMLSlideShow ppt = new XMLSlideShow();
+
+ // XSLFSlide#createSlide() with no arguments creates a blank slide
+ XSLFSlide blankSlide = ppt.createSlide();
+
+
+ XSLFSlideMaster master = ppt.getSlideMasters()[0];
+
+ XSLFSlideLayout layout1 = master.getLayout(SlideLayout.TITLE);
+ XSLFSlide slide1 = ppt.createSlide(layout1) ;
+ XSLFTextShape[] ph1 = slide1.getPlaceholders();
+ XSLFTextShape titlePlaceholder1 = ph1[0];
+ titlePlaceholder1.setText("This is a title");
+ XSLFTextShape subtitlePlaceholder1 = ph1[1];
+ subtitlePlaceholder1.setText("this is a subtitle");
+
+ XSLFSlideLayout layout2 = master.getLayout(SlideLayout.TITLE_AND_CONTENT);
+ XSLFSlide slide2 = ppt.createSlide(layout2) ;
+ XSLFTextShape[] ph2 = slide2.getPlaceholders();
+ XSLFTextShape titlePlaceholder2 = ph2[0];
+ titlePlaceholder2.setText("This is a title");
+ XSLFTextShape bodyPlaceholder = ph2[1];
+ // we are going to add text by paragraphs. Clear the default placehoder text before that
+ bodyPlaceholder.clearText();
+ XSLFTextParagraph p1 = bodyPlaceholder.addNewTextParagraph();
+ p1.setLevel(0);
+ p1.addNewTextRun().setText("Level1 text");
+ XSLFTextParagraph p2 = bodyPlaceholder.addNewTextParagraph();
+ p2.setLevel(1);
+ p2.addNewTextRun().setText("Level2 text");
+ XSLFTextParagraph p3 = bodyPlaceholder.addNewTextParagraph();
+ p3.setLevel(3);
+ p3.addNewTextRun().setText("Level3 text");
+
+ FileOutputStream out = new FileOutputStream("slides.pptx");
+ ppt.write(out);
+ out.close();
+ }
+}
diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial2.java b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial2.java
new file mode 100755
index 000000000..d3200755a
--- /dev/null
+++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial2.java
@@ -0,0 +1,83 @@
+/*
+ * ====================================================================
+ * 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.xslf.usermodel;
+
+import java.awt.*;
+import java.awt.geom.Rectangle2D;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Basic paragraph and text formatting
+ *
+ * @author Yegor Kozlov
+ */
+public class Tutorial2 {
+
+ public static void main(String[] args) throws IOException{
+ XMLSlideShow ppt = new XMLSlideShow();
+
+ XSLFSlide slide1 = ppt.createSlide();
+ XSLFTextBox shape1 = slide1.createTextBox();
+ // initial height of the text box is 100 pt but
+ Rectangle anchor = new Rectangle(10, 100, 300, 100);
+ shape1.setAnchor(anchor);
+
+ XSLFTextParagraph p1 = shape1.addNewTextParagraph();
+ XSLFTextRun r1 = p1.addNewTextRun();
+ r1.setText("Paragraph Formatting");
+ r1.setFontSize(24);
+ r1.setFontColor(new Color(85, 142, 213));
+
+ XSLFTextParagraph p2 = shape1.addNewTextParagraph();
+ // If spaceBefore >= 0, then space is a percentage of normal line height.
+ // If spaceBefore < 0, the absolute value of linespacing is the spacing in points
+ p2.setSpaceBefore(-20); // 20 pt from the previous paragraph
+ p2.setSpaceAfter(300); // 3 lines after the paragraph
+ XSLFTextRun r2 = p2.addNewTextRun();
+ r2.setText("Paragraph properties apply to all text residing within the corresponding paragraph.");
+ r2.setFontSize(16);
+
+ XSLFTextParagraph p3 = shape1.addNewTextParagraph();
+
+ XSLFTextRun r3 = p3.addNewTextRun();
+ r3.setText("Run Formatting");
+ r3.setFontSize(24);
+ r3.setFontColor(new Color(85, 142, 213));
+
+ XSLFTextParagraph p4 = shape1.addNewTextParagraph();
+ p4.setSpaceBefore(-20); // 20 pt from the previous paragraph
+ p4.setSpaceAfter(300); // 3 lines after the paragraph
+ XSLFTextRun r4 = p4.addNewTextRun();
+ r4.setFontSize(16);
+ r4.setText(
+ "Run level formatting is the most granular property level and allows " +
+ "for the specifying of all low level text properties. The text run is " +
+ "what all paragraphs are derived from and thus specifying various " +
+ "properties per run will allow for a diversely formatted text paragraph.");
+
+ // resize the shape to fit text
+ shape1.resizeToFitText();
+
+ FileOutputStream out = new FileOutputStream("text.pptx");
+ ppt.write(out);
+ out.close();
+ }
+}
diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial3.java b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial3.java
new file mode 100755
index 000000000..a5e01387d
--- /dev/null
+++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial3.java
@@ -0,0 +1,47 @@
+/*
+ * ====================================================================
+ * 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.xslf.usermodel;
+
+import java.awt.*;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * How to set slide title
+ *
+ * @author Yegor Kozlov
+ */
+public class Tutorial3 {
+
+ public static void main(String[] args) throws IOException{
+ XMLSlideShow ppt = new XMLSlideShow();
+
+ XSLFSlide slide = ppt.createSlide();
+
+ XSLFTextShape titleShape = slide.createTextBox();
+ titleShape.setPlaceholder(Placeholder.TITLE);
+ titleShape.setText("This is a slide title");
+ titleShape.setAnchor(new Rectangle(50, 50, 400, 100));
+
+ FileOutputStream out = new FileOutputStream("title.pptx");
+ ppt.write(out);
+ out.close();
+ }
+}
diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial4.java b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial4.java
new file mode 100755
index 000000000..ea4fba320
--- /dev/null
+++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial4.java
@@ -0,0 +1,89 @@
+/*
+ * ====================================================================
+ * 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.xslf.usermodel;
+
+import java.awt.*;
+import java.awt.geom.Rectangle2D;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * PPTX Tables
+ *
+ * @author Yegor Kozlov
+ */
+public class Tutorial4 {
+
+ public static void main(String[] args) throws IOException{
+ XMLSlideShow ppt = new XMLSlideShow();
+
+ // XSLFSlide#createSlide() with no arguments creates a blank slide
+ XSLFSlide slide = ppt.createSlide();
+
+ XSLFTable tbl = slide.createTable();
+ tbl.setAnchor(new Rectangle2D.Double(50, 50, 450, 300));
+
+ int numColumns = 3;
+ int numRows = 5;
+ XSLFTableRow headerRow = tbl.addRow();
+ headerRow.setHeight(50);
+ // header
+ for(int i = 0; i < numColumns; i++) {
+ XSLFTableCell th = headerRow.addCell();
+ XSLFTextParagraph p = th.addNewTextParagraph();
+ p.setTextAlign(TextAlign.CENTER);
+ XSLFTextRun r = p.addNewTextRun();
+ r.setText("Header " + (i+1));
+ r.setBold(true);
+ r.setFontColor(Color.white);
+ th.setFillColor(new Color(79, 129, 189));
+ th.setBorderBottom(2);
+ th.setBorderBottomColor(Color.white);
+
+ tbl.setColumnWidth(i, 150); // all columns are equally sized
+ }
+
+ // rows
+
+ for(int rownum = 0; rownum < numRows; rownum ++){
+ XSLFTableRow tr = tbl.addRow();
+ tr.setHeight(50);
+ // header
+ for(int i = 0; i < numColumns; i++) {
+ XSLFTableCell cell = tr.addCell();
+ XSLFTextParagraph p = cell.addNewTextParagraph();
+ XSLFTextRun r = p.addNewTextRun();
+
+ r.setText("Cell " + (i+1));
+ if(rownum % 2 == 0)
+ cell.setFillColor(new Color(208, 216, 232));
+ else
+ cell.setFillColor(new Color(233, 247, 244));
+
+ }
+
+ }
+
+
+ FileOutputStream out = new FileOutputStream("table.pptx");
+ ppt.write(out);
+ out.close();
+ }
+}
diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial5.java b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial5.java
new file mode 100755
index 000000000..607248a75
--- /dev/null
+++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial5.java
@@ -0,0 +1,50 @@
+/*
+ * ====================================================================
+ * 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.xslf.usermodel;
+
+import org.apache.poi.util.IOUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Images
+ *
+ * @author Yegor Kozlov
+ */
+public class Tutorial5 {
+
+ public static void main(String[] args) throws IOException{
+ XMLSlideShow ppt = new XMLSlideShow();
+
+ XSLFSlide slide = ppt.createSlide();
+ File img = new File(System.getProperty("POI.testdata.path"), "slideshow/clock.jpg");
+ byte[] data = IOUtils.toByteArray(new FileInputStream(img));
+ int pictureIndex = ppt.addPicture(data, XSLFPictureData.PICTURE_TYPE_PNG);
+
+ XSLFPictureShape shape = slide.createPicture(pictureIndex);
+
+ FileOutputStream out = new FileOutputStream("images.pptx");
+ ppt.write(out);
+ out.close();
+ }
+}
diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial6.java b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial6.java
new file mode 100755
index 000000000..fc278cbe9
--- /dev/null
+++ b/src/examples/src/org/apache/poi/xslf/usermodel/Tutorial6.java
@@ -0,0 +1,59 @@
+/*
+ * ====================================================================
+ * 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.xslf.usermodel;
+
+import java.awt.*;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Hyperlinks
+ *
+ * @author Yegor Kozlov
+ */
+public class Tutorial6 {
+
+ public static void main(String[] args) throws IOException{
+ XMLSlideShow ppt = new XMLSlideShow();
+
+ XSLFSlide slide1 = ppt.createSlide();
+ XSLFSlide slide2 = ppt.createSlide();
+
+ XSLFTextBox shape1 = slide1.createTextBox();
+ shape1.setAnchor(new Rectangle(50, 50, 200, 50));
+ XSLFTextRun r1 = shape1.addNewTextParagraph().addNewTextRun();
+ XSLFHyperlink link1 = r1.createHyperlink();
+ r1.setText("http://poi.apache.org"); // visible text
+ link1.setAddress("http://poi.apache.org"); // link address
+
+ XSLFTextBox shape2 = slide1.createTextBox();
+ shape2.setAnchor(new Rectangle(300, 50, 200, 50));
+ XSLFTextRun r2 = shape2.addNewTextParagraph().addNewTextRun();
+ XSLFHyperlink link2 = r2.createHyperlink();
+ r2.setText("Go to the second slide"); // visible text
+ link2.setAddress(slide2); // link address
+
+
+
+ FileOutputStream out = new FileOutputStream("hyperlinks.pptx");
+ ppt.write(out);
+ out.close();
+ }
+}
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
index 5cdbcef18..b22d19510 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java
@@ -19,6 +19,7 @@
package org.apache.poi.xslf.usermodel;
+import org.apache.poi.POIXMLException;
import org.apache.poi.util.Beta;
import org.apache.poi.util.Units;
import org.apache.poi.xslf.model.PropertyFetcher;
@@ -454,6 +455,24 @@ public abstract class XSLFTextShape extends XSLFSimpleShape implements Iterable<
return drawParagraphs(graphics, 0, 0);
}
+ /**
+ * Adjust the size of the shape so it encompasses the text inside it.
+ *
+ * @return a Rectangle2D that is the bounds of this TextShape.
+ */
+ public Rectangle2D resizeToFitText(){
+ Rectangle2D anchor = getAnchor();
+ if(anchor.getWidth() == 0.) throw new POIXMLException(
+ "Anchor of the shape was not set.");
+ double height = getTextHeight();
+ height += 1; // add a pixel to compensate rounding errors
+
+ anchor.setRect(anchor.getX(), anchor.getY(), anchor.getWidth(), height);
+ setAnchor(anchor);
+
+ return anchor;
+ }
+
/**
* break the contained text into lines
*/