java poi 实现生成ppt

2 篇文章 0 订阅
1 篇文章 0 订阅

完整示例 

package com.enation.app.javashop.buyer.api.goodsmkt;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.io.*;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.common.collect.Lists;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.ss.usermodel.Picture;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xslf.usermodel.*;

import static org.apache.poi.sl.usermodel.TextParagraph.TextAlign.CENTER;
import static org.apache.poi.sl.usermodel.VerticalAlignment.MIDDLE;

public class DomeTest {

    public static void main(String[] args) throws Exception {
        //创建ppt对象
        XMLSlideShow ppt = new XMLSlideShow();
        //首页
        XSLFSlide slide0 = ppt.createSlide();
        HashMap<String, Object> dataMap = new HashMap<>();
        dataMap.put("seismicYear","seismicYear");
        dataMap.put("seismicMonth","seismicMonth");
        dataMap.put("seismicDay","seismicDay");
        dataMap.put("place","place");
        dataMap.put("magnitude","magnitude");
        fillIndexContent(slide0, dataMap);

        XSLFSlide slide = ppt.createSlide();
        /** 生成二进制数组 **/
        String imagePath = "F://disorder/desktop/company/title.png";
        InputStream is = new FileInputStream(imagePath);
        byte[] bytes = IOUtils.toByteArray(is);
        XSLFPictureData idx = ppt.addPicture(bytes, XSLFPictureData.PictureType.PNG);
        slide.createPicture(idx);

        //目录
        //内容5张ppt
        for (int z = 1; z < 6; z++) {
            XSLFSlide slide2 = ppt.createSlide();
            XSLFTextBox xslfTextBox = slide2.createTextBox();
            XSLFTextParagraph paragraph = xslfTextBox.addNewTextParagraph();
            XSLFTextRun xslfTextRun = paragraph.addNewTextRun();
            xslfTextRun.setFontSize(36.0);
            xslfTextRun.setFontFamily("\u5b8b\u4f53 (\u6b63\u6587)");
            xslfTextRun.setText(z + "");

            // 模拟数据
            Object[][] datas = {{"区域产品销售额","",""},{"区域", "总销售额(万元)", "总利润(万元)简单的表格"}, {"江苏省" , 9045,  2256}, {"广东省", 3000, 690}};
            
            // 生成table
            XSLFTable table = slide2.createTable();//创建表格
            table.setAnchor(new Rectangle2D.Double(10, 50, 0, 0));
            for(int i = 0; i < datas.length; i++) {
                XSLFTableRow tableRow = table.addRow(); //创建表格行
                for(int j = 0; j < datas[i].length; j++) {
                    XSLFTableCell tableCell = tableRow.addCell();//创建表格单元格
                    XSLFTextParagraph p = tableCell.addNewTextParagraph();
                    XSLFTextRun tr = p.addNewTextRun();
                    tr.setText(String.valueOf(datas[i][j]));

                    tableCell.setFillColor(Color.getColor("0xdd7e6b"));
                    p.setTextAlign(CENTER);
                    tableCell.setVerticalAlignment(MIDDLE);

                    if(i == datas.length - 1 && j == 3-1) {
                        tr.setFontSize(16.0);
                        tr.setBold(true);
                        tr.setItalic(true);
                        tr.setUnderlined(true);
                        tr.setFontFamily("\u5b8b\u4f53");
                        tr.setFontColor(Color.RED);
                    }
                }
                tableRow.setHeight(30);
            }
            //设置列宽
            table.setColumnWidth(0, 150);
            table.setColumnWidth(1, 150);
            table.setColumnWidth(2, 250);

            //合并单元格
            table.mergeCells(0, 0, 0, 2);

            //创建一个文本链接
            XSLFTextBox linkText = slide2.createTextBox();
            linkText.setAnchor(new Rectangle2D.Double(430, 310, 990, 0));
            XSLFTextRun r = linkText.addNewTextParagraph().addNewTextRun();
            r.setText("Apache POI");

            XSLFHyperlink link = r.createHyperlink();
            link.setAddress("http://poi.apache.org");
        }

        ppt.write(new FileOutputStream("F:\\disorder/desktop/company/ppt8.pptx"));
    }

    /**
     * 填充首页内容
     *
     * @param xslfSlide
     * @param dataMap
     */
    private static void fillIndexContent(XSLFSlide xslfSlide, HashMap<String, Object> dataMap) throws IOException {
        //文本框
        XSLFTextBox xslfTextBox = xslfSlide.createTextBox();
        xslfTextBox.setAnchor(new Rectangle(65, 25, 616, 480));
        xslfTextBox.setFlipHorizontal(true);

        //段落
        XSLFTextParagraph paragraph = xslfTextBox.addNewTextParagraph();
        paragraph.setTextAlign(CENTER);
        //标题
        XSLFTextRun xslfTextRun = paragraph.addNewTextRun();
        xslfTextRun.setBold(true);
        xslfTextRun.setFontSize(44.0);
        //宋体 (标题)
        xslfTextRun.setFontFamily("\u5b8b\u4f53 (\u6807\u9898)");
        String title = "1234";
        title = "zhaoz";
        xslfTextRun.setText(title);

        //制作单位
        XSLFTextRun xslfTextRun2 = paragraph.addNewTextRun();
        xslfTextRun2.setBold(false);
        xslfTextRun2.setFontSize(24.0);
        //宋体 (正文)
        xslfTextRun2.setFontFamily("\u5b8b\u4f53 (\u6b63\u6587)");
        xslfTextRun2.setText("12345\n\n\n\n\n\n\n\n");
        //生成时间
        XSLFTextRun xslfTextRun3 = paragraph.addNewTextRun();
        xslfTextRun3.setBold(true);
        xslfTextRun3.setFontSize(44.0);
        //宋体 (正文)
        xslfTextRun3.setFontFamily("\u5b8b\u4f53 (\u6807\u9898)");
        xslfTextRun3.setText(LocalDate.now().toString());
    }
}

推荐博客:https://blog.csdn.net/Alsyuan/article/details/82464141 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值