#遇到一个需求就是,给一个固定模板往固定位置填写代码
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poiartifactId>
<version>3.13version>
dependency>
<dependency>
<groupId>org.apache.poigroupId>
<artifactId>poi-ooxmlartifactId>
<version>3.13version>
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);
}
}
}