我是靠谱客的博主 危机樱桃,最近开发中收集的这篇文章主要介绍POI使用模板制作PPT,替换内容时原样式丢失问题的解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

通常会使用模板来制作PPT,模板中使用特定字符串表示待替换的内容,但是使用POI编辑PPT模板时会出现,内容被替换的同时,原本的样式也丢失。

不要使用TextShape和TableCell的setText进行内容替换

可以使用下面的方法, 只替换文本段落的内容

/**
* 打开模板文件进行替换
**/
private void replaceTemplate(String templateFile) {
    //打开PPT,并制定新文件
    try (SlideShow ppt = new XMLSlideShow(new FileInputStream(templateFile));
            FileOutputStream out = new FileOutputStream("newFile.pptx")){
        List<Slide> slides = ppt.getSlides();
        for (Slide slide : slides) {
            List<Shape> shapes = slide.getShapes();
            for (Shape shape : shapes) {
                if (shape instanceof TextShape) { //文本
                    List<TextParagraph> list = ((TextShape) shape).getTextParagraphs();           
                    replaceData(list);
                }
                if (shape instanceof TableShape) {// 表格
                    int rowSize = ((TableShape) shape).getNumberOfRows();
                    int columnSize = ((TableShape) shape).getNumberOfColumns();
                    for (int rowNum = 0; rowNum < rowSize; rowNum++) {
                        for (int columnNum = 0; columnNum < columnSize; columnNum++) {
                            TableCell cell = ((TableShape) shape).getCell(rowNum, columnNum);
                            if (cell != null) {
                                List<TextParagraph> list = cell.getTextParagraphs();
                                replaceData(list);
                            }
                        }
                    }
                }
            }
        }
        ppt.write(out);
    }catch (Exception e){
        e.printStackTrace();
    }
}
/**
* 寻找段落中的所有TextRun并进行替换工作
**/
private void replaceData(List<TextParagraph> list) {
    if(list == null || list.size() <= 0)
        return;
    for (TextParagraph textParagraph : list) {
        if(textParagraph == null)
            continue;
        List<TextRun> textRuns = textParagraph.getTextRuns();
        if(textRuns == null || textRuns.size() <= 0 || textRuns.isEmpty())
            continue;
        for (TextRun textRun : textRuns) {
            if(textRun == null)
                continue;
            replaceDate(textRun, "yyyy", "2018");
        }
    }
}
/**
* 把特定pat替换成新的value
**/
private void replaceData(TextRun textRun, String pat, value) {
    String text = textRun.getRawText();
    if(StringUtil.isNull(text))
        return;
    String r = text;
    if(r.contains(pat))
        r = r.replaceAll(pat, value);
    if(!r.equals(text))
        textRun.setText(r);

 

最后

以上就是危机樱桃为你收集整理的POI使用模板制作PPT,替换内容时原样式丢失问题的解决办法的全部内容,希望文章能够帮你解决POI使用模板制作PPT,替换内容时原样式丢失问题的解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部