1、导出ppt 必要的包

使用maven

 <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.1</version>
</dependency>

2、poi-ooxml-schemas 和 ooxml-schemas 的区别

http://blog.sina.com.cn/s/blog_801b121d0102x3fa.html

3、应用

3.1、表格操作

 public void parsing(XSLFSlide slide, XSLFTable table) {
//for循环增加数据,忽略标题行
List<XSLFTableRow> tableRow = table.getRows();
List<XSLFTableCell> cells = tableRow.get(1).getCells(); while(table.getRows().size()<tableData.getRows()){
XSLFTableRow row = table.addRow();
for (int i1 = 0; i1 < cells.size(); i1++) {
row.addCell(); } } for (int i = 0; i < tableData.getRows(); i++) {
for (int i1 = 0; i1 < tableData.get(i).size(); i1++) {
String key = tableData.get(i).get(i1);
if(table.getRows().get(i + 1).getCells().size()<i1+1){
table.getRows().get(i + 1).addCell();
}
table.getRows().get(i + 1).getCells().get(i1).setText(key);
}
} }

 

3.2、替换图片操作

  插入图片自己查资料,这里不提

  这里只说读取模板ppt,并替换特定区域成图片。

if(shape[i] instanceof XSLFAutoShape){
XSLFAutoShape txShape = (XSLFAutoShape) shape[i];
if (txShape.getText().contains("{pic}")) {
byte[] pictureData = new byte[0];
try {
if(imageIndex>inputStreamList.size()-1){
continue;
}
pictureData = IOUtils.toByteArray(inputStreamList.get(imageIndex++));
} catch (IOException e) {
e.printStackTrace();
}
int idx = slide.getSlideShow().addPicture(pictureData, XSLFPictureData.PICTURE_TYPE_PNG);
XSLFPictureShape pic = slide.createPicture(idx);
// 设置XSLFPictureShape的位置信息
pic.setAnchor(txShape.getAnchor());
// 移除XSLFTextShape
slide.removeShape(txShape);
}

其中 imageIndex 表示我图片流的位置,因为我兼容多张图片替换,所以根据查找到的图形的,依次替换。

XSLFAutoShape 表示,图形图片,例如以下我使用的图片,中间{pic}表示我要替换成图片的意思,详细看代码。

3.3、文本操作(略过)

4、问题汇总

  4.1、表格 setText  失败问题

    可能是因为 poi-ooxml-schemas.jar 包,出现bug 的问题。4.0版本以下poi-ooxml-schemas都出现setText 失败问题。4.0版本以上 可能是修复好了。

    4.1.1、解决方案有两种:

      ① 使用poi-ooxml-schemas 4.0以上版本

      ② 使用ooxml-schemas 版本,移除 poi-ooxml-schemas 版本 ,两个区别可以参考 第2标题。

  4.2、读取*.ppt失败

    XMLSlideShow slideShow = new XMLSlideShow(); //只支持读取pptx 文件。

4.3、关于setText 后文字样式失效问题

    解决方法:可以使用 把他转成xmlString ,并修改,修改后并重新set 进去

 private void setTextBox(XSLFTextBox textbox) {

        String xml = textbox.getXmlObject().xmlText();
// 使用freemarker 把xml的${...}数据替换,并返回替换后数据
String tx =parsingText(xml,data);
CTTableCell ctTableCell = null;
try {
//重新把xml set进去该tablecell
ctTableCell = CTTableCell.Factory.parse(tx);
textbox.getXmlObject().set(ctTableCell);
} catch (XmlException e) {
e.printStackTrace();
} }

5、文档资料

  [poi 官网] http://poi.apache.org/

  [poi 操作office说明] http://poi.apache.org/components/index.html

 [git项目]:https://code.aliyun.com/1003771635/document.git

  在子项目 pptXSLF 中。

6、个人说明

  如果你们发现其他问题或者解决方法,可以在评论区里提出。

关于java使用POI导出ppt ,其中表格setText 失败问题的更多相关文章

  1. java使用poi读取ppt文件和poi读取excel、word示例

    java使用poi读取ppt文件和poi读取excel.word示例 http://www.jb51.net/article/48092.htm

  2. Java之POI导出Excel(一):单sheet

    相信在大部分的web项目中都会有导出导入Excel的需求,今天我们就来看看如何用Java代码去实现 用POI导出Excel表格. 一.pom引用 pom文件中,添加以下依赖 查看代码  <!-- ...

  3. java利用poi来读取execl表格返回对象

    利用poi来读取execl表格,返回一个对象(可能有点不完善,但是应该能满足平常的所用),用到了反射等等; 使用的jar包有: commons-collections4-4.1.jar poi-3.1 ...

  4. java 使用POI导出百万级数据

    先看结果吧,这只是测试其中有很多因数影响了性能. 表总数为:7千多万,测试导出100万 表字段有17个字段 最终excel大小有60多兆 总耗时:126165毫秒 差不多2分多钟 其核心简单来说就是分 ...

  5. java解决poi导出excel文字水印,导出excel不可操作问题

    首先需求是用户提出导出excel数据需使用水印备注其用途: 其实就是在导出excel的同时带有自定义文字水印的导出. 那么我们首先想到的肯定是以一个什么样的思路去解决该问题,首先查找poi导出exce ...

  6. java使用poi导出excel

    继上一篇导出pdf,这篇导出excel. 1.导入依赖 <dependency> <groupId>org.apache.poi</groupId> <art ...

  7. Java使用POI导出excel(下)——实例与小技巧

    [更新]:thinkgem的导出工具类: /** * Copyright © 2012-2016 <a href="https://github.com/thinkgem/jeesit ...

  8. POI导出PPT

    1.null <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <g ...

  9. JAVA 使用POI导出数据格式为Execl

    需要下载一个poi的jar包. 控制器 @Override public void getContractListExecl(Contract contract, BindingResult resu ...

随机推荐

  1. 天融信防火墙NGFW4000,无法进入web管理和community属性查看

    1.system config save  //配置保存 2.system config reset //清除配置(恢复出厂设置) 3.pf service add name webui area a ...

  2. 20164301 Exp2 后门原理与实践

    Exp2 后门原理与实践 1.实验内容  (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterprete ...

  3. Intel:从屌丝逆袭成业界大佬

    原创文章,转载请标明出处哈,Thanks♪(・ω・)ノ. 参考<Linux内核情景分析><深入理解计算机系统><深入理解linux内核><Orange'S:一 ...

  4. 爬取网络图片到C盘存储的PermissionError: [Errno 13] Permission denied

    C盘根目录下不能拷进去文件,但可以新建文件夹的,“发生错误,操作被阻止,客户端没有所需的特权. 因为是系统目录,不要在里面拷贝文件,最好建立一个目录再放在里面. 硬要拷贝的话,可以使用管理员权限打开e ...

  5. java8_api_math

    java.math包    BigDecimal    BigInteger    MathContext    RoundingMode这是枚举        BigDecimal        不 ...

  6. 18.11 ROM、RAM、DRAM、SRAM和FLASH区别

    ROM(Read Only Memory)和RAM(Random Access Memory)指的都是半导体存储器.ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,但 ...

  7. java自动更新问题

    第一次运行公司erp,打开的是jnlp文件,在弹出的第一个框上,同事点了更新java,后面悲剧了,再也没有办法打开erp了,直接跳到java官网上要求更新,而erp在java8上有一些功能不兼容,所以 ...

  8. operator用法:隐式类型转换

    operator它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换). 1.操作符重载C++可以通过operator实现重 ...

  9. [ZZ] 用matlab绘制箭头

    用matlab绘制箭头 http://npfeng900.blog.163.com/blog/static/14456108201221922944998/ 用matlab绘制箭头1 用matlab绘 ...

  10. HTML5播放RTSP,H5播放RTSP,解决方案源码,基于海康网络摄像头

    视频是用的海康网络摄像头(支持RTSP,标准H.264 RTP封装的设备),可以通过 rtsp://admin:1008@192.0.0.64:81/h264/ch1/main/av_stream   ...