POI操作ppt,合并,转图片

news/2024/5/18 7:05:02

 

引入POI

compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.0' 
compile group: 'batik', name: 'batik-bridge', version: '1.6-1' 
compile group: 'org.apache.xmlgraphics', name: 'batik-anim', version: '1.11'

 

/**
 * https://www.w3cschool.cn/apache_poi_ppt/apache_poi_ppt_to_image.html
 */
@Test
public void testMerge() throws Exception{
    String file1 = "E:\\pptmerge\\x1.pptx";
    String file2 = "E:\\pptmerge\\x2.pptx";

    FileInputStream is = new FileInputStream(file1);
    XMLSlideShow src = new XMLSlideShow(is);
    is.close();
    FileInputStream is2 = new FileInputStream(file2);
    XMLSlideShow src2 = new XMLSlideShow(is2);
    is2.close();

    XMLSlideShow ppt = new XMLSlideShow();
    for (XSLFSlide slide : src.getSlides()) {
        XSLFSlide slide1 = ppt.createSlide(slide.getSlideLayout());
        slide1.importContent(slide);
    }
    for (XSLFSlide slide : src2.getSlides()) {
        XSLFSlide slide1 = ppt.createSlide(slide.getSlideLayout());
        slide1.importContent(slide);
    }

    FileOutputStream out = new FileOutputStream("E:\\pptmerge\\merged2.pptx");
    ppt.write(out);
    out.close();
    System.out.println("merge successfully");
}
@Test
public void testPic() throws Exception{
    BufferedImage img = new BufferedImage(100, 100,BufferedImage.TYPE_INT_RGB);
    img.createGraphics().draw3DRect(0,0,120,100,true);
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ImageIO.write(img,"png",out);

    XMLSlideShow ppt = new XMLSlideShow();
    XSLFSlide slide = ppt.createSlide();
    XSLFPictureData pictureData = ppt.addPicture(out.toByteArray(), XSLFPictureData.PictureType.PNG);
    XSLFPictureShape picture = slide.createPicture(pictureData);

    File file=new File("E:\\pptmerge\\pic.pptx");
    FileOutputStream outppt = new FileOutputStream(file);

    //saving the changes to a file
    ppt.write(outppt);
    out.close();
    System.out.println("image successfully");
}

@Test
public void testCreatePicFromPPT() throws Exception{
    //creating an empty presentation
    File file=new File("E:\\pptmerge\\ppt.pptx");
    XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

    //getting the dimensions and size of the slide
    Dimension pgsize = ppt.getPageSize();
    List<XSLFSlide> slides = ppt.getSlides();

    XMLSlideShow pptout = new XMLSlideShow();

    for (int i = 0; i < slides.size(); i++) {
        XSLFSlide xslfShapes = slides.get(i);
        BufferedImage img = new BufferedImage(pgsize.width, pgsize.height,BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = img.createGraphics();

        //clear the drawing area
        //graphics.setPaint(Color.white);
        //graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));

        //render
        xslfShapes.draw(graphics);

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ImageIO.write(img,"png",out);

        XSLFSlide slide = pptout.createSlide();
        XSLFPictureData pictureData = pptout.addPicture(out.toByteArray(), XSLFPictureData.PictureType.PNG);
        XSLFPictureShape picture = slide.createPicture(pictureData);
    }

    //creating an image file as output
    FileOutputStream out = new FileOutputStream("E:\\pptmerge\\testCreatePicFromPPT.pptx");
    pptout.write(out);

    out.close();
    System.out.println("Image successfully created");
}

http://www.niftyadmin.cn/n/3568784.html

相关文章

读书笔记 effective c++ Item 10 让赋值运算符返回指向*this的引用

一个关于赋值的有趣的事情是你可以将它们链在一起&#xff1a; 1 int x, y, z; 2 3 x y z 15; // chain of assignments 同样有趣的是赋值采用右结合律&#xff0c;所以上面的赋值链被解析成下面这个样子&#xff1a; 1 x (y (z 15)); 在这里&#xff0c;15被赋值给z,然…

IDEA 使用方法快捷键

CtrlShift Enter&#xff0c;语句完成“&#xff01;”&#xff0c;否定完成&#xff0c;输入表达式时按 “&#xff01;”键CtrlE&#xff0c;最近的文件CtrlShiftE&#xff0c;最近更改的文件ShiftClick&#xff0c;可以关闭文件Ctrl[ OR ]&#xff0c;可以跑到大括号的开头…

微信小程序自定义数据分析试水

昨晚收到小程序自定义分析的内测邀请&#xff0c;简单试用了一下。说明挺长的&#xff0c;大概是这个意思&#xff1a; 一、定义一系列事件&#xff0c;对其进行统计 事件可以对页面中的这些事件进行追踪 click enterPage leavePage pageLoad pageUnload pullDownRefresh launc…

乡愁 余光中

小时候 乡愁是一枚小小的邮票 我在这头 母亲在那头 长大后 乡愁是一张窄窄的船票 我在这头 新娘在那头 后来啊 乡愁是一方矮矮的坟墓 我在外头 母亲在里头 而现在 乡愁是一湾浅浅的海峡 我在这头 大陆在那头

基于Jenkins+Git+Gradle实现自动打包部署

下载地址&#xff1a;https://jenkins.io/zh/download/ jenkins依赖Java&#xff0c;所以首先配置好java环境。建议下载 xxx.war,使用java -jar的方式来启动&#xff0c;其中java -jar可以写到脚本中&#xff0c;做到一键启动。 jenkins的默认配置和工作目录运行在~/.jenkins…

再别康桥 徐志摩

轻轻的我走了&#xff0c;正如我轻轻的来&#xff1b; 我轻轻的招手&#xff0c;作别西天的云彩。 那河畔的金柳&#xff0c;是夕阳中的新娘&#xff1b; 波光里的艳影&#xff0c;在我的心头荡漾。 软泥上的青荇&#xff0c;油油的在水底招摇&#xff1b; 在康河的柔波里…

服务端参数校验(一):校验工具

项目参见&#xff1a; https://gitee.com/xxssyyyyssxx/validation compile "top.jfunc.validation:validation-core:1.0.1" compile "top.jfunc.validation:validation-spring:1.0.1" all input is evil&#xff01;&#xff01; 服务端参数校验是保证…

服务端参数校验(二):SpringMVC项目的参数校验

项目参见&#xff1a; https://gitee.com/xxssyyyyssxx/validation compile "top.jfunc.validation:validation-core:1.0.1" compile "top.jfunc.validation:validation-spring:1.0.1" 上文提供了参数校验工具&#xff0c;但是如果我们把参数校验跟正常…