读取PPT模板替换数据生成PDF报表

一、项目背景

    因本人的公司是做短信通信服务的,所以客户需要将短信的发送量,按照他们给定的PPT样例模板,来生成PDF报表数据,即PPT的样式,数据如何展示都是规定好了的,而我需要做的就是将真实的数据,渲染到样例PPT上去,并输出PDF即可。

二、思路

首先是将原生的PPT转换成xml模板,然后将xml模板的中样例数据转换成真实数据,最后输出PDF

1、注意点

将PPT生成xml可以借助一个解压工具,7zip提取xml文件

将PPT生成PDF需要借助LibreOffice 7.5,这个软件免费且无水印,需要本地安装

三、需求展示

以下为样例模板,我们需要做的 就是将真实的发送数据,进行替换

 

 四、生成xml

通过7zip提取xml文件,提取后如下

 

 

 其中的slide.xml为单纯的文字或者表,chart.xml为饼图,柱状图对应的xml

 将样例模板PPT也拷贝到项目中 ,然后将xml拷贝到项目中,需要哪些表图或者柱状图就拷贝哪些xml

 

我们打开一个xml看下,如近三天发送总量表对应的xml,我们需要替换的就是如下的数据

五、伪代码

1、引入依赖

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>${freemarker.version}</version>
        </dependency>

        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-core</artifactId>
            <version>${jodconverter.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-local</artifactId>
            <version>${jodconverter.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-spring-boot-starter</artifactId>
            <version>${jodconverter.version}</version>
        </dependency>
        <dependency>
            <groupId>org.libreoffice</groupId>
            <artifactId>ridl</artifactId>
            <version>${ridl.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>${poi-ooxml.version}</version>
        </dependency>

2、定义数据实体

实体的属性值,就是最终要替换到xml中的key

@Data
public class SmsReportPaper {

    private String year;

    private String month;

    private String day;

    /**
     * 昨天日期/上月
     */
    private String yesterday;

    /**
     * 上周同天日期/上年同期同月
     */
    private String lastWeek;

    /**
     * 上月同天日期
     */
    private String lastMonth;

    /**
     * 两个月以前
     */
    private String twoMonthAgo;

    /**
     * 三个月以前
     */
    private String threeMonthAgo;

    /**
     * (近三天/三个月) 发送量统计情况
     */
    private List<SmsDailyStatistics> lastThreeDayList;

    /**
     * (昨日/上个月)发送量:按运营商统计
     */
    private List<SmsDailyIndex> operatorDailyList;

    /**
     * (昨日/上个月)发送量:按序列号
     */
    private List<SmsDailyIndex> cdkeyDailyList;

    /**
     * (昨日/上个月)发送量:按通道
     */
    private List<SmsDailyIndex> channelDailyList;

    /**
     * (昨日/上个月)发送量:按部门
     */
    private List<SmsDailyIndex> departmentDailyList;


    /**
     * 运营商发送短信发送变化趋势图
     */
    private List<SmsPaperContrast> operatorPaperContrasts;

    /**
     * 序列号发送变化趋势图
     */
    private List<SmsPaperContrast> cdkeyPaperContrasts;

    /**
     * 通道发送变化趋势图
     */
    private List<SmsPaperContrast> channelPaperContrasts;

    /**
     * 序列号发送变化趋势表数据
     */
    private List<SmsCdKeyVariationTrendData> smsCdKeyVariationTrendDataList;
}

需要注意的是,定义实体的时候,需要根据PPT模板的key来确定层级关系

3、编写业务逻辑

import org.apache.commons.lang3.StringUtils;
import org.jodconverter.DocumentConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;

@Component
public class SmsDataReportTask {

    @Resource
    private DocumentConverter documentConverter;

    //伪造数据
    
    List<SmsCdKeyVariationTrendData> dataList = getList();
    SmsReportPaper smsReportPaper = new SmsReportPaper();
    String time = "2023-05-31";
    String filePath = createFileAndGetPath(dataList ,smsReportPaper ,time );
    
    

 /**
     * 通过resources下的模板和源数据对象生成PDF报表,并返回报表路径
     */
    private String createFileAndGetPath(List<SmsCdKeyVariationTrendData> dataList, SmsReportPaper smsReportPaper, String time) throws Exception {
        //将resource目录下模板全部输出到对应目录下
        String templatePath = BusinessFileUtils.genStaticFilePath(paramsConfiguration.getFileDirPath(), SMS, FINE_NAME_2, FINE_NAME_3, FINE_NAME_5);
        //已经将源数据替换后xml中的文件存储目录
        String xmlOutPath = BusinessFileUtils.genStaticFilePath(paramsConfiguration.getFileDirPath(), SMS, FINE_NAME_2, FINE_NAME_3, FINE_NAME_6);
        //生成ppt输出路径
        String pptOutPath = BusinessFileUtils.genStaticFilePath(paramsConfiguration.getFileDirPath(), SMS, FINE_NAME_2, FINE_NAME_3);
        //PPT原生XML存储路径
        String resourcePath = FINE_NAME_5 + File.separator + FINE_NAME_3;
        String paperFileName = "短信统计日报_";
        //读取PPT原生XML文件名列表
        List<String> list = DailyPaperUtils.readTemplateNames(resourcePath, templatePath);
        //循环遍历每一个原生的PPT的xml模板,并替换模板中的参数,并生成替换后的xml模板到对应的temp目录
        for (String fileName : list) {
            DailyPaperUtils.createTemplate(fileName, smsReportPaper, xmlOutPath, templatePath);
        }
        //获取PPT模板输出页数,因为需要输出序列号的数据未知,所以动态获取输出页数
        int pageNum = getSlideIndex(dataList);
        //输出PPT文件
        DailyPaperUtils.outPutDailyPaperPPT(list, time, xmlOutPath, pptOutPath, templatePath, pageNum, paperFileName);
        //将PPT文件转PDF
        DailyPaperUtils.ppt2Pdf(pptOutPath, time, documentConverter, paperFileName);
        //清空历史数据
        DailyPaperUtils.clearTempFile(pptOutPath, paperFileName, time);
        //返回报表文件的路径
        return pptOutPath + File.separator + paperFileName + time + ".pdf";
    }

}

上面的业务逻辑主要就是从数据库中查询到具体的业务数据,然后借助工具类生成PPT和转换PDF,因每个人需要生成的PDF的内容不一样,对于数据的组装和获取我就不多做粘贴,只展示个大致的逻辑

4、生成PPT和转换PDF的工具类

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import org.apache.commons.io.FileUtils;
import org.jodconverter.DocumentConverter;
import org.jodconverter.document.DefaultDocumentFormatRegistry;
import org.jodconverter.office.OfficeException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;


public class DailyPaperUtils {
    private final static Logger log = LoggerFactory.getLogger(DailyPaperUtils.class);

    /**
     * 读取模板文件名称
     *
     * @return
     * @throws Exception
     */
    public static List<String> readTemplateNames(String resourcePath, String templatePath) throws Exception {
        List<String> templateList = new ArrayList<>();

        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resources = resolver.getResources(resourcePath + File.separator + "*");

        if (resources.length == 0) {
            throw new FileNotFoundException("文件目录不存在:" + resourcePath);
        }
        for (Resource file : resources) {
            //这里每次生成日报都将对应模板文件复制次到对应目录,生成完后删除,防止被别人误删导致生成模板报错
            File templateFile = new File(templatePath + File.separator + file.getFilename());
            FileUtils.copyInputStreamToFile(file.getInputStream(), templateFile);
            if (templateFile.isFile() && templateFile.getName().endsWith(".xml")) {
                templateList.add(templateFile.getName());
            }
        }
        return templateList;
    }

    /**
     * 替换模板中的参数
     *
     * @param templateName 模板名称
     * @param data         封装的数据
     * @param xmlOutPath   xml文件输出的路径
     * @param templatePath xml模板路径
     * @throws Exception
     */
    public static void createTemplate(String templateName, Object data, String xmlOutPath, String templatePath) throws Exception {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
        cfg.setDefaultEncoding("UTF-8");
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        cfg.setLogTemplateExceptions(false);
        cfg.setWrapUncheckedExceptions(true);
        cfg.setDirectoryForTemplateLoading(new File(templatePath));
        Template t = cfg.getTemplate(templateName);
        File outFile = new File(xmlOutPath + File.separator + templateName);
        if (!outFile.getParentFile().exists()) {
            outFile.getParentFile().mkdirs();
        }
        try (Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), StandardCharsets.UTF_8))) {
            // 将填充数据填入模板文件并输出到目标文件
            t.process(data, out);
        } catch (Exception e) {
            log.error("e:" + e);
        }
    }

    /**
     * 输出日报PPT文件
     *
     * @param list
     * @param date
     * @param xmlOutPath
     * @param pptOutPath
     * @param templatePath
     * @param pageNum
     * @param fileName
     */
    public static void outPutDailyPaperPPT(List<String> list, String date, String xmlOutPath, String pptOutPath, String templatePath, Integer pageNum, String fileName) {
        try {
            //读取模板文件
            File templateFile = new File(templatePath + File.separator + "DailyPaperTemplate.pptx");
            ZipFile zipFile = new ZipFile(templateFile);
            Enumeration<? extends ZipEntry> zipEntrys = zipFile.entries();
            //新文件输出
            ZipOutputStream zipout = new ZipOutputStream(new FileOutputStream(pptOutPath + File.separator + fileName + date + ".pptx"));
            int len = -1;
            byte[] buffer = new byte[1024];
            File template = null;
            while (zipEntrys.hasMoreElements()) {
                ZipEntry next = zipEntrys.nextElement();
                InputStream is = zipFile.getInputStream(next);
                // 把输入流的文件传到输出流中 如果是对应的数据由我们输入
                zipout.putNextEntry(new ZipEntry(next.toString()));
                boolean flag = false;
                //不需要输出的页面
                boolean noOutput = false;
                for (String s : list) {
                    if (next.toString().contains("ppt/slides/" + s)) {
                        Integer slide = Integer.valueOf(s.replace("slide", "").replace(".xml", ""));
                        if (slide > pageNum) {
                            noOutput = true;
                            continue;
                        }
                        flag = true;
                        template = new File(xmlOutPath + File.separator + s);
                    } else if (next.toString().contains("ppt/charts/" + s)) {
                        flag = true;
                        template = new File(xmlOutPath + File.separator + s);
                    }
                }
                if (noOutput) {
                    continue;
                }
                if (flag) {
                    InputStream in = new FileInputStream(template);
                    while ((len = in.read(buffer)) != -1) {
                        zipout.write(buffer, 0, len);
                    }
                    in.close();
                } else {
                    while ((len = is.read(buffer)) != -1) {
                        zipout.write(buffer, 0, len);
                    }
                    is.close();
                }
            }
            zipout.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 将ppt转成pdf
     *
     * @param pptPath
     * @param date
     * @param documentConverter
     * @param fileName
     * @throws OfficeException
     */
    public static void ppt2Pdf(String pptPath, String date, DocumentConverter documentConverter, String fileName) throws OfficeException {
        File in = new File(pptPath + File.separator + fileName + date + ".pptx");
        File out = new File(pptPath + File.separator + fileName + date + ".pdf");
        documentConverter.convert(in).as(DefaultDocumentFormatRegistry.HTML).to(out).as(DefaultDocumentFormatRegistry.PDF).execute();
    }

    /**
     * 日报生成临时文件清理,以及历史日报文件清理
     *
     * @param filePath
     * @param fileName
     * @param date
     */
    public static void clearTempFile(String filePath, String fileName, String date) {
        try {
            //删除临时文件夹
            File tempFileDir = new File(filePath + File.separator + "temp");
            File[] files = tempFileDir.listFiles();
            for (File file : files) {
                file.delete();
            }

            File templateFileDir = new File(filePath + File.separator + "template");
            File[] templateFiles = templateFileDir.listFiles();
            for (File file : templateFiles) {
                file.delete();
            }
            File pptFile = new File(filePath + File.separator + fileName + date + ".pptx");
            if (pptFile.exists()) {
                pptFile.delete();
            }

            //清理180天以前的日报文件
            File historyFileDir = new File(filePath);
            File[] historyFiles = historyFileDir.listFiles();
            for (File historyFile : historyFiles) {
                if (historyFile.isFile() && historyFile.getName().startsWith(fileName)) {
                    String name = historyFile.getName();
                    String day = name.replace(fileName, "").replace(".pdf", "");
                    if (day.length() == 7) {
                        day = day + "-05";
                    }
                    Date fileDate = DateUtils.parseDate(day, "yyyy-MM-dd");
                    Date dateBefore = DateUtils.getDateBefore(new Date(), 180);
                    if (fileDate.compareTo(dateBefore) < 0) {
                        historyFile.delete();
                    }
                }
            }
        } catch (Exception e) {
            log.error("delete file error:", e);
        }
    }
}

5、配置文件配置

因使用转PDF的工具的原因,需要在本地安装后在yml文件里做好配置 ,如果客户是windows机器,配置如下 ,office-home根据自身的安装路径来配置,如果不需要转pdf,只需要生成ppt,那么这个配置可以不用,LibreOffice 7.5也无需 安装。

jodconverter:
  local:
    enabled: true
    office-home: C:\\Program Files\\LibreOffice
    port-numbers: 2002

六、注意点

本篇博客对于代码只粘贴了一些关键的代码,但是生成ppt和转换PDF的工具类的代码是齐全的,读者在参考本篇博客做功能的时候,需要注意的就是定义数据实体,实体的定义一定要根据PPT模板样式的来,例如我做的功能的的近上月发送总量统计表的数据

 SmsReportPaper 对象定义的数据层级就为

private List<SmsDailyStatistics> lastThreeDayList;


import io.swagger.annotations.ApiParam;

import java.io.Serializable;
import java.math.BigDecimal;

@Data
public class SmsDailyStatistics implements Serializable {

    private static final long serialVersionUID = 1L;
    @ApiParam("提交总数")
    private Long submitNumber;

    @ApiParam("拆分提交总数")
    private Long submitRealNumber;

    @ApiParam("发送成功数")
    private Long successNumber;

    @ApiParam("拆分发送成功数")
    private Long successRealNumber;

    @ApiParam("失败总数")
    private Long failNumber;

    @ApiParam("拆分发送失败数")
    private Long failRealNumber;

    @ApiParam("发送超时数")
    private Long timeoutNumber;

    @ApiParam("拆分超时总数")
    private Long timeoutRealNumber;

    @ApiParam("YEAR:yyyy,MONTH:yyyyMM,DAY:yyyyMMdd")
    private String reportTime;

    @ApiParam("序列号")
    private String cdKey;

    @ApiParam("统计指标名称")
    private String indexName;

    @ApiParam("占比: %")
    private String proportion;

    @ApiParam("占比:0.xx")
    private BigDecimal ratio;

    @ApiParam("成功率")
    private String successRate;

    @ApiParam("增长率")
    private String growthRate;

  }

上传到在xml里替换时,就

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
       xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
       xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
    <p:cSld>
        <p:bg>
            <p:bgPr>
                <a:blipFill rotWithShape="0">
                    <a:blip r:embed="rId2"/>
                    <a:stretch/>
                </a:blipFill>
                <a:effectLst/>
            </p:bgPr>
        </p:bg>
        <p:spTree>
            <p:nvGrpSpPr>
                <p:cNvPr id="1" name=""/>
                <p:cNvGrpSpPr/>
                <p:nvPr/>
            </p:nvGrpSpPr>
            <p:grpSpPr>
                <a:xfrm>
                    <a:off x="0" y="0"/>
                    <a:ext cx="0" cy="0"/>
                    <a:chOff x="0" y="0"/>
                    <a:chExt cx="0" cy="0"/>
                </a:xfrm>
            </p:grpSpPr>
            <p:sp>
                <p:nvSpPr>
                    <p:cNvPr id="49" name="文本框 5"/>
                    <p:cNvSpPr/>
                    <p:nvPr/>
                </p:nvSpPr>
                <p:spPr>
                    <a:xfrm>
                        <a:off x="3920040" y="459360"/>
                        <a:ext cx="4351320" cy="516240"/>
                    </a:xfrm>
                    <a:prstGeom prst="rect">
                        <a:avLst/>
                    </a:prstGeom>
                    <a:noFill/>
                    <a:ln w="0">
                        <a:noFill/>
                    </a:ln>
                </p:spPr>
                <p:style>
                    <a:lnRef idx="0">
                        <a:scrgbClr r="0" g="0" b="0"/>
                    </a:lnRef>
                    <a:fillRef idx="0">
                        <a:scrgbClr r="0" g="0" b="0"/>
                    </a:fillRef>
                    <a:effectRef idx="0">
                        <a:scrgbClr r="0" g="0" b="0"/>
                    </a:effectRef>
                    <a:fontRef idx="minor"/>
                </p:style>
                <p:txBody>
                    <a:bodyPr lIns="90000" tIns="45000" rIns="90000" bIns="45000" anchor="t">
                        <a:spAutoFit/>
                    </a:bodyPr>
                    <a:lstStyle/>
                    <a:p>
                        <a:pPr algn="ctr">
                            <a:lnSpc>
                                <a:spcPct val="100000"/>
                            </a:lnSpc>
                        </a:pPr>
                        <a:r>
                            <a:rPr lang="zh-CN" sz="2800" b="0" strike="noStrike" spc="-1">
                                <a:solidFill>
                                    <a:srgbClr val="484E66"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>近三月发送总量统计表</a:t>
                        </a:r>
                        <a:endParaRPr lang="en-US" sz="2800" b="0" strike="noStrike" spc="-1">
                            <a:solidFill>
                                <a:srgbClr val="000000"/>
                            </a:solidFill>
                            <a:latin typeface="Arial"/>
                        </a:endParaRPr>
                    </a:p>
                </p:txBody>
            </p:sp>
            <p:sp>
                <p:nvSpPr>
                    <p:cNvPr id="50" name="文本框 6"/>
                    <p:cNvSpPr/>
                    <p:nvPr/>
                </p:nvSpPr>
                <p:spPr>
                    <a:xfrm>
                        <a:off x="824760" y="5923440"/>
                        <a:ext cx="10541160" cy="272160"/>
                    </a:xfrm>
                    <a:prstGeom prst="rect">
                        <a:avLst/>
                    </a:prstGeom>
                    <a:noFill/>
                    <a:ln w="0">
                        <a:noFill/>
                    </a:ln>
                </p:spPr>
                <p:style>
                    <a:lnRef idx="0">
                        <a:scrgbClr r="0" g="0" b="0"/>
                    </a:lnRef>
                    <a:fillRef idx="0">
                        <a:scrgbClr r="0" g="0" b="0"/>
                    </a:fillRef>
                    <a:effectRef idx="0">
                        <a:scrgbClr r="0" g="0" b="0"/>
                    </a:effectRef>
                    <a:fontRef idx="minor"/>
                </p:style>
                <p:txBody>
                    <a:bodyPr lIns="90000" tIns="45000" rIns="90000" bIns="45000" anchor="t">
                        <a:spAutoFit/>
                    </a:bodyPr>
                    <a:lstStyle/>
                    <a:p>
                        <a:pPr>
                            <a:lnSpc>
                                <a:spcPct val="100000"/>
                            </a:lnSpc>
                        </a:pPr>
                        <a:r>
                            <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="97">
                                <a:solidFill>
                                    <a:srgbClr val="808080"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>*</a:t>
                        </a:r>
                        <a:r>
                            <a:rPr lang="zh-CN" sz="1200" b="0" strike="noStrike" spc="97">
                                <a:solidFill>
                                    <a:srgbClr val="808080"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>较上一月增长率计算公式为:</a:t>
                        </a:r>
                        <a:r>
                            <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="97">
                                <a:solidFill>
                                    <a:srgbClr val="808080"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>(</a:t>
                        </a:r>
                        <a:r>
                            <a:rPr lang="zh-CN" sz="1200" b="0" strike="noStrike" spc="97">
                                <a:solidFill>
                                    <a:srgbClr val="808080"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>上月短信发送总量</a:t>
                        </a:r>
                        <a:r>
                            <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="97">
                                <a:solidFill>
                                    <a:srgbClr val="808080"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>-</a:t>
                        </a:r>
                        <a:r>
                            <a:rPr lang="zh-CN" sz="1200" b="0" strike="noStrike" spc="97">
                                <a:solidFill>
                                    <a:srgbClr val="808080"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>上上月短信发送总量</a:t>
                        </a:r>
                        <a:r>
                            <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="97">
                                <a:solidFill>
                                    <a:srgbClr val="808080"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>)/</a:t>
                        </a:r>
                        <a:r>
                            <a:rPr lang="zh-CN" sz="1200" b="0" strike="noStrike" spc="97">
                                <a:solidFill>
                                    <a:srgbClr val="808080"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>上月短信发送总量</a:t>
                        </a:r>
                        <a:r>
                            <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="97">
                                <a:solidFill>
                                    <a:srgbClr val="808080"/>
                                </a:solidFill>
                                <a:latin typeface="微软雅黑"/>
                                <a:ea typeface="微软雅黑"/>
                            </a:rPr>
                            <a:t>*100%</a:t>
                        </a:r>
                        <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                            <a:solidFill>
                                <a:srgbClr val="000000"/>
                            </a:solidFill>
                            <a:latin typeface="Arial"/>
                        </a:endParaRPr>
                    </a:p>
                </p:txBody>
            </p:sp>
            <p:graphicFrame>
                <p:nvGraphicFramePr>
                    <p:cNvPr id="51" name="表格 8"/>
                    <p:cNvGraphicFramePr/>
                    <p:nvPr/>
                </p:nvGraphicFramePr>
                <p:xfrm>
                    <a:off x="1828800" y="2096640"/>
                    <a:ext cx="8730720" cy="3069720"/>
                </p:xfrm>
                <a:graphic>
                    <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table">
                        <a:tbl>
                            <a:tblPr/>
                            <a:tblGrid>
                                <a:gridCol w="1455120">
                                    <a:extLst>
                                        <a:ext uri="{9D8B030D-6E8A-4147-A177-3AD203B41FA5}">
                                            <a16:colId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" val="20000"/>
                                        </a:ext>
                                    </a:extLst>
                                </a:gridCol>
                                <a:gridCol w="1455120">
                                    <a:extLst>
                                        <a:ext uri="{9D8B030D-6E8A-4147-A177-3AD203B41FA5}">
                                            <a16:colId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" val="20001"/>
                                        </a:ext>
                                    </a:extLst>
                                </a:gridCol>
                                <a:gridCol w="1455120">
                                    <a:extLst>
                                        <a:ext uri="{9D8B030D-6E8A-4147-A177-3AD203B41FA5}">
                                            <a16:colId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" val="20002"/>
                                        </a:ext>
                                    </a:extLst>
                                </a:gridCol>
                                <a:gridCol w="1455120">
                                    <a:extLst>
                                        <a:ext uri="{9D8B030D-6E8A-4147-A177-3AD203B41FA5}">
                                            <a16:colId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" val="20003"/>
                                        </a:ext>
                                    </a:extLst>
                                </a:gridCol>
                                <a:gridCol w="1455120">
                                    <a:extLst>
                                        <a:ext uri="{9D8B030D-6E8A-4147-A177-3AD203B41FA5}">
                                            <a16:colId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" val="20004"/>
                                        </a:ext>
                                    </a:extLst>
                                </a:gridCol>
                                <a:gridCol w="1455120">
                                    <a:extLst>
                                        <a:ext uri="{9D8B030D-6E8A-4147-A177-3AD203B41FA5}">
                                            <a16:colId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" val="20005"/>
                                        </a:ext>
                                    </a:extLst>
                                </a:gridCol>
                            </a:tblGrid>
                            <a:tr h="1071720">
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="100000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>日期</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnT>
                                        <a:lnB w="38160">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:schemeClr val="accent2"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="150000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>发送成功数</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="150000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>(拆分前</a:t>
                                            </a:r>
                                            <a:r>
                                                <a:rPr lang="en-US" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>/</a:t>
                                            </a:r>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>拆分后)</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr marL="90000" marR="90000" anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnT>
                                        <a:lnB w="38160">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:srgbClr val="5EC9C5"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="150000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>发送失败数</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="150000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>(拆分前</a:t>
                                            </a:r>
                                            <a:r>
                                                <a:rPr lang="en-US" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>/</a:t>
                                            </a:r>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>拆分后)</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr marL="90000" marR="90000" anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnT>
                                        <a:lnB w="38160">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:schemeClr val="accent2"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="150000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>发送总数</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="150000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>(拆分前</a:t>
                                            </a:r>
                                            <a:r>
                                                <a:rPr lang="en-US" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>/</a:t>
                                            </a:r>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>拆分后)</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr marL="90000" marR="90000" anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnT>
                                        <a:lnB w="38160">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:schemeClr val="accent2"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="100000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>成功率</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr marL="90000" marR="90000" anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnT>
                                        <a:lnB w="38160">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:schemeClr val="accent2"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="150000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>较上一月</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="150000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="zh-CN" sz="1200" b="1" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:srgbClr val="404040"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>增长率</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr marL="90000" marR="90000" anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnT>
                                        <a:lnB w="38160">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:schemeClr val="accent2"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:extLst>
                                    <a:ext uri="{0D108BD9-81ED-4DB2-BD59-A6C34878D82A}">
                                        <a16:rowId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" val="10000"/>
                                    </a:ext>
                                </a:extLst>
                            </a:tr>
                            <#list lastThreeDayList as day>
                            <a:tr h="666000">
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="100000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:schemeClr val="dk1"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>${day.reportTime}</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="38160" cap="flat" cmpd="sng" algn="ctr">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                            <a:round/>
                                            <a:headEnd type="none" w="med" len="med"/>
                                            <a:tailEnd type="none" w="med" len="med"/>
                                        </a:lnT>
                                        <a:lnB w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:srgbClr val="CEE6EE"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="100000"/>
                                                </a:lnSpc>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:schemeClr val="dk1"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>${day.successNumber!"0"}/${day.successRealNumber!"0"}</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="38160" cap="flat" cmpd="sng" algn="ctr">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                            <a:round/>
                                            <a:headEnd type="none" w="med" len="med"/>
                                            <a:tailEnd type="none" w="med" len="med"/>
                                        </a:lnT>
                                        <a:lnB w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:srgbClr val="CEE6EE"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="100000"/>
                                                </a:lnSpc>
                                                <a:tabLst>
                                                    <a:tab pos="0" algn="l"/>
                                                </a:tabLst>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:schemeClr val="dk1"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>${day.failNumber!"0"}/${day.failRealNumber!"0"}</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="38160" cap="flat" cmpd="sng" algn="ctr">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                            <a:round/>
                                            <a:headEnd type="none" w="med" len="med"/>
                                            <a:tailEnd type="none" w="med" len="med"/>
                                        </a:lnT>
                                        <a:lnB w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:srgbClr val="CEE6EE"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="100000"/>
                                                </a:lnSpc>
                                                <a:tabLst>
                                                    <a:tab pos="0" algn="l"/>
                                                </a:tabLst>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:schemeClr val="dk1"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>${day.submitNumber!"0"}/${day.submitRealNumber!"0"}</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="38160" cap="flat" cmpd="sng" algn="ctr">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                            <a:round/>
                                            <a:headEnd type="none" w="med" len="med"/>
                                            <a:tailEnd type="none" w="med" len="med"/>
                                        </a:lnT>
                                        <a:lnB w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:srgbClr val="CEE6EE"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="100000"/>
                                                </a:lnSpc>
                                                <a:tabLst>
                                                    <a:tab pos="0" algn="l"/>
                                                </a:tabLst>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:schemeClr val="dk1"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>${day.successRate!"-"}</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="38160" cap="flat" cmpd="sng" algn="ctr">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                            <a:round/>
                                            <a:headEnd type="none" w="med" len="med"/>
                                            <a:tailEnd type="none" w="med" len="med"/>
                                        </a:lnT>
                                        <a:lnB w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:srgbClr val="CEE6EE"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:tc>
                                    <a:txBody>
                                        <a:bodyPr/>
                                        <a:lstStyle/>
                                        <a:p>
                                            <a:pPr algn="ctr">
                                                <a:lnSpc>
                                                    <a:spcPct val="100000"/>
                                                </a:lnSpc>
                                                <a:tabLst>
                                                    <a:tab pos="0" algn="l"/>
                                                </a:tabLst>
                                            </a:pPr>
                                            <a:r>
                                                <a:rPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                    <a:solidFill>
                                                        <a:schemeClr val="dk1"/>
                                                    </a:solidFill>
                                                    <a:latin typeface="微软雅黑"/>
                                                    <a:ea typeface="微软雅黑"/>
                                                </a:rPr>
                                                <a:t>${day.growthRate!"-"}</a:t>
                                            </a:r>
                                            <a:endParaRPr lang="en-US" sz="1200" b="0" strike="noStrike" spc="-1">
                                                <a:solidFill>
                                                    <a:srgbClr val="000000"/>
                                                </a:solidFill>
                                                <a:latin typeface="Arial"/>
                                            </a:endParaRPr>
                                        </a:p>
                                    </a:txBody>
                                    <a:tcPr anchor="ctr">
                                        <a:lnL w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnL>
                                        <a:lnR w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnR>
                                        <a:lnT w="38160" cap="flat" cmpd="sng" algn="ctr">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                            <a:round/>
                                            <a:headEnd type="none" w="med" len="med"/>
                                            <a:tailEnd type="none" w="med" len="med"/>
                                        </a:lnT>
                                        <a:lnB w="12240">
                                            <a:solidFill>
                                                <a:srgbClr val="FFFFFF"/>
                                            </a:solidFill>
                                            <a:prstDash val="solid"/>
                                        </a:lnB>
                                        <a:solidFill>
                                            <a:srgbClr val="CEE6EE"/>
                                        </a:solidFill>
                                    </a:tcPr>
                                </a:tc>
                                <a:extLst>
                                    <a:ext uri="{0D108BD9-81ED-4DB2-BD59-A6C34878D82A}">
                                        <a16:rowId xmlns:a16="http://schemas.microsoft.com/office/drawing/2014/main" val="10001"/>
                                    </a:ext>
                                </a:extLst>
                            </a:tr>
                        </#list>
                    </a:tbl>
                </a:graphicData>
            </a:graphic>
        </p:graphicFrame>
        <p:sp>
            <p:nvSpPr>
                <p:cNvPr id="52" name="矩形 12"/>
                <p:cNvSpPr/>
                <p:nvPr/>
            </p:nvSpPr>
            <p:spPr>
                <a:xfrm>
                    <a:off x="5557320" y="1000080"/>
                    <a:ext cx="1079640" cy="35640"/>
                </a:xfrm>
                <a:prstGeom prst="rect">
                    <a:avLst/>
                </a:prstGeom>
                <a:solidFill>
                    <a:srgbClr val="1CC6C1"/>
                </a:solidFill>
                <a:ln>
                    <a:noFill/>
                </a:ln>
            </p:spPr>
            <p:style>
                <a:lnRef idx="2">
                    <a:schemeClr val="accent1">
                        <a:shade val="50000"/>
                    </a:schemeClr>
                </a:lnRef>
                <a:fillRef idx="1">
                    <a:schemeClr val="accent1"/>
                </a:fillRef>
                <a:effectRef idx="0">
                    <a:schemeClr val="accent1"/>
                </a:effectRef>
                <a:fontRef idx="minor"/>
            </p:style>
            <p:txBody>
                <a:bodyPr lIns="90000" tIns="-9000" rIns="90000" bIns="-9000" anchor="ctr">
                    <a:noAutofit/>
                </a:bodyPr>
                <a:lstStyle/>
                <a:p>
                    <a:pPr algn="ctr">
                        <a:lnSpc>
                            <a:spcPct val="100000"/>
                        </a:lnSpc>
                    </a:pPr>
                    <a:endParaRPr lang="en-US" sz="1800" b="0" strike="noStrike" spc="-1">
                        <a:solidFill>
                            <a:schemeClr val="lt1"/>
                        </a:solidFill>
                        <a:latin typeface="Corbel"/>
                    </a:endParaRPr>
                </a:p>
            </p:txBody>
        </p:sp>
    </p:spTree>
</p:cSld>
<p:clrMapOvr>
<a:masterClrMapping/>
</p:clrMapOvr>
        </p:sld>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本项目是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。该系统主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者,包含项目源码、数据库脚本、项目说明等,有论文参考,可以直接作为毕设使用。 后台框架采用SpringBoot,数据库使用MySQL,开发环境为JDK、IDEA、Tomcat。项目经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。 该系统的功能主要包括商品管理、订单管理、用户管理等模块。在商品管理模块中,可以添加、修改、删除商品信息;在订单管理模块中,可以查看订单详情、处理订单状态;在用户管理模块中,可以注册、登录、修改个人信息等。此外,系统还提供了数据统计功能,可以对销售数据进行统计和分析。 技术实现方面,前端采用Vue框架进行开发,后端使用SpringBoot框架搭建服务端应用。数据库采用MySQL进行数据存储和管理。整个系统通过前后端分离的方式实现,提高了系统的可维护性和可扩展性。同时,系统还采用了一些流行的技术和工具,如MyBatis、JPA等进行数据访问和操作,以及Maven进行项目管理和构建。 总之,本系统是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。系统经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。
Java中有许多开源的PDF操作库,如iText、Apache PDFBox等,可以用来操作PDF文件。使用这些库,您可以先创建一个PDF模板文件,然后使用Java代码动态地替换模板中的变量,最终生成新的PDF文件。 以下是一个简单的示例代码,演示如何使用iText库生成一个包含动态内容的PDF文件: ```java import com.itextpdf.text.Document; import com.itextpdf.text.Element; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; import java.io.FileOutputStream; import java.util.Map; public class PdfTemplate { public static void fillTemplate(String templatePath, String outputPath, Map<String, String> data) { try { // 读取PDF模板文件 PdfReader reader = new PdfReader(templatePath); // 创建输出流 FileOutputStream outputStream = new FileOutputStream(outputPath); // 创建PDF文档对象 Document document = new Document(); // 创建PDF写入器 PdfStamper stamper = new PdfStamper(reader, outputStream); // 获取PDF页面 PdfContentByte content = stamper.getOverContent(1); // 替换PDF中的变量 for (Map.Entry<String, String> entry : data.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); // 替换文本框的值 content.beginText(); content.setFontAndSize(null, 12); content.showTextAligned(Element.ALIGN_LEFT, value, 0, 0, 0); content.endText(); } // 关闭PDF写入器和输出流 stamper.close(); outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 要使用此代码,您需要将iText库添加到您的项目中,并将PDF模板路径、输出路径和替换数据传递给`fillTemplate`方法。在模板中,您可以使用文本框或其他元素来标识要替换的变量,并将其与Java代码中的键关联。然后,使用`PdfContentByte`对象将值插入到文本框中,最终生成新的PDF文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值