poi生成pptx文件以及背景颜色或者背景图片的设置

您所在的位置:网站首页 幻灯片模板背景透明度 poi生成pptx文件以及背景颜色或者背景图片的设置

poi生成pptx文件以及背景颜色或者背景图片的设置

2024-05-25 05:11| 来源: 网络整理| 查看: 265

最近由于工作中需要使用poi生成对应的pptx文件,就对照api文档进行研究了一下,api文档也是英文版的,很多东西感觉描述的不是那么清晰,比较耗费精力。在此分享一下生成方法以及一点问题的解决。其实在生成pptx文件的时候可以直接生成pptx文件,也可以设置模版,继承模版的一些设置,图片以及表格等信息进行文档生成,比较快捷,本次主要介绍在模版基础上生成文件的方式。

一:引入jar包 poi poi 3.11 poi geronimo-stax-api_1.0_spec 3.7.0 poi poi-examples 3.11 poi poi-ooxml 3.11 poi poi-ooxml-schemas 3.11 poi poi-scratchpad 3.11 poi xmlbeans 2.6.0

本次引入的poi包为3.11版本

二:继承文件模版 1.首先创建一个模版文件放在项目的下 2.其次读取模版文件生成最终需要的pptx文件 String path = request.getSession().getServletContext().getRealPath("/"); //创建一个ppt文件 String filmDress1=propertiesBean.getFilePath()+"temp//ppp.pptx"; File file=new File(filmDress1); if(!file.exists()) { file.createNewFile(); } String filmDress=path+"//xxx.pptx"; FileInputStream inputstream =new FileInputStream(new File(filmDress)); XMLSlideShow ppt = new XMLSlideShow(inputstream); 三.生成ppt XMLSlideShow tmpppt = new XMLSlideShow(); XMLSlideShow endppt = new XMLSlideShow(); XSLFSlide[] arr = ppt.getSlides(); //第一张幻灯片 { tmpppt.createSlide().importContent(arr[0]); XSLFSlide[] arr1 =tmpppt.getSlides(); XSLFShape[] runs=arr1[0].getShapes(); XSLFTextBox txtbox = (XSLFTextBox) runs[2]; List paragraph = txtbox.getTextParagraphs(); if(paragraph!=null && paragraph.size()>0){ XSLFTextRun run = paragraph.get(0).addNewTextRun(); run.setText("XXXXX"); run.setFontColor(java.awt.Color.black); run.setFontFamily("经典综艺体简"); run.setFontSize(66); run.setBold(true); } endppt.createSlide().importContent(tmpppt.getSlides()[0]); tmpppt.removeSlide(0); }

如此就会文件就会创建一个一个幻灯片的文件,幻灯片中的字体,内容已经字体代谢奥,颜色都可以进行设置

生成表格:

{ tmpppt.createSlide().importContent(arr[1]); //查询生产周报信息 //table的表头 //通过pid查询当前周所跨越的时间 XSLFSlide[] arr2 =tmpppt.getSlides(); XSLFShape[] runs2=arr2[0].getShapes(); XSLFTable table = (XSLFTable) runs2[2]; List rows = table.getRows(); { String biaotou ="表头"; XSLFTextBox txtbox = (XSLFTextBox) runs2[4]; List paragraph2 = txtbox.getTextParagraphs(); if(paragraph2!=null && paragraph2.size()>0){ paragraph2.get(0).setTextAlign(TextAlign.CENTER); XSLFTextRun run = paragraph2.get(0).addNewTextRun(); run.setText(biaotou); run.setFontColor(java.awt.Color.black); run.setFontFamily("宋体"); run.setFontSize(28); run.setBold(true); } } int i=0; List list = 数据list; if(list!=null && list.size()>0){ for(Object tmplist:list){ //if(i!=0){ table.addRow(); rows = table.getRows(); for(int k=0;k0){ paragraph2.get(0).setTextAlign(TextAlign.CENTER); XSLFTextRun run = paragraph2.get(0).addNewTextRun(); run.setText(obj[j]!=null?obj[j].toString():""); run.setFontColor(java.awt.Color.black); run.setFontFamily("宋体"); run.setFontSize(16); } j++; } i++; } } } endppt.createSlide().importContent(tmpppt.getSlides()[0]); tmpppt.removeSlide(0); }

XSLFTable table = (XSLFTable) runs2[2];获取不同的table List rows = table.getRows();取得table的行集合

List cells = rows.get(0).getCells();取得行的每一个列,也就是单元格

这样就会生成对应的表,表头是继承与原模版的,只需要在对应的位置增加行列填入数据即可,其他还有图片的生成方法,在这里就不介绍了,每张幻灯片都是可以加入图片,表格以及文字等的。

四:问题以及解决

遇到的最大的问题就是生成的幻灯片的背景都是白色的,尝试了几种方式都有问题:

第一种:设置背景颜色:

XSLFShape.getBackground().setFillColor(Color.red );

但是这样会报错,在setFillColor方法中调用CTShapeProperties初始化的方法报错,好像是缺失社么shape,但是具体的也没找到原因,网络上也有遇到这样的问题的,但是没有解决方案参考,由于时间彼表赶就放弃了

第二种:在模版中设置背景颜色和背景图片填充颜色

这种方式不是在新的pptx中继承,所以还是白色的背景

第三种:引入图片在幻灯片中做背景图片

这种方式会将图片置于最上端,覆盖幻灯片的东西

解决:

最终我在模版中设置引入图片,然后将图片置底看似背景,然后生成的pptx 文件中有引入这个图片控件,就可以使用。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3