apache-poi/content/components/slideshow/xslf-cookbook.html
2026-02-16 20:14:18 +01:00

1014 lines
37 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9">
<meta name="Forrest-skin-name" content="pelt">
<title>XSLF Cookbook</title>
<link type="text/css" href="../../skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="../../skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="../../skin/print.css" rel="stylesheet">
<link type="text/css" href="../../skin/profile.css" rel="stylesheet">
<script src="../../skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="../../skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="../../skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="../../images/favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
|breadtrail
+-->
<div class="breadtrail">
<a href="https://www.apache.org">Apache Software Foundation</a> &gt; <a href="https://poi.apache.org">Apache POI</a><script src="../../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
|header
+-->
<div class="header">
<!--+
|start group logo
+-->
<div class="grouplogo">
<a href="https://www.apache.org"><img class="logoImage" alt="Apache Software Foundation" src="../../images/asflogo_horizontal_color.svg" title="The Apache Software Foundation is a cornerstone of the modern Open Source software ecosystem &ndash; supporting some of the most widely used and important software solutions powering today's Internet economy."></a>
</div>
<!--+
|end group logo
+-->
<!--+
|start Project Logo
+-->
<div class="projectlogo">
<a href="https://poi.apache.org"><img class="logoImage" alt="Apache POI" src="../../images/project-header.png" title="Apache POI is well-known in the Java field as a library for reading and writing Microsoft Office file formats, such as Excel, PowerPoint, Word, Visio, Publisher and Outlook. It supports both the older (OLE2) and new (OOXML - Office Open XML) formats."></a>
</div>
<!--+
|end Project Logo
+-->
<!--+
|start Search
+-->
<div class="searchbox">
<form action="https://www.google.com/search" method="get" class="roundtopsmall">
<input value="poi.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp;
<input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
|end search
+-->
<!--+
|start Tabs
+-->
<ul id="tabs">
<li>
<a class="unselected" href="../../index.html">Home</a>
</li>
<li>
<a class="unselected" href="../../help/index.html">Help</a>
</li>
<li class="current">
<a class="selected" href="../../components/index.html">Component APIs</a>
</li>
<li>
<a class="unselected" href="../../devel/index.html">Getting Involved</a>
</li>
</ul>
<!--+
|end Tabs
+-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
|start Subtabs
+-->
<div id="level2tabs"></div>
<!--+
|end Endtabs
+-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
// --></script>
</div>
<!--+
|breadtrail
+-->
<div class="breadtrail">
&nbsp;
</div>
<!--+
|start Menu, mainarea
+-->
<!--+
|start Menu
+-->
<div id="menu">
<div onclick="SwitchMenu('menu_selected_1.1', '../../skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('../../skin/images/chapter_open.gif');">Component APIs</div>
<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../../components/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../apidocs/index.html">Javadocs</a>
</div>
<div onclick="SwitchMenu('menu_1.1.3', '../../skin/')" id="menu_1.1.3Title" class="menutitle">Excel (HSSF/XSSF)</div>
<div id="menu_1.1.3" class="menuitemgroup">
<div class="menuitem">
<a href="../../components/spreadsheet/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/quick-guide.html">Quick Guide</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/how-to.html">HOWTO</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/converting.html">HSSF to SS Converting</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/formula.html">Formula Support</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/eval.html">Formula Evaluation</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/eval-devguide.html">Eval Dev Guide</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/examples.html">Examples</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/use-case.html">Use Case</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/diagrams.html">Pictorial Docs</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/limitations.html">Limitations</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/user-defined-functions.html">User Defined Functions</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/excelant.html">ExcelAnt Tests</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/hacking-hssf.html">Hacking HSSF</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/record-generator.html">Record Generator</a>
</div>
<div class="menuitem">
<a href="../../components/spreadsheet/chart.html">Charts</a>
</div>
</div>
<div onclick="SwitchMenu('menu_selected_1.1.4', '../../skin/')" id="menu_selected_1.1.4Title" class="menutitle" style="background-image: url('../../skin/images/chapter_open.gif');">PowerPoint (HSLF/XSLF)</div>
<div id="menu_selected_1.1.4" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../../components/slideshow/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../components/slideshow/quick-guide.html">Quick Guide</a>
</div>
<div class="menuitem">
<a href="../../components/slideshow/how-to-shapes.html">HSLF Cookbook</a>
</div>
<div class="menupage">
<div class="menupagetitle">XSLF Cookbook</div>
</div>
<div class="menuitem">
<a href="../../components/slideshow/ppt-wmf-emf-renderer.html">Render SL/WMF/EMF</a>
</div>
<div class="menuitem">
<a href="../../components/slideshow/ppt-file-format.html">PPT File Format</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5', '../../skin/')" id="menu_1.1.5Title" class="menutitle">Word (HWPF/XWPF)</div>
<div id="menu_1.1.5" class="menuitemgroup">
<div class="menuitem">
<a href="../../components/document/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../components/document/quick-guide.html">HWPF Quick Guide</a>
</div>
<div class="menuitem">
<a href="../../components/document/quick-guide-xwpf.html">XWPF Quick Guide</a>
</div>
<div class="menuitem">
<a href="../../components/document/docoverview.html">HWPF Format</a>
</div>
<div class="menuitem">
<a href="../../components/document/projectplan.html">HWPF Project plan</a>
</div>
</div>
<div class="menuitem">
<a href="../../components/hsmf/index.html">Outlook (HSMF)</a>
</div>
<div class="menuitem">
<a href="../../components/diagram/index.html">Visio (HDGF+XDGF)</a>
</div>
<div onclick="SwitchMenu('menu_1.1.8', '../../skin/')" id="menu_1.1.8Title" class="menutitle">Publisher (HPBF)</div>
<div id="menu_1.1.8" class="menuitemgroup">
<div class="menuitem">
<a href="../../components/hpbf/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../components/hpbf/file-format.html">File Format</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.9', '../../skin/')" id="menu_1.1.9Title" class="menutitle">OLE2 Filesystem (POIFS)</div>
<div id="menu_1.1.9" class="menuitemgroup">
<div class="menuitem">
<a href="../../components/poifs/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../components/poifs/how-to.html">How To</a>
</div>
<div class="menuitem">
<a href="../../components/poifs/embeded.html">Embedded Documents</a>
</div>
<div class="menuitem">
<a href="../../components/poifs/fileformat.html">File System Documentation</a>
</div>
<div class="menuitem">
<a href="../../components/poifs/usecases.html">Use Cases</a>
</div>
<div class="menuitem">
<a href="../../components/poifs/design.html">Design</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.10', '../../skin/')" id="menu_1.1.10Title" class="menutitle">OLE2 Document Props (HPSF)</div>
<div id="menu_1.1.10" class="menuitemgroup">
<div class="menuitem">
<a href="../../components/hpsf/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../components/hpsf/how-to.html">How To</a>
</div>
<div class="menuitem">
<a href="../../components/hpsf/thumbnails.html">Thumbnails</a>
</div>
<div class="menuitem">
<a href="../../components/hpsf/internals.html">Internals</a>
</div>
<div class="menuitem">
<a href="../../components/hpsf/todo.html">To Do</a>
</div>
</div>
<div class="menuitem">
<a href="../../components/hmef/index.html">TNEF (HMEF) for winmail.dat</a>
</div>
<div class="menuitem">
<a href="../../components/oxml4j/index.html">OpenXML4J (OOXML)</a>
</div>
<div class="menuitem">
<a href="../../components/logging.html">Logging framework</a>
</div>
<div class="menuitem">
<a href="../../components/configuration.html">Configuration</a>
</div>
</div>
<div id="credit"></div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="../../skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
|alternative credits
+-->
<div id="credit2">
<a href="https://donate.apache.org/"><img border="0" title="Support Apache" alt="Support Apache - logo" src="../../images/support-asf.png" style="width: 125px;height: 125px;"></a><a href="https://www.apache.org/foundation/press/kit/#poweredby"><img border="0" title="powered by POI" alt="powered by POI - logo" src="../../images/poweredby-poi-logo.png" style="width: 125px;height: 125px;"></a>
</div>
</div>
<!--+
|end Menu
+-->
<!--+
|start content
+-->
<div id="content">
<h1>XSLF Cookbook</h1>
<div id="front-matter"></div>
<a name="XSLF+Cookbook"></a>
<h2 class="boxed">XSLF Cookbook</h2>
<div class="section">
<p>
This page offers a short introduction into the XSLF API. More examples can be found in the
<a href="https://github.com/apache/poi/tree/trunk/poi-examples/src/main/java/org/apache/poi/examples/xslf/">XSLF Examples</a>
in the POI Git repository.
</p>
<div class="note">
<div class="label">Note</div>
<div class="content">
Please note that XSLF is still in early development and is a subject to incompatible changes in a future release.
</div>
</div>
<a name="Index+of+Features"></a>
<h3 class="boxed">Index of Features</h3>
<ul>
<li>
<a href="#NewPresentation">Create a new presentation</a>
</li>
<li>
<a href="#ReadPresentation">Read an existing presentation</a>
</li>
<li>
<a href="#SlideLayout">Create a slide with a predefined layout</a>
</li>
<li>
<a href="#DeleteSlide">Delete slide</a>
</li>
<li>
<a href="#MoveSlide">Re-order slides</a>
</li>
<li>
<a href="#SlideSize">Change slide size</a>
</li>
<li>
<a href="#GetShapes">Read shapes</a>
</li>
<li>
<a href="#AddImage">Add image</a>
</li>
<li>
<a href="#ReadImages">Read images contained in a presentation</a>
</li>
<li>
<a href="#Text">Format text</a>
</li>
<li>
<a href="#Hyperlinks">Hyperlinks</a>
</li>
<li>
<a href="#PPTX2PNG">Convert .pptx slides into images</a>
</li>
<li>
<a href="#Merge">Merge multiple presentations together</a>
</li>
</ul>
<a name="Cookbook"></a>
<h3 class="boxed">Cookbook</h3>
<a name="NewPresentation" id="NewPresentation"></a><a name="New+Presentation"></a>
<h4>New Presentation</h4>
<p>
The following code creates a new .pptx slide show and adds a blank slide to it:
</p>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">//create a new empty slide show</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">//add first slide</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlide blankSlide = ppt.createSlide();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="ReadPresentation" id="ReadPresentation"></a><a name="Read+an+existing+presentation+and+append+a+slide+to+it"></a>
<h4>Read an existing presentation and append a slide to it</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">//append a new slide to the end</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlide blankSlide = ppt.createSlide();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="SlideLayout" id="SlideLayout"></a><a name="Create+a+new+slide+from+a+predefined+slide+layout"></a>
<h4>Create a new slide from a predefined slide layout</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// first see what slide layouts are available :</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">System.out.println("Available slide layouts:");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">for(XSLFSlideMaster master : ppt.getSlideMasters()){</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> for(XSLFSlideLayout layout : master.getSlideLayouts()){</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> System.out.println(layout.getType());</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> }</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">}</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// blank slide</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlide blankSlide = ppt.createSlide();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// there can be multiple masters each referencing a number of layouts</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// for demonstration purposes we use the first (default) slide master</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlideMaster defaultMaster = ppt.getSlideMasters().get(0);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// title slide</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlideLayout titleLayout = defaultMaster.getLayout(SlideLayout.TITLE);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// fill the placeholders</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlide slide1 = ppt.createSlide(titleLayout);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextShape title1 = slide1.getPlaceholder(0);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">title1.setText("First Title");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// title and content</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlideLayout titleBodyLayout = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlide slide2 = ppt.createSlide(titleBodyLayout);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextShape title2 = slide2.getPlaceholder(0);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">title2.setText("Second Title");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextShape body2 = slide2.getPlaceholder(1);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">body2.clearText(); // unset any existing text</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">body2.addNewTextParagraph().addNewTextRun().setText("First paragraph");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">body2.addNewTextParagraph().addNewTextRun().setText("Second paragraph");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">body2.addNewTextParagraph().addNewTextRun().setText("Third paragraph");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="DeleteSlide" id="DeleteSlide"></a><a name="Delete+slide"></a>
<h4>Delete slide</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">ppt.removeSlide(0); // 0-based index of a slide to be removed</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="MoveSlide" id="MoveSlide"></a><a name="Re-order+slides"></a>
<h4>Re-order slides</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">List&lt;XSLFSlide&gt; slides = ppt.getSlides();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlide thirdSlide = slides.get(2);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">ppt.setSlideOrder(thirdSlide, 0); // move the third slide to the beginning</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="SlideSize" id="SlideSize"></a><a name="How+to+retrieve+or+change+slide+size"></a>
<h4>How to retrieve or change slide size</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">//retrieve page size. Coordinates are expressed in points (72 dpi)</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">java.awt.Dimension pgsize = ppt.getPageSize();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">int pgx = pgsize.width; //slide width in points</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">int pgy = pgsize.height; //slide height in points</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">//set new page size</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">ppt.setPageSize(new java.awt.Dimension(1024, 768));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="GetShapes" id="GetShapes"></a><a name="How+to+read+shapes+contained+in+a+particular+slide"></a>
<h4>How to read shapes contained in a particular slide</h4>
<p>
The following code demonstrates how to iterate over shapes for each slide.
</p>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// get slides</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">for (XSLFSlide slide : ppt.getSlides()) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> for (XSLFShape sh : slide.getShapes()) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // name of the shape</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> String name = sh.getShapeName();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // shapes's anchor which defines the position of this shape in the slide</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> if (sh instanceof PlaceableShape) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> java.awt.geom.Rectangle2D anchor = ((PlaceableShape)sh).getAnchor();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> }</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> if (sh instanceof XSLFConnectorShape) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> XSLFConnectorShape line = (XSLFConnectorShape) sh;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // work with Line</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> } else if (sh instanceof XSLFTextShape) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> XSLFTextShape shape = (XSLFTextShape) sh;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // work with a shape that can hold text</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> } else if (sh instanceof XSLFPictureShape) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> XSLFPictureShape shape = (XSLFPictureShape) sh;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // work with Picture</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> }</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> }</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">}</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="AddImage" id="AddImage"></a><a name="Add+Image+to+Slide"></a>
<h4>Add Image to Slide</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlide slide = ppt.createSlide();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">byte[] pictureData = IOUtils.toByteArray(new FileInputStream("image.png"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFPictureData pd = ppt.addPicture(pictureData, PictureData.PictureType.PNG);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFPictureShape pic = slide.createPicture(pd);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="ReadImages" id="ReadImages"></a><a name="Read+Images+contained+within+a+presentation"></a>
<h4>Read Images contained within a presentation</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">for(XSLFPictureData data : ppt.getAllPictures()){</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> byte[] bytes = data.getData();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> String fileName = data.getFileName();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">}</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="Text" id="Text"></a><a name="Basic+text+formatting"></a>
<h4>Basic text formatting</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlide slide = ppt.createSlide();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextBox shape = slide.createTextBox();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextParagraph p = shape.addNewTextParagraph();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextRun r1 = p.addNewTextRun();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r1.setText("The");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r1.setFontColor(Color.blue);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r1.setFontSize(24.);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextRun r2 = p.addNewTextRun();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r2.setText(" quick");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r2.setFontColor(Color.red);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r2.setBold(true);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextRun r3 = p.addNewTextRun();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r3.setText(" brown");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r3.setFontSize(12.);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r3.setItalic(true);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r3.setStrikethrough(true);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextRun r4 = p.addNewTextRun();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r4.setText(" fox");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r4.setUnderline(true);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="Hyperlinks" id="Hyperlinks"></a><a name="How+to+create+a+hyperlink"></a>
<h4>How to create a hyperlink</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFSlide slide = ppt.createSlide();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// assign a hyperlink to a text run</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextBox shape = slide.createTextBox();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFTextRun r = shape.addNewTextParagraph().addNewTextRun();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">r.setText("Apache POI");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XSLFHyperlink link = r.createHyperlink();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">link.setAddress("https://poi.apache.org");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="PPTX2PNG" id="PPTX2PNG"></a><a name="PPTX2PNG+is+an+application+that+converts+each+slide+of+a+.pptx+slideshow+into+a+PNG+image"></a>
<h4>PPTX2PNG is an application that converts each slide of a .pptx slideshow into a PNG image</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">Usage: PPTX2PNG [options] &lt;pptx file&gt;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">Options:</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> -scale &lt;float&gt; scale factor (default is 1.0)</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> -slide &lt;integer&gt; 1-based index of a slide to render. Default is to render all slides.</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<p>How it works:</p>
<p>
The XSLFSlide object implements a draw(Graphics2D graphics) method that recursively paints all shapes
in the slide into the supplied graphics canvas:
</p>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">slide.draw(graphics);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<p>
where graphics is a class implementing java.awt.Graphics2D. In PPTX2PNG the graphic canvas is derived from
java.awt.image.BufferedImage, i.e. the destination is an image in memory, but in general case you can pass
any compliant implementation of java.awt.Graphics2D.
Find more information in the designated <a href="../../components/slideshow/ppt-wmf-emf-renderer.html">render page</a>, e.g. on how to render SVG images.
</p>
<a name="Merge" id="Merge"></a><a name="Merge+multiple+presentations+together"></a>
<h4>Merge multiple presentations together</h4>
<div class="code">
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">XMLSlideShow ppt = new XMLSlideShow();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">String[] inputs = {"presentations1.pptx", "presentation2.pptx"};</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">for(String arg : inputs){</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> FileInputStream is = new FileInputStream(arg);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> XMLSlideShow src = new XMLSlideShow(is);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> is.close();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> for(XSLFSlide srcSlide : src.getSlides()){</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> ppt.createSlide().importContent(srcSlide);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> }</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">}</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">FileOutputStream out = new FileOutputStream("merged.pptx");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">ppt.write(out);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">out.close();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
</div>
<p align="right">
<font size="-2">by&nbsp;Yegor Kozlov</font>
</p>
</div>
<!--+
|end content
+-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
|start bottomstrip
+-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
// --></script>
</div>
<div class="copyright">
Copyright &copy;
2001-2026 <a href="https://www.apache.org/">The Apache Software Foundation</a>
<br>
Apache POI, POI, Apache, the Apache logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</div>
<div id="feedback">
Send feedback about the website to:
<a id="feedbackto" href="mailto:dev@poi.apache.org?subject=Feedback%C2%A0components/slideshow/xslf-cookbook.html">dev@poi.apache.org</a>
</div>
<!--+
|end bottomstrip
+-->
</div>
</body>
</html>