中文

🧡介绍

PPTShow是一款免费的Java生成PPT开源工具包。它在任何系统上完全不依赖其他程序的情况下能够帮助用户使用代码生成PPT文件。但是PPT生成图片、PPT生成视频功能是通过调用微软Office实现的,所以仅在Windows下可用。

📘我们支持

  1. 在PPT分享到页面;
  2. 在页面中添加文本、图形、线段、图片;
  3. 文本支持分文本文本,支持同一行中出现多种样式的文本;
  4. 支持背景音乐;
  5. 支持PPT页面背景样式设置;
  6. 支持元素和页面动画,元素动画支持顺序调整和时刻设置;
  7. 支持常见的元素样式设置;
  8. 在Windows环境下支持PPT转视频和PPT转图片(请确保已经安装并激活微软Office)

📘我们不支持

  1. 只能生成pptx文件,不支持生成ppt文件
  2. 不推荐使用PPTShow读取PPT文件(读取目前还一个demo状态,不适合生产环境使用)
  3. 暂且不论。

📘待办事项

我们目前计划中即将开发的有:

  1. 遗.
  2. 嵌入式支持

📘常见问题

Q:是否可以用于商业用途?
A:PPTShow遵循 Apache License 2.0 开源协议允许用户用于包括但不限于商业使用、个人学习使用的使用用途

Q:是否可以在Linux环境生成PPT文档?
A:支持

Q:PPT生成图片是否会出现中文乱码或者字体变默认情况?
A:不会出现,我们生成图片是调用Office的系统生成,所以担心会出现类似问题

Q:是否可以完成设置元素动画顺序?
A:支持设置顺序,且支持同时出现、上一个动画后出现等常见的操作

Q:PPTShow是否保证可用性或者对因代码问题导致的损失负责?
A:PPTShow是否对项目进行可用性保证,也不对任何损失负责,请开发者使用前自行测试功能

🧡快速开始

本教程将引导您通过Java代码生成一个包含HelloWorld的PPT文件

📘加入Jar

您可以通过maven或者手动导入的方式引入jar包

Maven坐标【推荐】

<dependency>
  <groupId>cc.pptshow</groupId>
  <artifactId>pptshow</artifactId>
  <version>1.3</version>
</dependency>

下载并手动导入【不推荐】

下载地址:https://s01.oss.sonatype.org/service/local/repositories/releases/content/cc/pptshow/pptshow/1.3/pptshow-1.3.jar

📘编写代码

新建一个名为Main Java类的文件,

将下面的代码复制到项目中之后运行,

你就获得了包含HelloWorld的PPT文件!

import cc.pptshow.ppt.domain.*;
import cc.pptshow.ppt.element.impl.*;
import cc.pptshow.ppt.show.PPTShow;
import cc.pptshow.ppt.show.PPTShowSide;

public class Main {

   public static void main(String[] args) {
       //新建一个PPT对象
       PPTShow pptShow = PPTShow.build();
       //新建一页PPT
       PPTShowSide side = PPTShowSide.build();

       //创建一个行内文本对象,文字设定为Hello World
       PPTInnerText pptInnerText = PPTInnerText.build("Hello World");
       //创建一个行内文本样式对象,让文本颜色为红色
       PPTInnerTextCss pptInnerTextCss = PPTInnerTextCss.build().setColor("FF00000");
       //绑定行内文本和样式对象
       pptInnerText.setCss(pptInnerTextCss);

       //通过行内文本创建一个行文本对象,并通过行文本对象创建文本对象
       PPTText pptText = PPTText.build(PPTInnerLine.build(pptInnerText));
       //在PPT页面中添加文本对象
       side.add(pptText);
       //在PPT里面添加PPT页面
       pptShow.add(side);

       //输出到文件
       pptShow.toFile("C:/Users/qrp19/Desktop/test4.pptx");
   }

}

📘生成文件

如果顺利的话,您将获得类似下图的文件

你好世界

🧡入门教程

核心思想

PPTShow并不是常见的POI等PPT生成程序,PPTShow几乎完全辉映了PPT本身底层的XML代码。

PPTShow认为每一个不可再分的小元素都是一个对象,不同体系的对象间塑造了整个PPT。

就像下图所示,我们认为PPT的整体、不同页面、页面中的各种元素都是一个对象。

瘤胃1

每个元素对象都有一个对应的样式表对象,通过元素对象.setCss(样式表对象)的方式就可以实现样式的绑定。

| .对象 | . 观念 | 頁面对象 |
| ————- | ——————————- | ————— |
| PPT展示侧边栏 | PPT新闻 | PPTSideCss |
| 聚四氢呋喃 | PPT图片 | PPTI 网页 |
| PPT形状 | PPT图形 | PPTShapeCss |
| PPT线条 | PPT线条 | PPTLineCss |
| PPT文本 | PPT文本 | PPT文本CSS |
| PPT内线 | PPT文本中的段落 | PPTInnerLineCss |
| PPT内部文字 | PPT文本段落中的一个最小样式单元 | PPT内部文本CSS |

📘注意事项

  1. PPTShow对象使用完毕需要手动调用 close()方法以删除临时文件
  2. 本项目所有元素对象和样式表对象均实现了cloneable接口,且由此深复制

🧡常用对象

📘PPT文件—PPTShow

PPTShow对象代表一个PPT文件,系统会在临时目录构建有关文件的必要组成部分,并在用户指定输出的时候将拼合好的文件输出到指定的位置。

因此您必须手动执行关闭操作,以删除临时目录文件,否则临时目录文件越堆越多可能导致磁盘空间不足。

创建PPTShow

您可以通过以下两种方式创建一个PPTShow对象,它们没有任何区别。

PPTShow pptShow = PPTShow.build();
```
PPTShow pptShow = new PPTShow();

插入一张PPT

PPTShowSide是PPT页面对象,在后面的文档中已经提到过。

插入到文档页面消耗:

void add(PPTShowSide pptShowSide)

插入到文档中间页面:

/**
* indexId 表示要插入指定页面的索引,索引从0开始
*/
void add(PPTShowSide pptShowSide, int indexId)

生成文件

根据PPTShow内容,生成一个pptx格式的PPT文件

/**
* path 输出路径,请以.pptx结尾
*/
void toFile(String path)

网友评论:

关闭对象后缓存将被清理,被关闭的对象无法生成文件

void close()

📘PPT页面对象——PPTShowSide

PPT页面对象表示一个PPT的页面,一个页面中通常由很多元素组成,很多个页面组成了PPT

创建对象

您可以通过以下两种方式创建一个PPTShowSide对象,它们没有任何区别。

PPTShowSide pptShowSide = PPTShowSide.build();
```
PPTShowSide pptShowSide = new PPTShowSide();

.

元素遵循索引 小的元素在下层,索引大的元素在上层

附加信息

void add(PPTElement pptElement)

添加一个索引为指定id的元素

/**
* indexId 表示要插入指定页面的索引,索引从0开始
*/
void add(PPTElement pptElement, int indexId)

将List中全部元素都添加进来

void addAll(List<PPTElement> pptElements)

阅读列表

通过Get方法读取当前元素列表信息

List<PPTElement> getElements()

修改或读取背景音乐

您可以通过backgroundMusic属性来设置幻灯片的背景音乐

目前仅支持播放到哪一张幻灯片结束,暂时不支持指定到哪一张幻灯片结束

/**
* 背景音乐文件
*/
@Getter
@Setter
private String backgroundMusic;

设定页面自动换页

您可以通过autoPagerTime属性设置当前幻灯片自动切换到下一页的时间

单位:毫秒,默认为0,表示不会自动换页

/**
* 自动换页面的时间
* 单位毫秒,默认为0表示不会自动换页
*/
@Getter
@Setter
private long autoPagerTime = 0L;

设置切换动画

您可以通过设置pageSwitchingType来设置幻灯片切换的动画效果

默认为切出效果(简单没有任何风格,直接硬切换)

private PageSwitchingType pageSwitchingType = PageSwitchingType.DEFAULT;

设定对应枚举类 PageSwitchingType

枚举类中包含了幻灯片的动作样式中文名(参数1),您可以自行对照或测试使用。

DEFAULT("切出(默认效果)", PageSwitchingType.DEFAULT_XML),
SMOOTH("平滑", PageSwitchingType.SMOOTH_XML),
FADE_OUT("淡出", PageSwitchingType.FADE_OUT_XML),
ERASE("擦除", PageSwitchingType.ERASE_XML),
SHAPE("形状", PageSwitchingType.SHAPE_XML),
DISSOLVE("溶解", PageSwitchingType.DISSOLVE_XML),
NEWS_FLASH("新闻快报", PageSwitchingType.NEWS_FLASH_XML),
SPOKES("轮辐", PageSwitchingType.SPOKES_XML),
BLIND("百叶窗", PageSwitchingType.BLIND_XML),
COMB("梳理", PageSwitchingType.COMB_XML),
TAKING("抽出", PageSwitchingType.TAKING_XML),
SEGMENTATION("分割", PageSwitchingType.SEGMENTATION_XML),
LINE("线条", PageSwitchingType.LINE_XML),
BOARD("棋盘", PageSwitchingType.BOARD_XML),
LAUNCH("推出", PageSwitchingType.LAUNCH_XML),
INSERT("插入", PageSwitchingType.INSERT_XML),
PAGE_CURLING("页面卷曲", PageSwitchingType.PAGE_CURLING_XML),
CUBE("立方体", PageSwitchingType.CUBE_XML),
BOX("框", PageSwitchingType.BOX_XML),
PLAIN("飞机", PageSwitchingType.PLAIN_XML),
OPEN_DOOR("开门", PageSwitchingType.OPEN_DOOR_XML),
STRIPPING("剥离", PageSwitchingType.STRIPPING_XML),
RANDOM("随机", PageSwitchingType.RANDOM_XML)

设置样式

PPTSideCssPPTShowSide对应的样式表

目前只有一个属性允许用户自定义

背景 背景

private Background background;

背景样式,请参考【参考文档】-【通用样式】-【background背景】

📘PPT图片——PPTImg

PPTImg对象表示PPT中的图片元素

PPTImg

您可以通过以下两种方式创建一个PPTIMg对象,它们没有任何区别。

PPTImg pptImg = PPTImg.build();
```
PPTImg pptImg = new PPTImg();

您也可以在创建的时候指定图片,有两种方式可以创建PPTImg对象,它们没有任何区别

PPTImg pptImg = PPTImg.build(String file);
```
PPTImg pptImg = new PPTImg(String file);

图片

设置当前PPTImg对象对应的图片是什么,您可以在创建对象的时候直接指定,您也可以在创建后手动调用下面的方法指定嵌入图片路径。

支持png、jpg、gif、svg;不支持webp格式

注意:仅支持本地文件绝对路径,不支持如http开头的在线图片信息!

PPTImg setFile(String file)

设计动画

//进场动画
private InAnimation inAnimation;
//出场动画
private OutAnimation outAnimation;

请参考【参考文档】-【通用样式】-【InAnimation进场动画】和【OutAnimation出场动画】内容进行设置

读取图片路径

获取PPTImg对象的图片路径

String getFile()

設定樣式

您可以通过css属性来设置样式信息,接下来我们将详细讲解PPTImgCss属性及含义。

@Getter
@Setter
private PPTImgCss css;

PPTI 网页

PPTImg对应的样式表对象

左边

private double left;

距离页面左侧距离,单位cm

顶部

private double top;

距离页面顶边距离,单位cm

宽度

private double width;

元素宽度,单位cm

高度

private double height;

密度高度,平方厘米

切割

private Cutting cutting;

裁剪样式,请参考【参考文档】-【通用样式】-【裁剪裁剪】

边界

private Border border;

未知风格,请参考【参考文档】-【通用风格】-【边框】

阴影

private Shadow shadow;

肥胖风格,请参考【参考文档】-【通用风格】-【阴影】

姓名

private String name = "图片";

元素名称,默认为“图片”,正常投影PPT时看不到此信息

在设置元素动画等场景下,会在动画中展示元素名称信息

在同一页幻灯片中允许出现重复名称

描述

private String describe = "image";

元素描述,默认为“image”,正常投影PPT时看不到此信息

在同一页幻灯片中允许出现重复描述

角度

private double angle;

旋转角度,指顺时针旋转角度,默认为0表示不旋转。

合法取值范围:0 ≤ 角度 < 360

删除颜色

private String removeColor;

透明颜色,格式为16设置6个字符表示的颜色值,不带#号,例如:FFFFFF

例如白底图可以设置为白色;此属性对png图片无效

📘PPT图形——PPTShape

PPTShape对象表示PPT中的图形元素

创建PPT形状

您可以通过以下两种方式创建一个PPTIMg对象,它们没有任何区别。

PPTShape pptShape = PPTShape.build();
```
PPTShape pptShape = new PPTShape();

设计动画

//进场动画
private InAnimation inAnimation;
//出场动画
private OutAnimation outAnimation;

请参考【参考文档】-【通用样式】-【InAnimation进场动画】和【OutAnimation出场动画】内容进行设置

設定樣式

您可以通过css属性来设置样式信息,接下来我们将详细讲解PPTImgCss属性及含义。

@Getter
@Setter
private PPTShapeCss css;

PPTShapeCss

PPTShape对应的样式表对象

形状

private Shape shape = new Rect();

图形形状,如果不做特殊设置,将默认为直角曲线。

Shape是一个抽象类,它有以下图形实现:

形状1

Rect 直角 矩形

直角规划没有更多便利设置的参数

当且仅当设定宽度和高度相同的时候展示为托盘

椭圆

简单形式没有更多便利设置的功能

当且仅当设定宽度和高度相同的时候显示为正圆形

RoundRect 圆角矩形

可以通过get和set方法设置圆角范围参数,允许的范围是0 - 50,表示0%-50%

private double fillet;

形状2

平行四边形 平行四边形

可以通过get和set方法设置平行四边形的倾斜程度,允许的范围是0-100,表示0% - 100%

private double fillet;

形状3

SelfShape 自定义图形

系统未实现的图形临时解决方案,不推荐使用

/**
* 用户自己定义的一段XML
*/
private String custGeom;

用户自定义一段XML来确定图形信息,内容会直接写入文件,不会进行除非空外部的任何合法性校验

左边

private double left;

距离页面左侧距离,单位cm

顶部

private double top;

距离页面顶边距离,单位cm

宽度

private double width;

元素宽度,单位cm

高度

private double height;

密度高度,平方厘米

背景

private Background background;

背景样式,请参考【参考文档】-【通用样式】-【background背景】

边界

private Border border;

未知风格,请参考【参考文档】-【通用风格】-【边框】

姓名

private String name = "图片";

元素名称,默认为“图形”,正常投影PPT时看不到此信息

在设置元素动画等场景下,会在动画中展示元素名称信息

在同一页幻灯片中允许出现重复名称

角度

private double angle;

旋转角度,指顺时针旋转角度,默认为0表示不旋转。

合法取值范围:0 ≤ 角度 < 360

翻转X

private boolean flipX;

是否进行水平跳跃,默认不进行跳跃

翻转Y

private boolean flipY

是否进行垂直翻转,默认不进行翻转

📘PPT线段——PPTLine

PPTLine表示PPT中的线段元素

创建PPTLine

您可以通过以下方式创建一个PPTLine对象

PPTLine pptLine = new PPTLine();

设计动画

//进场动画
private InAnimation inAnimation;
//出场动画
private OutAnimation outAnimation;

请参考【参考文档】-【通用样式】-【InAnimation进场动画】和【OutAnimation出场动画】内容进行设置

设计动画

//进场动画
private InAnimation inAnimation;
//出场动画
private OutAnimation outAnimation;

请参考【参考文档】-【通用样式】-【InAnimation进场动画】和【OutAnimation出场动画】内容进行设置

設定樣式

您可以通过css属性来设置样式信息,接下来我们将详细讲解PPTImgCss属性及含义。

@Getter
@Setter
private PPTLineCss css;

PPTLineCss

PPTLine对应的样式表对象

左边

private double left;

距离页面左侧距离,单位cm

顶部

private double top;

距离页面顶边距离,单位cm

颜色

private String color = "333333";

线段颜色,16颜色,不带#号

默认为333333

行宽

private double lineWidth = 0.5;

线段的宽度,单位磅,默认0.5磅

第 1 行

宽度

private double width;

元素宽度,单位cm,垂直线宽度必须设为0

第2行

高度

private double height;

元素高度,单位cm,横线高度必须设为0

类型

private LineType type = LineType.LINE;

线段的方向,默认线段从左上角的顶点连接到右下角的顶点

如果需要从右上角连接到左下角,请设置参数为:LineType.TOP_RIGHT_BOTTOM_LEFT

第3行

📘PPT文本——PPTText

PPTText表示PPT文本元素,注意是文本元素整体,而不是其中的一部分,比如下面的虚线框区域就是一个PPT文本

文本1

如果我们希望在一个PPTText对象中包含不同的段落,如上图效果,其中包含了两个段落,分别是:PPTShow is a free open source Java native generation of PPT toolkit.support the 2010 version of the new features of PPT , does not rely on any third-party components , Linux, Windows can be used smoothly .

其中每一个段落都是一个PPTInnerLine对象。

段落中还可能存在多种文本表现风格,它们紧密挨在一起,没有换行。

比喻 2010 version和前后文本就存在差异,此时每个PPTInnerLine对象包含了三个PPTInnerText对象,其中第一个和第三个样式相同,第二个有加粗和红色特殊效果。(如下图所示,线框部分都代表一个PPTInnerText 对象)

文本2

创建PPT文本

您可以通过以下方式创建一个PPTText对象,两种方式没有任何区别:

PPTText pptText = new PPTText();
```
PPTText pptText = PPTText.build();

您还可以在创建的时候直接绑定PPTInnerLine对象集合:

只有一个PPTInnerLine时候,可以使用以下方式创建PPTText对象,两种方式没有任何区别:

PPTText pptText = new PPTText(PPTInnerLine line);
```
PPTText pptText = PPTText.build(PPTInnerLine line);

有多个的时候,可以使用以下方式创建PPTText对象,两种方式没有任何区别:

PPTText pptText = new PPTText(List<PPTInnerLine> lineList);
```
PPTText pptText = PPTText.build(List<PPTInnerLine> textList);

你还可以在创建的时候直接绑定样式文件:

PPTText pptText = new PPTText(PPTInnerLine line, PPTTextCss css);
```
PPTText pptText = PPTText.build(PPTInnerLine line, PPTTextCss css);
```
PPTText pptText = new PPTText(List<PPTInnerLine> lineList, PPTTextCss css);
```
PPTText pptText = PPTText.build(List<PPTInnerLine> textList, PPTTextCss css);

利用微电子

double findMinWidthSize()

在每个长度都不折行的情况下,最小需要的宽度

获取最小高度

double findMinHeightSize()

获取当前宽度下,最小需要的高度值。

显然构造是设定的样式中高度比最小高度小,文本另外自动溢出显示,不会影响显示。

获取全部文本

String findAllText()

获取文本对象所有段落、所有段落内容中的全部文本信息。

返回信息包含换行符,可以用换行符分隔信息,但段落内部文本无法分隔出来。

例子:

文本3

上图PPTText对象调用findAllText()方法后会获得如下文本:

PPTShow is a free open source Java native generation of PPT toolkit.
support the 2010 version of the new features of PPT. 

常见问题

在结尾处插入一段文字:

PPTText add(PPTInnerLine text)

在结尾处补充了多个段落:

PPTText addAll(Collection<PPTInnerLine> text)

您也可以直接取出段落List对象自行修改操作,支持get和set操作

@Setter
@Getter
private List<PPTInnerLine> lineList = Lists.newArrayList();

設定樣式

您可以通过css属性来设置样式信息,接下来我们将详细讲解PPTTextCss属性及含义。

@Getter
@Setter
private PPTTextCss css;

PPT文本CSS

PPTText对应的样式表对象

左边

private double left;

距离页面左侧距离,单位:cm

顶部

private double top;

距离页面顶边距离,单位:cm

宽度

private double width;

元素宽度,单位:cm,默认为最小宽度

高度

private double height;

元素高度,单位:cm,默认为最小高度

行高

private double lineHeight;

行高,单位:倍行距,默认为1

背景

private Background background

背景样式,请参考【参考文档】-【通用样式】-【background背景】

角度

private double angle;

旋转角度,指顺时针旋转角度,默认为0表示不旋转。

合法取值范围:0 ≤ 角度 < 360

姓名

private String name = "文本";

元素名称,默认为“文本”,正常投影PPT时看不到此信息

在设置元素动画等场景下,会在动画中展示元素名称信息

在同一页幻灯片中允许出现重复名称

📘PPT文本中的段落——PPTInnerLine

有关PPTTextPPTInnerLinePPTInnerText的关系,请参考PPTText文档

创建PPTInnerLine

您可以通过以下方式创建一个PPTInnerLine对象,两种方式没有任何区别:

PPTInnerLine pptInnerLine = new PPTInnerLine();
```
PPTInnerLine pptInnerLine = PPTInnerLine.build();

您还可以直接快速创建空行对象:

PPTInnerLine pptInnerLine = PPTInnerLine buildEmptyLine();
```
/** 
* num:空几行
*/
PPTInnerLine pptInnerLine = PPTInnerLine buildEmptyLine(int num);

您还可以在创建的时候直接绑定PPTInnerText对象集合:

只有一个PPTInnerText时候,可以使用以下方式创建PPTInnerLine对象,两种方式没有任何区别:

PPTInnerLine pptInnerLine = new PPTInnerLine(PPTInnerText text);
```
PPTInnerLine pptInnerLine = PPTInnerLine.build(PPTInnerText text);

有多个的时候,可以使用以下方式创建PPTInnerLine对象,两种方式没有任何区别:

PPTInnerLine pptInnerLine = new PPTInnerLine(List<PPTInnerText> textList);
```
PPTInnerLine pptInnerLine = PPTInnerLine.build(List<PPTInnerText> textList);

你还可以在创建的时候直接绑定样式文件:有任何区别:

PPTInnerLine pptInnerLine = new PPTInnerLine(PPTInnerText text, PPTInnerLineCss css);
```
PPTInnerLine pptInnerLine = PPTInnerLine.build(PPTInnerText text, PPTInnerLineCss css);
```
PPTInnerLine pptInnerLine = new PPTInnerLine(List<PPTInnerText> textList, PPTInnerLineCss css);
```
PPTInnerLine pptInnerLine = PPTInnerLine.build(List<PPTInnerText> textList, PPTInnerLineCss css);

版权归原作者所有

在结尾处插入一段文字:

PPTInnerLine add(PPTInnerText text)

在结尾处补充了多个段落:

PPTInnerLine addAll(Collection<PPTInnerText> text)

您也可以直接取出段落List对象自行修改操作,支持get和set操作

@Setter
@Getter
private List<PPTInnerText> textList = Lists.newArrayList();

設定樣式

您可以通过css属性来设置样式信息,接下来我们将详细讲解PPTInnerLineCss属性及含义。

@Getter
@Setter
private PPTInnerLineCss css;

PPTInnerLineCss

PPTInnerLine对应的样式表对象

行高

private double lineHeight;

行高,单位:倍行距,默认为1

对齐

private String align = PPTNameConstant.ALIGN_LEFT;

对齐方式,存在以下对齐方式

  • PPTNameConstant.ALIGN_LEFT左边
  • PPTNameConstant.ALIGN_RIGHT右边
  • PPTNameConstant.ALIGN_CENTER居中对齐
  • PPTNameConstant.ALIGN_JUST两国
  • PPTNameConstant.ALIGN_DIST分散式

五种类型对应下图画圈的部分,比如从左到右顺序即为上方顺序

文本4

特别说明

实际上每一行都有一个end对象,用户可以get或者set:

private PPTInnerTextEnd end

它表示行尾信息,我们十分不推荐用户自行设置有关参数,系统会自动添加行尾对象。

如果您不明白其中参数激活,请不要手动修改,如果认为当前有功能无法实现推荐提问题解决!

📘PPT文本段落中的一个样式最小单元——PPTInnerText

有关PPTTextPPTInnerLinePPTInnerText的关系,请参考PPTText文档

创建PPTInnerText

您可以通过以下方式创建一个PPTInnerText对象,两种方式没有任何区别:

PPTInnerText pptInnerText = new PPTInnerText();
```
PPTInnerText pptInnerText = PPTInnerText.build();

您还可以直接创建对象同时设置文本信息:

PPTInnerText pptInnerText = new PPTInnerText(String text);
```
PPTInnerText pptInnerText = PPTInnerText.build(String text);

您还可以同时再设置样式表:

PPTInnerText pptInnerText = new PPTInnerText(String text, PPTInnerTextCss pptInnerTextCss);
```
PPPTInnerText pptInnerText = PPTInnerText.build(String text, PPTInnerTextCss pptInnerTextCss);

设计

您可以通过文本属性设置或读取文本的内容,支持Get和Set方法

@Setter
@Getter
private String text = null;

設定樣式

您可以通过css属性来设置样式信息,接下来我们将详细讲解PPTInnerTextCss属性及含义。

@Setter
@Getter
private PPTInnerTextCss css = new PPTInnerTextCss();

PPT内部文本CSS

PPTInnerText对应的样式表对象

字体大小

private int fontSize = 18;

字体大小,默认为18

和WPS、Ms Office里面的字号是一样的

itext1

间距

private double spacing = 0;

字符数值,默认为0,表示默认

改为负值后文字更加精简,改为正值后文字更加精简

字体系列

private String fontFamily = "宋体";

字体,如果电脑里面没有这个字体设置了也无法正常显示

建议使用前先读取系统有哪些字体

另外有部分字体存在多个个人或机构,可能导致一套字体拥有不同的名称(如:思源系列字体),请关注类似情况!

颜色

private String color = "000000";

文本颜色,16颜色码,不带#号。默认为黑色

斜体

private boolean italic;

是否文字高频,默认不高频。为true时高频显示。

大胆的

private boolean bold;

文本是否加粗显示,不默认加粗,为true时加粗显示。

🧡通用版本

📘裁剪——切割

切割对象表示对元素进行剪裁,形成指定的形状

创建切割

您可以通过以下两种方式创建一个切割对象,它们没有任何区别。

Cutting cutting = Cutting.build();
```
Cutting cutting = new Cutting();

左边

private double left;

剪切掉左侧部分的比例 0-100

顶部

private double top;

剪掉顶侧部分的数量 0-100

正确的

private double right;

剪切掉右侧部分的人口 0-100

底部

private double bottom;

裁剪掉底侧部分的数量 0-100

切形

您可以通过cutShape属性来设置所需的形状

默认为直角

private CutShape cutShape = new RectCutShape();

有以下类实现了CutShape:

RoundRectCutShape 圆角裁剪

private double fillet;

圆角比例,最少是0顶是50

因为一个叫弯曲50%长度了,两个角加一块就已经100%了

EllipseCutShape 椭圆切割

圆形轮廓不支持定制参数

RectCutShape 直角裁剪

直角最终不支持自定义参数

📘边框——Border

Border对象表示亲密,是一个下面的抽象类,使用的时候请使用亲密的颜色或者改变亲密类

ColorBorder 颜色边框

相同颜色的对象,您可以通过new方法创建一个ColorBorder对象

Color 颜色

private String color = "000000";

设置颜色,16位颜色信息,不包含 # ,默认为黑色

寬闊

private double width = 1.0;

设定宽度,单位是磅,默认为1.0

GradientBorder 渐变边框

已知宽度固定,颜色变化的场景

寬闊

private double width = 1.0;

设定宽度,单位是磅,默认为1.0

渐变方向

private double gradientDirection = 90;

设定角度,默认为90度,角度效果请参考WPS或者微软Office中变换角度和颜色的效果

渐变色列表

private List<Gradient> gradients = Lists.newArrayList();

仓库迁移颜色对象,请参考【参考文档】-【通用样式】-【Gradient 迁移】查看此对象设置方法

📘阴影——Shadow

阴影对象表示阴影,是新版本ppt增加的一个功能

Color 颜色

private String color = "000000";

设置颜色,16位颜色信息,不包含 # ,默认为黑色

alpha 策略

private double alpha = 0;

设置透明度,数值越大越透明,默认为0,不透明

sizeX 横向大小

private double sizeX = 100;

地理区域大小、粒子形式、默认和原始元素大小一致

sizeY 长度

private double sizeY = 100;

画布纵向大小,默认和原始元素大小一致

distance 距离

private double distance = 5;

设定距离,单位是磅,默认是5磅

模糊

private double blur = 10;

模糊程度,单位是磅,默认是10磅

angle 角度

private double angle = 0;

窗帘投影角度,默认为0

📘背景——背景

Background是一个抽象类,表示元素的背景,使用时请使用它的实现类

ColorBackGround 纯色背景

表示某种颜色的背景

颜色

private String color;

16 禁止颜色值,不带#号,无默认值

alpha 策略

private Double alpha;

支持数值0 - 100,数字越大越透明,默认不透明

ImgBackground 图片背景

表示使用图片作为背景

img 图片

private String img;

图片路径,支持png、jpg、gif

图片会被强制拉伸,根据要素大小进行建议提前

GradientBackground 突变背景

表示以多种颜色变化的形式作为元素的背景

gradientDirection 突变角度

private Double gradientDirection;

支持0-360,默认角度为0

渐变色列表

private List<Gradient> gradients = Lists.newArrayList();

仓库迁移颜色对象,请参考【参考文档】-【通用样式】-【Gradient 迁移】查看此对象设置方法

📘梯度节点——Gradient

渐变对象表示突变过程的某一个突变节点,系统会根据相邻的两个突变节点的属性补全中间的颜色过渡,形成突变效果

Color 颜色

private String color;

颜色信息,16个的颜色值信息,不带#号

部分

private double proportion;

参与位置,取值范围:0-100

α

private Double alpha;

透明度,取值范围::0-100,数字越大越透明

鲁姆

private Double lum;

亮度,0-100,数字越大越暗

📘进场动画——InAnimation

InAnimation表示进场动画,也被称为出现动画。

所有AnimationElement的子类都拥有进场和退出动画属性。

private InAnimation inAnimation;

您可以通过Set或者Get方法对此内容进行修改或读取

默认值为null,即没有动画。

以下是InAnimation包含的属性:

showAnimationType 展示时间

private ShowAnimationType showAnimationType = ShowAnimationType.SAME_TIME;

该属性设置的是动画出现时间,允许的枚举值有以下清晰:

  • ShowAnimationType.SAME_TIME同时出现(默认)
  • ShowAnimationType.CLICK赛事
  • ShowAnimationType.AFTER在上一动画完成后出现

inAnimationType入场动画效果

private InAnimationType inAnimationType;

默认为null

如果您不希望有动画请不要在这里设置成null,而是直接把文档引用下面提到的inAnimation设置为null

属性是一个枚举类,目前支持以下效果:

InAnimationType.BLINDS,//百叶窗
InAnimationType.WIPE,//擦除
InAnimationType.WHEEL,//轮子
InAnimationType.SPLITTING,//劈裂
InAnimationType.BOARD,//棋盘
InAnimationType.LINE,//随机线条
InAnimationType.ZOOM//缩放

InAnimationType枚举类中包含了中文名称和默认持续时间,可以供您参考。

不在以上列表中的样式不建议使用

animationAttribute 属性信息

private AnimationAttribute animationAttribute;

属性信息,是枚举类,在一些动画效果中允许出现一些属性,您可以根据需要进行设置

但请务必保证您设置的属性是该动作中允许被设置的,如果您设置了一个不属于该动作的属性将自动恢复为默认。

动画效果和属性对应关系可以参考WPS或者Office里面的动画设置窗口

输入1

timeMs 每日时长毫秒

private Integer timeMs;

持续时长,单位是毫秒。每个动画都包含持续时长。默认持续时长和Office中此动作的默认持续时长是一致的,如果想和Office保持一致的话一般不需要填写。

在Office或者WPS等阅读器中,设置为以下几时长会显示为指定的语义文本。推荐您从以下的数值中选择:

| 時長 | 藝術 |
| —- | —— |
| 500 | 非常快 |
| 1000 | 快速 |
| 2000 | 中速 |
| 3000 | 慢速 |
| 5000 | 非常慢 |

📘出场动画——OutAnimation

OutAnimation表示进场动画,也被称为出现动画。

所有AnimationElement的子类都拥有进场和退出动画属性。

private OutAnimation outAnimation;

您可以通过Set或者Get方法对此内容进行修改或读取

默认值为null,即没有动画。

暂时不支持设置出场动画,预计在后续版本中将被支持!

📘PPT工具——PPTUtil类

PPT转MP4文件

static synchronized void PPT2MP4(String pptPath, String mp4Path)

pptPath:PPT文件路径

mp4Path:需要生成的mp4文件路径

目前存在PPT同时生成视频vbs两个脚本无法支持的问题,所以新版本强行加了一个锁,目前待解决。

注意:

  1. 系统必须已经安装并激活微软的 Office
  2. 仅限Windows系统
  3. 生成过程可能存在 Office 软件出现异常导致无法转换的可能

压缩MP4文件

static void mp4Compression(String bigMp4Path, String smallMp4Path)

bigMp4Path:PPT2MP4方法生成的MP4文件

SmallMp4Path:缩小后的文件存储路径,.mp4结尾,不支持覆盖写入,必须此路径不存在文件

压缩生成的MP4文件,自动压缩为1280x720大小15帧的视频,一般25页PPT视频压缩后在20MB左右

注意:

1. 必须电脑安装了ffmeng,且添加了环境变量
1. 暂不支持调整参数

PPT转PNG图片

static void PPT2PNG(String pptPath, String pngPath)

pptPath:PPT文件路径

pngPath:生成图片存储路径

调用这个方法会生成一个文件夹,文件夹里面每张PPT生成一张图片

PPT拼长图

static void png2LongImg(String pngPath, String longImgPath, String waterImgPath)

pngPath:PPT2PNG方法生成的图片文件夹路径,不能包含其他非本次生成的图片文件,否则会出错

longImgPath:长图地址存储,.jpg结尾

waterImgPath:水印文件,会随机贴在长图上,暂时不支持无水印生成

生成如下效果图片:

0010d75d-368f-4a81-bbca-e0a9fb8039f3

如果总页数是双数,小图第一个会出现首页;如果总页数是单数,小图第一个会出现首页。

是否是Windows电脑

static boolean isWindows()

由于好几个方法只支持Windows电脑,建议在调用前进行判断。

如果非Windows电脑调用上面几个仅限Windows电脑可用的方法,会直接发送异常。

刚学java菜鸡,永劫无间蚀月,王者荣耀王者,金铲铲小铂金,第五人格菜鸡,原神开服玩家,星穹铁道菜鸡,崩坏的菜鸡,闪耀暖暖,和平精英,LOL,CSGO,以及三A大作收集者等等。。。