主要用于java端解析一个带有带替换字符的PPT模板,用value将key所处的区域替换掉,目前已经实现替换文本文字,表格,图片等功能。包括样式的修改等
 
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.15</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency>
</dependencies>
SystemControllerLog(description = "生成服务建议书的PPT")@GetMapping(value = "/createPPTByTemplate")public void createPPTByTemplate(ProductPoiModel productPoiModel,HttpServletRequest req, HttpServletResponse httpServletResponse) throws SystemException, IOException, ExecutionException, InterruptedException {
//        File file = new File("C:\\Users\\Admin\\Desktop\\POI\\中国石油天然气勘探开发公司课题研究服务建议书-0622.pptx");ProductDetailModel productDetailModel = new ProductDetailModel();productDetailModel.setId(productPoiModel.getProductId());ProductDetailModel productDetail = productService.getDetailById(productDetailModel);String productOverview = productDetail.getOverview();String picture = null;if(StringUtils.isNotNull(productOverview) && productOverview.contains("src")) {System.out.print("产品中含有图片内容,需要替换展示");List<String> stringList = this.getImgSrc(productOverview);picture = stringList.get(0);}else {picture = "null";}InputStream is = null;Map<String, Object> map = new HashMap<>();String allData = null;Result result = null;Object[][] creditDatas = null;Object[][] datas = null;StringBuffer devBuffer = new StringBuffer();String enterpriseBusiness = null; //企业业务try {is = this.getClass().getClassLoader().getResourceAsStream("template/service_proposal_template.pptx");//读取PowerPoint文档中所有文本内容,以字符串形式返回allData = this.getCompanyDetail(productPoiModel.getCompanyFullName());JSONObject json = JSONObject.fromObject(allData);Map<String,Object> hashMap = new HashMap<>();hashMap.put("taxcredits",Taxcredit.class);hashMap.put("products",Product.class);hashMap.put("owntaxes",Owntax.class);ProductPoiModel poiModel = (ProductPoiModel)JSONObject.toBean(json, ProductPoiModel.class,hashMap);result = poiModel.getResult();} catch (Exception e) {logger.error(e.getMessage());System.out.print("----JSONObject-------"+e.getMessage());}if (result == null || StringUtils.isNull(result)) {creditDatas = new Object[1][1];creditDatas[0][0] = "null";datas = new Object[1][1];datas[0][0] = "null";devBuffer.append("  XXX  ");enterpriseBusiness = devBuffer.toString();} else {//如果税务评级列表不为空if ((result.getTaxcredits() != null) && (result.getTaxcredits().size() >= 1)) {List<Taxcredit> operateList = result.getTaxcredits();creditDatas = new Object[operateList.size() + 1][5];creditDatas[0][0] = "年份";creditDatas[0][1] = "纳税评级";creditDatas[0][2] = "类型";creditDatas[0][3] = "纳税人识别号";creditDatas[0][4] = "评价单位";for (int i = 0; i < operateList.size(); i++) {creditDatas[i + 1][0] = operateList.get(i).getYear();creditDatas[i + 1][1] = operateList.get(i).getGrade();creditDatas[i + 1][2] = operateList.get(i).getType();creditDatas[i + 1][3] = operateList.get(i).getIdNumber();creditDatas[i + 1][4] = operateList.get(i).getEvalDepartment();}} else {creditDatas = new Object[1][1];creditDatas[0][0] = "null";}if ((result.getOwntaxes() != null) && (result.getOwntaxes().size() >= 1)) {List<Owntax> blist = result.getOwntaxes();datas = new Object[blist.size() + 1][7];datas[0][0] = "发布日期";datas[0][1] = "纳税人别号";datas[0][2] = "欠税税种";datas[0][3] = "欠税类型";datas[0][4] = "欠税余额";datas[0][5] = "当前发生的欠税额";datas[0][6] = "税务机关";for (int i = 0; i < blist.size(); i++) {datas[i + 1][0] = blist.get(i).getPublishDate();datas[i + 1][1] = blist.get(i).getPersonIdNumber();datas[i + 1][2] = blist.get(i).getTaxCategory();datas[i + 1][3] = blist.get(i).getType();datas[i + 1][4] = blist.get(i).getOwnTaxAmount();datas[i + 1][5] = blist.get(i).getNewOwnTaxBalance();datas[i + 1][6] = blist.get(i).getDepartment();}} else {datas = new Object[1][1];datas[0][0] = "null";}if ((result.getProducts() != null) && (result.getProducts().size() >= 1)) {List<Product> plist = result.getProducts();for (int i = 0; i < plist.size(); i++) {devBuffer.append(plist.get(i).getYewu() + "、");}} else if (result.getProducts() == null || result.getProducts().size() < 1) {devBuffer.append("  XXX  ");enterpriseBusiness = devBuffer.toString();}if (!("".equals(devBuffer.toString())) && (!"  XXX  ".equals(devBuffer.toString()))) {devBuffer.deleteCharAt(devBuffer.length() - 1);enterpriseBusiness = devBuffer.toString();}}//待替换的文本区域map.put("page_1_text_1", productPoiModel.getCompanyFullName());//公司名map.put("page_1_text_2", productDetail.getProductName());//取产品名map.put("page_4_text_1", productPoiModel.getCompanyFullName());//公司名map.put("page_4_text_2", enterpriseBusiness);//取2.3中企业业务的业务名1、业务名2map.put("page_4_text_3", productDetail.getProductName());//取产品名map.put("page_5_table_1",datas);//需要数据欠税公告表map.put("page_6_table_1",creditDatas);//需要数据税务评级表map.put("page_10_Img_1",picture);//需要数据overview图片
//        InputStream powerPoint = new FileInputStream(file);InputStream powerPoint = is;if(powerPoint == null) {return ;}XMLSlideShow slideShow = new XMLSlideShow(powerPoint);List slides = slideShow.getSlides();for (int i = 0 ; i < slides.size() ; i++) {List shapes = ((Slide)slides.get(i)).getShapes();for (int j = 0 ; j < shapes.size() ; j++) {Shape shape = (Shape) shapes.get(j);PowerPoint2007FileUtil.renderShape(shape, map, slideShow,i);}}
//        OutputStream outputStreams = new FileOutputStream("C:\\Users\\Admin\\Desktop\\test.pptx");httpServletResponse.setContentType("octets/stream");String excelName = productDetail.getProductName() + ProductContant.BIG_DATA_PPT_NAME;httpServletResponse.addHeader("Content-Disposition", "attachment;filename=" + new String(excelName.getBytes("gb2312"), "ISO8859-1" )+".pptx");OutputStream outputStreams = httpServletResponse.getOutputStream();slideShow.write(outputStreams);}
 
 
 
package com.atme8.product.core.utils.poi;import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
import java.util.List;import com.atme8.product.core.contant.ProductContant;
import com.atme8.tax.cloud.core.util.StringUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.poi.sl.draw.DrawPictureShape;
import org.apache.poi.sl.draw.geom.CustomGeometry;
import org.apache.poi.sl.draw.geom.Guide;
import org.apache.poi.sl.usermodel.*;
import org.apache.poi.sl.usermodel.Shape;
import org.apache.poi.xslf.usermodel.*;import static org.apache.poi.sl.usermodel.StrokeStyle.LineCompound.THICK_THIN;
import static org.apache.poi.sl.usermodel.StrokeStyle.LineCompound.THIN_THICK;/*** <p>PowerPoint文件工具基类* <p>* <p>通用的PowerPoint文件工具基类,可用于从PowerPoint文档中抽取文本信息*/
public class BasePowerPointFileUtil {/*** <p>读取PowerPoint文件中的幻灯片对象** @param slideShow SlideShow对象* @return 读取出的工作薄列表*/public static List readSlideShow(SlideShow slideShow) {List slideList = null;if (slideShow != null) {slideList = new ArrayList();List slides = slideShow.getSlides();for (int i = 0; i < slides.size(); i++) {slideList.add(BasePowerPointFileUtil.readSlide((Slide) slides.get(i)));}}return slideList;}/*** <p>读取指定的Slide中的数据** @param slide Slide对象* @return 读取出的Slide数据列表*/public static List readSlide(Slide slide) {List shapeList = null;if (slide != null) {shapeList = new ArrayList();List shapes = slide.getShapes();for (int i = 0; i < shapes.size(); i++) {shapeList.add(BasePowerPointFileUtil.readShape((Shape) shapes.get(i)));}}return shapeList;}/*** <p>读取指定的图形的数据** @param shape Slide中的图形对象* @return 读取出的图形数据*/public static Object readShape(Shape shape) {String returnValue = null;if (shape != null) {if (shape instanceof TextShape) {try {returnValue = ((TextShape) shape).getText();} catch (Exception ex) {ex.printStackTrace();}}}return returnValue;}public static void renderShape(Shape shape, Map<String, Object> data,XMLSlideShow ppt,int i) throws IOException {if (shape instanceof TextShape) {BasePowerPointFileUtil.replace(shape, data, ppt,i);} else if (shape instanceof GroupShape) {Iterator groupShapes = ((GroupShape) shape).iterator();while (groupShapes.hasNext()) {Shape groupShape = (Shape) groupShapes.next();BasePowerPointFileUtil.renderShape(groupShape, data, ppt,i);}} else if (shape instanceof TableShape) {TableShape tableShape = ((TableShape) shape);int column = tableShape.getNumberOfColumns();int row = tableShape.getNumberOfRows();for (int r = 0; r < row; r++) {for (int c = 0; c < column; c++) {BasePowerPointFileUtil.replace(tableShape.getCell(r, c), data, ppt, i);}}}
//        else if (shape instanceof PictureShape) {
//            PictureShape pictureShape = ((PictureShape) shape);
//            PictureData pictureData = pictureShape.getPictureData();
//            String url = "http://img.atme8.com/Fi8XLHpB-XYOq7NJHIVCA2OqysTN";
//            byte[] btImg = getImageFromNetByUrl(url);
//            pictureData.setData(btImg);
//            byte[] b = pictureData.getData();
//            System.out.println(pictureShape);
//        }}/*** 根据地址获得数据的字节流* @param strUrl 网络连接地址* @return*/private static byte[] getImageFromNetByUrl(String strUrl){try {URL url = new URL(strUrl);HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5 * 1000);InputStream inStream = conn.getInputStream();//通过输入流获取图片数据byte[] btImg = readInputStream(inStream);//得到图片的二进制数据return btImg;} catch (Exception e) {e.printStackTrace();}return null;}/*** 从输入流中获取数据* @param inStream 输入流* @return* @throws Exception*/private static byte[] readInputStream(InputStream inStream) throws Exception{ByteArrayOutputStream outStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while( (len=inStream.read(buffer)) != -1 ){outStream.write(buffer, 0, len);}inStream.close();return outStream.toByteArray();}public static void replace(Shape shape, Map<String, Object> data,XMLSlideShow ppt,int i) throws IOException {if(data == null) {data = new HashMap<>();}if (shape instanceof TextShape) {TextShape textShape = (TextShape) shape;String text = textShape.getText();List<String> keys = DealStrSubUtil.getSubUtil(text, "\\$\\{(.+?)\\}");Map<String, Object> map = (Map<String, Object>) data;for (String key : keys) {Object value = map.get(key);if (value != null) {if(key.contains("text")) {text = text.replaceAll("\\$\\{" + key + "\\}", value.toString());
//                        text = text.replaceAll("\\r\\n|\\r|\\n|\\n\\r", "");textShape.setText(text);
//                        for(int j = 0 ; j < textShape.getTextParagraphs().size() ; j ++) {
//                            XSLFTextParagraph xh = (XSLFTextParagraph) textShape.getTextParagraphs().get(j);
//
//                            XSLFTextRun xslfTextRun = xh.getTextRuns().get(0);
//                            if (j % 2 != 0){
//                                xslfTextRun.setFontSize(12d);
//                            }
//for (int k = 0; k < xh.getTextRuns().size(); k++) {XSLFTextRun xslfTextRun = xh.getTextRuns().get(k);if (j % 2 != 0)xslfTextRun.setFontSize(12d);}
//                        }}if(key.contains("Img")) {if(!"null".equals(value)) {//图片替换区域byte[] btImg = getImageFromNetByUrl(value.toString());XSLFPictureData idx = ppt.addPicture(btImg, XSLFPictureData.PictureType.JPEG);List<XSLFSlide> slides = ppt.getSlides();XSLFSlide slide = slides.get(i);XSLFPictureShape pic = slide.createPicture(idx);Rectangle2D anchor = shape.getAnchor();// 设置XSLFPictureShape的位置信息pic.setAnchor(anchor);// 移除XSLFTextShapeslide.removeShape((XSLFShape) shape);}else {text = text.replaceAll("\\$\\{" + key + "\\}", ProductContant.NULL_PICTURE_TEXT_NOTICE);textShape.setText(text);for(int j = 0 ; j < textShape.getTextParagraphs().size() ; j ++) {XSLFTextParagraph xh = (XSLFTextParagraph) textShape.getTextParagraphs().get(j);XSLFTextRun xslfTextRun = xh.getTextRuns().get(0);xslfTextRun.setFontSize(18d);xslfTextRun.setFontColor(Color.red);}}}if(key.contains("table")) {Object[][] objects = (Object[][]) value;if("page_5_table_1".equals(key) && objects[0][0].equals("null")){text = text.replaceAll("\\$\\{" + key + "\\}", ProductContant.NULL_Table_TEXT_TAX_NOTICE);textShape.setText(text);for(int j = 0 ; j < textShape.getTextParagraphs().size() ; j ++) {XSLFTextParagraph xh = (XSLFTextParagraph) textShape.getTextParagraphs().get(j);XSLFTextRun xslfTextRun = xh.getTextRuns().get(0);xslfTextRun.setFontSize(18d);xslfTextRun.setFontColor(new Color(1, 4, 8));xslfTextRun.setBold(true);}textShape.setHorizontalCentered(true);textShape.setVerticalAlignment(VerticalAlignment.TOP);}else if ("page_6_table_1".equals(key) && objects[0][0].equals("null")){text = text.replaceAll("\\$\\{" + key + "\\}", ProductContant.NULL_TABLE_TEXT_TAX_CREDITS_NOTICE);textShape.setText(text);for(int j = 0 ; j < textShape.getTextParagraphs().size() ; j ++) {XSLFTextParagraph xh = (XSLFTextParagraph) textShape.getTextParagraphs().get(j);XSLFTextRun xslfTextRun = xh.getTextRuns().get(0);xslfTextRun.setBold(true);xslfTextRun.setFontSize(18d);xslfTextRun.setFontColor(new Color(1, 4, 8));}textShape.setHorizontalCentered(true);textShape.setVerticalAlignment(VerticalAlignment.TOP);} else {Object[][] datas = (Object[][]) value;/** 创建表格**/XSLFSlide slide = ppt.getSlides().get(i);XSLFTable table = slide.createTable();/** 设置表格 x ,y ,width,height **/Rectangle2D rectangle2D = new Rectangle2D.Double(30,150,900,500);//                        Rectangle2D rectangle2D = shape.getAnchor();table.setAnchor(rectangle2D);for(int x = 0; x < datas.length; x++) {XSLFTableRow tableRow = table.addRow(); //创建表格行for(int y = 0; y < datas[x].length; y++) {tableRow.setHeight(20);XSLFTableCell tableCell = tableRow.addCell();//创建表格单元格XSLFTextParagraph p = tableCell.addNewTextParagraph();XSLFTextRun tr = p.addNewTextRun();tr.setBold(true);if(x == 0) {tr.setFontSize(10d);p.setTextAlign(TextParagraph.TextAlign.CENTER);}else {tr.setFontSize(10d);}tr.setText(String.valueOf(datas[x][y]));tableCell.setBorderColor(TableCell.BorderEdge.bottom,new Color(134, 134, 134));tableCell.setBorderColor(TableCell.BorderEdge.top,new Color(134, 134, 134));tableCell.setBorderColor(TableCell.BorderEdge.left,new Color(134, 134, 134));tableCell.setBorderColor(TableCell.BorderEdge.right,new Color(134, 134, 134));StrokeStyle style = new StrokeStyle() {@Overridepublic PaintStyle getPaint() {return null;}@Overridepublic LineCap getLineCap() {return null;}@Overridepublic LineDash getLineDash() {return null;}@Overridepublic LineCompound getLineCompound() {return null;}@Overridepublic double getLineWidth() {return 0.11d;}};table.setColumnWidth(y,900/datas[x].length);}}text = text.replaceAll("\\$\\{" + key + "\\}", "");textShape.setText(text);}}}if(value == null && key.contains("Img")) {text = text.replaceAll("\\$\\{" + key + "\\}", "");textShape.setText(text);}}}}
}
 
 
package com.atme8.product.core.utils.poi;import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** Created by majun on 2017/10/16.*/
public class DealStrSubUtil {/*** 正则表达式匹配两个指定字符串中间的内容* @param soap* @return*/public static List<String> getSubUtil(String soap, String rgex){List<String> list = new ArrayList<String>();Pattern pattern = Pattern.compile(rgex);// 匹配的模式Matcher m = pattern.matcher(soap);while (m.find()) {int i = 1;list.add(m.group(i));i++;}return list;}/*** 返回单个字符串,若匹配到多个的话就返回第一个,方法与getSubUtil一样* @param soap* @param rgex* @return*/public static String getSubUtilSimple(String soap,String rgex){Pattern pattern = Pattern.compile(rgex);// 匹配的模式Matcher m = pattern.matcher(soap);while(m.find()){return m.group(1);}return "";}
}
 
 
 
package com.atme8.product.core.utils.poi;import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import org.apache.commons.lang3.StringUtils;
import org.apache.poi.sl.usermodel.AutoShape;
import org.apache.poi.sl.usermodel.GroupShape;
import org.apache.poi.sl.usermodel.Shape;
import org.apache.poi.sl.usermodel.Slide;
import org.apache.poi.xslf.usermodel.XMLSlideShow;/*** <p>PowerPoint2007版文件工具类** <p>通用的PowerPoint2007版文件工具类,可用于从PowerPoint文档中抽取文本信息**/
public class PowerPoint2007FileUtil extends BasePowerPointFileUtil {/*** <p>从PowerPoint文档中提取文本信息** @param  powerPointFile PowerPoint文件* @param  shapeSeparator Shape分隔符* @param  slideSeparator Slide分隔符** @return 提取后的文本信息**/public static String extractTextFromPowerPointFile(File powerPointFile , String shapeSeparator , String slideSeparator) {StringBuffer returnValue = new StringBuffer();if (powerPointFile != null && slideSeparator != null && shapeSeparator != null) {if (powerPointFile.isFile()) {try {XMLSlideShow slideShow = new XMLSlideShow(new FileInputStream(powerPointFile));Iterator     slideIterator = PowerPoint2007FileUtil.readSlideShow(slideShow).iterator();//遍历Slidewhile (slideIterator.hasNext()) {Iterator shapeIterator = ((List) slideIterator.next()).iterator();//遍历Shapewhile (shapeIterator.hasNext()) {Object shapeValue = shapeIterator.next();if (shapeValue != null) {returnValue.append((String) shapeValue);if (shapeIterator.hasNext()) {returnValue.append(shapeSeparator);}}}if (slideIterator.hasNext()) {returnValue.append(slideSeparator);}}} catch (Exception ex) {ex.printStackTrace();}}}return StringUtils.trimToNull(returnValue.toString());}//    public static void renderPowerPointTemplate(InputStream powerPoint, Map<String, Object> data) throws IOException {
//        if(powerPoint == null) {
//            return;
//        }
//        XMLSlideShow slideShow = new XMLSlideShow(powerPoint);
//        List slides = slideShow.getSlides();
//        for (int i = 0 ; i < slides.size() ; i++) {
//
//            List shapes = ((Slide)slides.get(i)).getShapes();
//            for (int j = 0 ; j < shapes.size() ; j++) {
//                Shape shape = (Shape) shapes.get(j);
//                PowerPoint2007FileUtil.renderShape(shape, data);
//            }
//        }
//        OutputStream outputStreams = new FileOutputStream("C:\\Users\\Admin\\Desktop\\test.pptx");
//        slideShow.write(outputStreams);
//    }}
 
 
 
package com.atme8.product.core.utils.poi;import java.io.File;
import java.util.Iterator;
import java.util.List;import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl;
import org.apache.poi.sl.usermodel.SlideShow;/*** <p>PowerPoint2003版文件工具类** <p>通用的PowerPoint2003版文件工具类,可用于从PowerPoint文档中抽取文本信息**/
public class PowerPoint2003FileUtil extends BasePowerPointFileUtil {/*** <p>从PowerPoint文档中提取文本信息** @param  powerPointFile PowerPoint文件* @param  shapeSeparator Shape分隔符* @param  slideSeparator Slide分隔符**/public static String extractTextFromPowerPointFile(File powerPointFile , String shapeSeparator , String slideSeparator) {StringBuffer returnValue = new StringBuffer();if (powerPointFile != null && slideSeparator != null && shapeSeparator != null) {if (powerPointFile.isFile()) {try {SlideShow slideShow     = new HSLFSlideShow(new HSLFSlideShowImpl(powerPointFile.getCanonicalPath()));Iterator  slideIterator = PowerPoint2003FileUtil.readSlideShow(slideShow).iterator();//遍历Slidewhile (slideIterator.hasNext()) {Iterator shapeIterator = ((List) slideIterator.next()).iterator();//遍历Shapewhile (shapeIterator.hasNext()) {Object shapeValue = shapeIterator.next();if (shapeValue != null) {returnValue.append((String) shapeValue);if (shapeIterator.hasNext()) {returnValue.append(shapeSeparator);}}}if (slideIterator.hasNext()) {returnValue.append(slideSeparator);}}} catch (Exception ex) {ex.printStackTrace();}}}return StringUtils.trimToNull(returnValue.toString());}
}
package com.atme8.product.core.utils.poi;import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;import java.io.File;/*** <p>PowerPoint文件工具类** <p>通用的PowerPoint文件工具类,可用于从PowerPoint文档中抽取文本信息** @author  窦海宁, chong0660@sina.com* @since   AiyuCommonCore-1.0* @version AiyuCommonCore-1.0*/
public class PowerPointFileUtil extends BasePowerPointFileUtil {/*** <p>从PowerPoint文档中提取文本信息** @param  powerPointFile PowerPoint文件* @param  shapeSeparator Shape分隔符* @param  slideSeparator Slide分隔符** @return 提取后的文本信息** @modify 窦海宁, 2017-02-06*/public static String extractTextFromPowerPointFile(File powerPointFile , String shapeSeparator , String slideSeparator) {String resultText = null;if (powerPointFile != null && powerPointFile.exists()) {String extension = FilenameUtils.getExtension(powerPointFile.getName());if (StringUtils.equalsIgnoreCase("ppt" , extension)) {//Office2003版文件处理resultText = PowerPoint2003FileUtil.extractTextFromPowerPointFile(powerPointFile , shapeSeparator , slideSeparator);} else if (StringUtils.equalsIgnoreCase("pptx" , extension)) {//Office2007版文件处理resultText = PowerPoint2007FileUtil.extractTextFromPowerPointFile(powerPointFile , shapeSeparator , slideSeparator);} else {//文件类型有误}}return resultText;}
ppt 中用${page_1_text_1 }来做占位符用value来替换它的位置
 

需要源码的小伙伴请上此处下载:https://download.csdn.net/download/ccmedu/10378575

poi操作PPT读取模板流,生成新PPT文件相关推荐

  1. 通过一个word模板来生成新的word并且填充内容

    关于用Java编写生成word文档,动态添加数据到word文档的一些心得,经过翻阅了无数的有用的和无用的资料以后,总算找到了一种靠谱的方法 1.概述 经过反反复复的查阅资料,总算找到了一个靠谱的生成w ...

  2. poi操作word替换模板向指定位置添加图表

    poi操作word替换模板向指定位置添加图表 首先是引入pom文件 <dependency><groupId>org.apache.poi</groupId>< ...

  3. 利用python读取tomcat中log文件提取出错误日志生成新的文件

    人生苦短,我用python 废话不多说,直接上代码! #!/usr/bin/env python # coding=utf-8 import redef find_error_log(log_name ...

  4. 如何快速生成A2L文件(ASAP2 Studio):基于“前一版本A2L文件+最新map文件”生成新map文件对应A2L文件

    目录 一.ASAP2 Studio概述: 二.如何在ASAP2 Studio中利用"前一版本A2L文件+最新map文件"生成新map文件对应A2L文件: 2.1 在ASAP2 St ...

  5. POI操作word模板并生成新的word.docx

    XWPFDocument对象 POI是apache提供的可以操作word文档的第三方jar.POI能操作word是使用XWPFDocument对象. XWPFDocument对象可以解析docx文件, ...

  6. POI操作word文档,生成书签

    近期做动态的word文档生成, 需要在指定XWPFRun生成书签的功能,有两种情况: 创建新word文档时候,直接在createRun前后调用生成书签的方法 XWPFRun oldRun = runs ...

  7. jeecgboot logback-spring.xml配置不生成新日志文件

    日志文件不随时间生成新得日志文件,一直累积在启动时的生成的日志文件里. 查找资料发现,是TimeBasedRollingPolicy和SizeBasedTriggeringPolicy冲突. 将两个去 ...

  8. 新手个人笔记-java获取Excel模板并生成新的Excel导出

    前端大概的样式: 模板: 效果: HTML: <span class="l" style="margin-left: 10px;"><a cl ...

  9. python操作统计excel表格,生成新excel表格

    0.前言 因产品的同学试着用python统计Excel表格,但百度的程序又一直有各种问题, 所以叫我帮用python实现一个统计Excel表格程序:我之前也没有写过python操作Excel表格的程序 ...

  10. java poi 操作 excel 读取本地Excel / 保存excel到本地 / url下载excel

    pom.xml 配置poi版本 <dependency><groupId>org.apache.poi</groupId><artifactId>poi ...

最新文章

  1. android 高德地图纠偏,高德地图纠偏算法(android ,ios)
  2. CAN总线基础(二)
  3. PHP 分页类 高洛峰 细说PHP
  4. jQuery图片自动轮转动画特效
  5. sed以及awk的替换命令
  6. LeetCode 101. 对称二叉树 思考分析
  7. 在Python中有效使用JSON的4个技巧
  8. click Arguments
  9. bigint在java中用什么表示_即使我确信圣诞老人不存在,我却仍然每年给我的孩子们准备圣诞礼物,为什么?...
  10. 用计算机弹雅俗共赏,聊聊雅俗共赏:钢琴、饺子和面
  11. 计算机演示文稿知识点,计算机基础知识:PowerPoint常用操作(一)
  12. 几款好用的谷歌卫星地图下载器
  13. 用Obsidian实现自动日记
  14. Vector For All (slight return)
  15. 闲聊机器人实例四:python实现小姜机器人(检索式chatbot_sentence_vec_by_bert_bert句向量)
  16. markdown转微信公众号编辑器
  17. 频率选择性衰落、时间选择性衰落
  18. 超级玩家联想Z5s来了1398元起 顶配12GB划时代超旗舰联想Z5 Pro GT 855版惊艳亮相
  19. 网易视频云:HBase优化实战
  20. 【云海轻站可视化DIY建站系统V1.0.28】功能模块+可视化编辑建站系统+商用多开版+插件+公众号

热门文章

  1. USB转双串口产品设计-RS232串口
  2. 基于华为java编程规范的checkstyle.xml以及格式化模版,注释模版
  3. 华为力推自研AI芯片,还记得大明湖畔的寒武纪吗?
  4. 蓝桥杯 扶老奶奶过街 (逻辑推理)
  5. 徐静蕾2008十大青春语录
  6. XXS靶场haozi
  7. 用Python修改Minecraft的mod
  8. 一些快捷键的用法,linux终端操作下
  9. 淘宝省钱_如何省钱和组装自己的电路板
  10. Aidlearning的内网穿透