一、导入pom依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!-- 读取PPT-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.17</version>
</dependency>
二、创建新页省略
三、获取PPT每一页的内容
public static void main(String[] args) {
XMLSlideShow ppt = null;
try {
// PPT类
ppt = new XMLSlideShow(new FileInputStream("d:/test/test01.pptx"));
// 获取PPT中的所有幻灯片
// List<XSLFSlide> slides = ppt.getSlides();
// 遍历幻灯片
for(int i = 0;i < ppt.getSlides().size();i++) {
//拿到第i页的PPT
XSLFSlide slides = ppt.getSlides().get(i);
System.out.println("第"+(i+1)+"页");
//注释的for循环是获取所以PPT的内容
// for (XSLFSlide slide : slides) {
// 获取幻灯片中的所有图形
List<XSLFShape> shapes = slides.getShapes();
// 遍历PPT的图形
for (XSLFShape shape : shapes) {
// 判断该图形类是否是文本框类
if (shape instanceof XSLFTextShape) {
// 将图像类强制装换成文本框类
XSLFTextShape ts = (XSLFTextShape) shape;
// 获取文本框内的文字
String str = ts.getText();
System.out.println(str);
}
// 判断该图形类是否是表格类
if (shape instanceof XSLFTable) {
// 将图像类强制装换成表格类
XSLFTable table = (XSLFTable) shape;
// 获取表格中的所有行
List<XSLFTableRow> rows = table.getRows();
for (XSLFTableRow tr : rows) {
// 获取行中的所有单元格
List<XSLFTableCell> cells = tr.getCells();
for (XSLFTableCell tc : cells) {
// 获取单元格内的文字
String str = tc.getText();
System.out.println("表格数据:" + str);
}
}
}
// 判断该图形类是否是图片框类
if (shape instanceof XSLFPictureShape) {
// 将图像类强制装换成图片框类
XSLFPictureShape ps = (XSLFPictureShape) shape;
// 获取图片的字节码数据(可以利用输出流将该图片保存到硬盘里)
byte[] pictureData = ps.getPictureData().getData();
System.out.println("图片信息:" + pictureData);
}
}
}
// }
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ppt != null) {
try {
// 保存完之后要对PPT进行关闭操作
ppt.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
四、复制某一页的PPT
一定要记得输出流要不然复制不了
public static XSLFSlide copyPptPage(XSLFSlide slide, XMLSlideShow ppt, int index) throws IOException {
List<XSLFShape> shapes = slide.getShapes();
//创建新的一页PPT
XSLFSlide slides = ppt.createSlide();
if (shapes.size() > 0) {
for (XSLFShape shape : shapes) {
slides.importContent(shape.getSheet());
}
}
//排序(在PPT中的第几页)
ppt.setSlideOrder(slides, index);
return slides;
}
public static void main(String[] args) throws Exception {
XMLSlideShow ppt = null;
try {
FileInputStream filePath = new FileInputStream("d:/test/test05.pptx");
ppt = new XMLSlideShow(filePath);
XSLFSlide slide = ppt.getSlides().get(0);
copyPptPage(slide,ppt,6);
ppt.write(new FileOutputStream("d:/test/test05.pptx"));
}catch (Exception e){
}finally {
if (ppt != null) {
try {
// 保存完之后要对PPT进行关闭操作
ppt.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
五、往某页指定位置插入图片
一定要记得输出流
public static void main(String[] args) throws Exception{
XMLSlideShow ppt = null;
try {
//定义 文件路径
String filePath = "d:/test/test05.pptx";
String imagePath = "d:/test/16044043638073.png";
ppt = new XMLSlideShow(new FileInputStream(filePath));
//在第一页放图片PPT下标也是从0开始的
XSLFSlide slide = ppt.getSlides().get(0);
//如果需要在新的一页插入图片就创建新的页
// XSLFSlide slide = ppt.createSlide();
byte[] pictureData = IOUtils.toByteArray(new FileInputStream(imagePath));
XSLFPictureData pictureIndex = ppt.addPicture(pictureData, XSLFPictureData.PictureType.PNG);
//创建图片
XSLFPictureShape pictureShape = slide.createPicture(pictureIndex);
//设置图片的位置
pictureShape.setAnchor(new java.awt.Rectangle(150, 20, 500, 300));
//输出流
ppt.write(new FileOutputStream(filePath));
}catch (Exception e) {
e.printStackTrace();
} finally {
if (ppt != null) {
try {
// 保存完之后要对PPT进行关闭操作
ppt.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}