java poi ppt操作示例

poi3.9版本,官网 http://poi.apache.org/slideshow/how-to-shapes.html

import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.AutoShape;
import org.apache.poi.hslf.model.Fill;
import org.apache.poi.hslf.model.Freeform;
import org.apache.poi.hslf.model.HeadersFooters;
import org.apache.poi.hslf.model.Hyperlink;
import org.apache.poi.hslf.model.Line;
import org.apache.poi.hslf.model.Picture;
import org.apache.poi.hslf.model.Shape;
import org.apache.poi.hslf.model.ShapeTypes;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.SlideMaster;
import org.apache.poi.hslf.model.Table;
import org.apache.poi.hslf.model.TableCell;
import org.apache.poi.hslf.model.TextBox;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.usermodel.PictureData;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hslf.usermodel.SoundData;

public class PPTParseUtil {
    public static void main(String[] args) throws IOException {
        SlideShow ppt = new SlideShow();

        // 设置标题,底部信息
        // presentation-scope headers / footers
        HeadersFooters hdd = ppt.getSlideHeadersFooters();
        hdd.setSlideNumberVisible(true);
        hdd.setFootersText("Created by POI-HSLF");

        // add first slide
        Slide s1 = ppt.createSlide();

        // add second slide
        Slide s2 = ppt.createSlide();
        // retrieve page size. Coordinates are expressed in points (72 dpi)
        java.awt.Dimension pgsize = ppt.getPageSize();
        int pgx = pgsize.width; // slide width
        int pgy = pgsize.height; // slide height

        // set new page size
        ppt.setPageSize(new java.awt.Dimension(1024, 768));
        // save changes
        FileOutputStream out = new FileOutputStream("E:\\logs\\slideshow.ppt");

        // get slides
        Slide[] slide = ppt.getSlides();
        for (int i = 0; i < slide.length; i++) {
            Shape[] sh = slide[i].getShapes();
            for (int j = 0; j < sh.length; j++) {
                // name of the shape
                String name = sh[j].getShapeName();

                // shapes‘s anchor which defines the position of this shape in
                // the slide
                java.awt.Rectangle anchor = sh[j].getAnchor();

                if (sh[j] instanceof Line) {
                    Line line = (Line) sh[j];
                    // work with Line
                } else if (sh[j] instanceof AutoShape) {
                    AutoShape shape = (AutoShape) sh[j];
                    // work with AutoShape
                } else if (sh[j] instanceof TextBox) {
                    TextBox shape = (TextBox) sh[j];
                    // work with TextBox
                } else if (sh[j] instanceof Picture) {
                    Picture shape = (Picture) sh[j];
                    // work with Picture
                }
            }
        }

        // Drawing a shape on a slide
        Slide slide2 = ppt.createSlide();

        // set slide title
        TextBox title = slide2.addTitle();
        title.setText("Hello, World!");
        // Line shape
        Line line = new Line();
        line.setAnchor(new java.awt.Rectangle(50, 50, 100, 20));
        line.setLineColor(new Color(0, 128, 0));
        line.setLineStyle(Line.LINE_DOUBLE);
        slide2.addShape(line);

        // TextBox
        TextBox txt = new TextBox();
        txt.setText("Hello, World!");
        txt.setAnchor(new java.awt.Rectangle(300, 100, 300, 50));

        // use RichTextRun to work with the text format
        RichTextRun rt = txt.getTextRun().getRichTextRuns()[0];
        rt.setFontSize(32);
        rt.setFontName("Arial");
        rt.setBold(true);
        rt.setItalic(true);
        rt.setUnderlined(true);
        rt.setFontColor(Color.red);
        rt.setAlignment(TextBox.AlignRight);

        slide2.addShape(txt);

        // create shapes of arbitrary geometry
        java.awt.geom.GeneralPath path = new java.awt.geom.GeneralPath();
        path.moveTo(100, 100);
        path.lineTo(200, 100);
        path.curveTo(50, 45, 134, 22, 78, 133);
        path.curveTo(10, 45, 134, 56, 78, 100);
        path.lineTo(100, 200);
        path.closePath();

        Freeform shape = new Freeform();
        shape.setPath(path);
        slide2.addShape(shape);

        // Autoshape
        // 32-point star
        AutoShape sh1 = new AutoShape(ShapeTypes.Star32);
        sh1.setAnchor(new java.awt.Rectangle(50, 50, 100, 200));
        sh1.setFillColor(Color.red);
        slide2.addShape(sh1);

        // Trapezoid
        AutoShape sh2 = new AutoShape(ShapeTypes.Trapezoid);
        sh2.setAnchor(new java.awt.Rectangle(150, 150, 100, 200));
        sh2.setFillColor(Color.blue);
        slide2.addShape(sh2);

        // work with pictures
        // extract all pictures contained in the presentation
        PictureData[] pdata = ppt.getPictureData();
        for (int ii = 0; ii < pdata.length; ii++) {
            PictureData pict = pdata[ii];

            // picture data
            byte[] data = pict.getData();

            int type = pict.getType();
            String ext;
            switch (type) {
            case Picture.JPEG:
                ext = ".jpg";
                break;
            case Picture.PNG:
                ext = ".png";
                break;
            case Picture.WMF:
                ext = ".wmf";
                break;
            case Picture.EMF:
                ext = ".emf";
                break;
            case Picture.PICT:
                ext = ".pict";
                break;
            default:
                continue;
            }
            FileOutputStream out2 = new FileOutputStream("pict_" + ii + ext);
            out2.write(data);
            out2.close();

        }

        // add a new picture to this slideshow and insert it in a new slide
        int idx = ppt.addPicture(new File("E:\\logs\\clock.png"), Picture.PNG);

        Picture pict = new Picture(idx);

        // set image position in the slide
        pict.setAnchor(new java.awt.Rectangle(100, 100, 300, 200));

        Slide slide3 = ppt.createSlide();
        slide3.addShape(pict);

        // This slide has its own background.
        // Without this line it will use master‘s background.
        slide3.setFollowMasterBackground(false);
        Fill fill = slide3.getBackground().getFill();
        int idx1 = ppt.addPicture(new File("E:\\logs\\clock.png"), Picture.PNG);
        fill.setFillType(Fill.FILL_PATTERN);
        fill.setPictureData(idx1);

        // create bulleted lists

        TextBox shape1 = new TextBox();
        RichTextRun rt1 = shape1.getTextRun().getRichTextRuns()[0];
        shape1.setText("January\r" + "February\r" + "March\r" + "April");
        rt1.setFontSize(42);
        rt1.setBullet(true);
        rt1.setBulletOffset(0); // bullet offset
        rt1.setTextOffset(50); // text offset (should be greater than bullet
                                // offset)
        rt1.setBulletChar(‘\u263A‘); // bullet character
        slide3.addShape(shape1);

        shape1.setAnchor(new java.awt.Rectangle(50, 50, 500, 300)); // position
                                                                    // of the
                                                                    // text box
                                                                    // in the
                                                                    // slide
        slide3.addShape(shape1);

        // now retrieve pictures containes in the first slide and save them on
        // disk
        slide3 = ppt.getSlides()[0];
        Shape[] sh3 = slide3.getShapes();
        for (int i2 = 0; i2 < sh3.length; i2++) {
            if (sh3[i2] instanceof Picture) {
                Picture pict1 = (Picture) sh3[i2];
                PictureData pictData = pict1.getPictureData();
                byte[] data = pictData.getData();
                int type = pictData.getType();
                if (type == Picture.JPEG) {
                    FileOutputStream out3 = new FileOutputStream("slide0_" + i2
                            + ".jpg");
                    out3.write(data);
                    out3.close();
                } else if (type == Picture.PNG) {
                    FileOutputStream out4 = new FileOutputStream("slide0_" + i2
                            + ".png");
                    out4.write(data);
                    out4.close();
                }
            }
        }

        // modify background of a slide master
        SlideMaster master = ppt.getSlidesMasters()[0];

        Fill fill1 = master.getBackground().getFill();
        int idx11 = ppt
                .addPicture(new File("E:\\logs\\clock.png"), Picture.PNG);
        fill1.setFillType(Fill.FILL_PICTURE);
        fill1.setPictureData(idx11);

        // read hyperlinks from a slide show
        Slide[] slide1 = ppt.getSlides();
        for (int j = 0; j < slide1.length; j++) {

            // read hyperlinks from the text runs
            TextRun[] txt1 = slide1[j].getTextRuns();
            if (txt1 == null || txt1.length == 0) {
                continue;
            }
            for (int k = 0; k < txt1.length; k++) {
                String text = txt1[k].getText();
                Hyperlink[] links = txt1[k].getHyperlinks();
                if (links != null)
                    for (int l = 0; l < links.length; l++) {
                        Hyperlink link = links[l];
                        String title1 = link.getTitle();
                        String address = link.getAddress();
                        String substring = text.substring(link.getStartIndex(),
                                link.getEndIndex() - 1); // in ppt end index is
                                                            // inclusive
                        System.out.println(title1 + address + substring);
                    }
            }

            // in PowerPoint you can assign a hyperlink to a shape without text,
            // for example to a Line object. The code below demonstrates how to
            // read such hyperlinks
            Shape[] sh = slide1[j].getShapes();
            for (int k = 0; k < sh.length; k++) {
                Hyperlink link = sh[k].getHyperlink();
                if (link != null) {
                    String title1 = link.getTitle();
                    String address = link.getAddress();
                    System.out.println(title1 + address);
                }
            }
        }

        // table data
        String[][] data = { { "INPUT FILE", "NUMBER OF RECORDS" },
                { "Item File", "11,559" }, { "Vendor File", "300" },
                { "Purchase History File", "10,000" },
                { "Total # of requisitions", "10,200,038" } };

        // 创建表格
        Slide slide11 = ppt.createSlide();
        // create a table of 5 rows and 2 columns
        Table table = new Table(5, 2);
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                TableCell cell = table.getCell(i, j);
                cell.setText(data[i][j]);

                RichTextRun rt11 = cell.getTextRun().getRichTextRuns()[0];
                rt11.setFontName("Arial");
                rt11.setFontSize(10);

                cell.setVerticalAlignment(TextBox.AnchorMiddle);
                cell.setHorizontalAlignment(TextBox.AlignCenter);
            }
        }

        // set table borders
        Line border = table.createBorder();
        border.setLineColor(Color.black);
        border.setLineWidth(1.0);
        table.setAllBorders(border);

        // set width of the 1st column
        table.setColumnWidth(0, 300);
        // set width of the 2nd column
        table.setColumnWidth(1, 150);

        slide11.addShape(table);
        table.moveTo(100, 100);

        // retrieve embedded sounds 获取语音信息
        SoundData[] sound = ppt.getSoundData();
        for (int i = 0; i < sound.length; i++) {
            // save *WAV sounds on disk
            if (sound[i].getSoundType().equals(".WAV")) {
                FileOutputStream out1 = new FileOutputStream(
                        sound[i].getSoundName());
                out1.write(sound[i].getData());
                out1.close();
            }
        }

        ppt.write(out);
        out.close();
    }
}

本文转自:http://blog.csdn.net/zhongweijian/article/details/8299531

时间: 2024-11-05 15:54:05

java poi ppt操作示例的相关文章

java目录相关操作 示例代码

package org.rui.io; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; /** * 目录列表器 测试 * * @author lenovo * */ //Args:"C:/Users/lenovo/Pictures/screen/*\.jpg" public class DirList { public

java poi ppt 接口的基本操作

依赖 在 pom.xml中增加以下依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.1</version> </dependency> 注:很多博客,教我们用以下依赖,是没有XSSF相关内容的 <dependency> <groupId>org

java poi excel操作 下拉菜单 及数据有效性

1 private InputStream updateTemplateStyleHSSF(InputStream inputStream,CsCustCon csCustCon) throws IOException, DAOException{ 2 HSSFWorkbook workbook = new HSSFWorkbook(inputStream); 3 HSSFSheet firstSheet= workbook.getSheetAt(0); 4 List<String> strL

Java日期时间操作源码示例大全

在研发闲暇时间,将开发过程比较重要的一些代码段做个记录,如下代码内容是关于Java日期时间操作示例大全的代码,应该是对小伙伴们有所用途. 日期类 import java.util.Calendar; public class VeDate { public static Date getNowDate() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd H

java 线程 原子类相关操作示例 thinking in java4 目录21.3.4

java 线程  原子类相关操作示例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; /** * 原子类,

Java开发中使用POI库操作Excel

首先,我们要重点说明一下Excel的两中不同的格式,这个直接影响到我们在使用POI操作Excel的方式.一定要先明确你要操作的Excel所使用的版本,切记! 1,Excel的两种格式区别 a),*.xls文件是使用Microsoft Excel 2003或之前版本保存的电子表格,使用的存储格式为BIFF (Binary Interchange File Format),一种特殊的二进制格式文件. b)*.xlsx文件是使用Microsoft Office 2007 或后续版本保存的电子表格,使用

java poi操作excel 添加 锁定单元格保护

Excel的book保护是很常用的,主要是不想让别人修改Excel的时候用.这样能够避免恶意随便修改数据,提高数据的可信度. 下面介绍JAVA POI来实现设置book保护: 使用HSSFSheet类的protectSheet(password)方法就可以了. 具体代码如下: package com.util; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFCell; import org.ap

Apache POI组件操作Excel,制作报表(一)

Apache的POI组件是Java操作Microsoft Office办公套件的强大API,其中对Word,Excel和PowperPoint都有支持,当然使用较多的还是Excel,因为Word和PowerPoint用程序动态操作的应用较少.那么本文就结合POI来介绍一下操作Excel的方法.    Office 2007的文件结构完全不同于2003,所以对于两个版本的Office组件,POI有不同的处理API,分开使用即可.首先来说几个Excel的基本概念.对于一个Excel文件,这称为一个工

java:POI导出excel

POI是一个开源项目,专用于java平台上操作MS OFFICE,企业应用开发中可用它方便导出Excel. 下面是使用示例: 1.maven中先添加依赖项 1 <dependency> 2 <groupId>org.apache.poi</groupId> 3 <artifactId>poi</artifactId> 4 <version>3.11</version> 5 </dependency> 2.最基本