POI PPT模板字段替换

#遇到一个需求就是,给一个固定模板往固定位置填写代码

<dependency>
	<!-- LEVEL-PLT:操作EXCEL所需要的包 -->
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>3.13</version>
</dependency>
<dependency>
	<!-- LEVEL-PLT:提供对office的word,excel,visio,ppt的操作 -->
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>3.13</version>
</dependency>

在这里插入图片描述
图片的替换字段要用插入文本框插入,而且不能复制,只能一个一个插入
#代码

package com.baic.util;

import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.xslf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ebon.framework.util.NullUtil;

import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.io.*;
import java.util.List;
import java.util.Map;

/**
 * 读取ppt模板替换模板指定数据
 * 
 * @author wuyahui
 * 
 */
public class PPTToNewPPTUtils {

	private static Logger logger = LoggerFactory.getLogger(PPTToNewPPTUtils.class);

	public static void changPPT(String inputUrl,String outputUrl, Map<String, String> textMap) {
        try {
            //读取模板ppt
            SlideShow ppt = new XMLSlideShow(new FileInputStream(new File(inputUrl)));
            //提取文本信息
            List<XSLFSlide> slides = ppt.getSlides();
            for (XSLFSlide slide : slides) {
                List<XSLFShape> shapes = slide.getShapes();
                for(int i=0;i<shapes.size();i++){
                    Rectangle2D anchor = shapes.get(i).getAnchor();
                    if (shapes.get(i) instanceof XSLFTextBox) {
                        XSLFTextBox txShape = (XSLFTextBox) shapes.get(i);
                        if (txShape.getText().contains("{rName}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	if (NullUtil.isNotNull(textMap.get("rName"))) {
                     		   txShape.setText(txShape.getText().replace("{rName}", textMap.get("rName")));
                        	} else {
                        	   txShape.setText(txShape.getText().replace("{rName}", ""));
							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(10d); // 设置字体大小
                        }
                        if (txShape.getText().contains("{pName}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	if (NullUtil.isNotNull(textMap.get("pName"))) {
                                txShape.setText(txShape.getText().replace("{pName}", textMap.get("pName")));
                        	} else {
                        		txShape.setText(txShape.getText().replace("{pName}", ""));
							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(10d); // 设置字体大小

                        }
                        if (txShape.getText().contains("{code}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                            if (NullUtil.isNotNull(textMap.get("code"))) {
                            	txShape.setText(txShape.getText().replace("{code}", textMap.get("code")));
                        	} else {
                        		txShape.setText(txShape.getText().replace("{code}", ""));
							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(10d); // 设置字体大小

                        }
                        if (txShape.getText().contains("{tCode}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("tCode"))) {
                        		txShape.setText(txShape.getText().replace("{tCode}", textMap.get("tCode")));
                         	} else {
                         		 txShape.setText(txShape.getText().replace("{tCode}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(10d); // 设置字体大小

                        }
                        if (txShape.getText().contains("{version}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("version"))) {
                        		txShape.setText(txShape.getText().replace("{version}", textMap.get("version")));
                         	} else {
                         		txShape.setText(txShape.getText().replace("{version}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(10d); // 设置字体大小

                        }
                        if (txShape.getText().contains("{name}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("name"))) {
                        		txShape.setText(txShape.getText().replace("{name}", textMap.get("name")));
                         	} else {
                         		txShape.setText(txShape.getText().replace("{name}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(30d); // 设置字体大小
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontFamily("微软雅黑 (标题)"); // 字体格式
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setBold(true); // 加粗
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontColor(new Color(0,151,224)); // 字体颜色
                            txShape.setHorizontalCentered(true); //  置中
                        }
                        if (txShape.getText().contains("{name1}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("name1"))) {
                        		txShape.setText(txShape.getText().replace("{name1}", textMap.get("name1")));	
                         	} else {
                         		txShape.setText(txShape.getText().replace("{name1}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(12d); // 设置字体大小
                        }
                        if (txShape.getText().contains("{name2}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("name2"))) {
                        		txShape.setText(txShape.getText().replace("{name2}", textMap.get("name2")));
                         	} else {
                         		txShape.setText(txShape.getText().replace("{name2}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(12d); // 设置字体大小
                        }
                        if (txShape.getText().contains("{name3}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("name3"))) {
                        		txShape.setText(txShape.getText().replace("{name3}", textMap.get("name3")));
                         	} else {
                         		txShape.setText(txShape.getText().replace("{name3}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(12d); // 设置字体大小
                        }
                        if (txShape.getText().contains("{name4}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("name4"))) {
                        		txShape.setText(txShape.getText().replace("{name4}", textMap.get("name4")));
                         	} else {
                         		txShape.setText(txShape.getText().replace("{name4}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(12d); // 设置字体大小
                        }
                        if (txShape.getText().contains("{name5}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("name5"))) {
                        		txShape.setText(txShape.getText().replace("{name5}", textMap.get("name5")));
                         	} else {
                         		txShape.setText(txShape.getText().replace("{name5}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(12d); // 设置字体大小
                        }
                        if (txShape.getText().contains("{name6}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("name6"))) {
                        		txShape.setText(txShape.getText().replace("{name6}", textMap.get("name6")));
                         	} else {
                         		txShape.setText(txShape.getText().replace("{name6}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(12d); // 设置字体大小
                        }
                        if (txShape.getText().contains("{name7}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("name7"))) {
                        		txShape.setText(txShape.getText().replace("{name7}", textMap.get("name7")));
                         	} else {
                         		txShape.setText(txShape.getText().replace("{name7}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(12d); // 设置字体大小
                        }
                        if (txShape.getText().contains("{date}")) {
                            // 替换文字内容.用TextRun获取替换的文本来设置样式
                        	 if (NullUtil.isNotNull(textMap.get("date"))) {
                        		txShape.setText(txShape.getText().replace("{date}", textMap.get("date")));	
                         	} else {
                         		txShape.setText(txShape.getText().replace("{date}", ""));
 							}
                            txShape.getTextParagraphs().get(0).getTextRuns().get(0).setFontSize(12d); // 设置字体大小
                        }
                    }
                }
            }
            FileOutputStream outputStreams = new FileOutputStream(new File(outputUrl));
            ppt.write(outputStreams);
            outputStreams.close();
        }catch (IOException e) {
        	logger.error("交付物ppt模板封面生成", e);
        }
    }
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值