Apache POI操作PPT: 文字替换 图片替换 表格填充 PPT合并

您所在的位置:网站首页 用ppt合并图片 Apache POI操作PPT: 文字替换 图片替换 表格填充 PPT合并

Apache POI操作PPT: 文字替换 图片替换 表格填充 PPT合并

2024-07-10 11:53| 来源: 网络整理| 查看: 265

一点前置 POI PPT常用组件

在POI中,我们经常使用的几个对象如下:

SlideShow 对应整个PPT文件Slide 对应一页PPTShape 这个可以实现就比较多了。文本域、图片、表格、都归属于这一类。PictureShape 图片对象 没啥说的XSLFTable 表格 也没啥好说的TextShape 文本域对象TextParagraph 当Shape的实现类是TextShape是,我们就可以获取到段落啦。TextRun 这个是最基础的东西了。具体的文字和样式都是由它控制的。 可能存在的坑 虽然TextShape存在setText方法,但是调用的话会导致之前设置的样式全部失败。你认为属于一个TextRun的文本,它还真不一定在同一个里面,尤其里面有特殊符号。目前对于图片的替换还不能控制比例。对于PPT合并,不要通过创建新PPT导入来实现。如果需要合并的PPT中大小有宽屏的,很有可能会变形。 具体操作 首先是依赖 org.apache.poi poi 4.1.1 org.apache.poi poi-scratchpad 4.1.1 org.apache.poi poi-ooxml 4.1.1 替换字符串

个人这边做了一点封装。可以采用${xxx}的占位符方式来进行替换。 示例:

Map textMap = new HashMap(); textMap.put("${xxx}", "文本域"); PoiUtils.replaceText(tmpFileName, textMap);

具体代码:

/** * 进行文本替换 * * @param path * @param textMap * @throws IOException */ public static void replaceText(String path, Map textMap) throws IOException { FileInputStream fileInput = new FileInputStream(path); XMLSlideShow ppt = new XMLSlideShow(fileInput); for (Slide slide : ppt.getSlides()) { List shapes = slide.getShapes(); for (Shape shape : shapes) { //文本 if (shape instanceof TextShape) { List list = ((TextShape) shape).getTextParagraphs(); replaceData(list, textMap); } } } FileOutputStream out = new FileOutputStream(path); ppt.write(out); out.close(); ppt.close(); } /** * 替换文本 * * @param list * @param textMap */ private static void replaceData(List list, Map textMap) { if (list == null || list.size()


【本文地址】


今日新闻


推荐新闻


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