-
Word 文件:doc 格式文件对应的 POI API 为 HWPF。 docx 格式为 XWPF
-
powerPoint 文件:ppt 格式对应的 POI API 为 HSLF。 pptx 格式为 XSLF
-
outlook :对应的 API 为 HSMF
-
Visio: 对应的 API 为 HDGF
-
Publisher : 对应的 API 为 HPBF
使用POI操作PPT文档
1)如果是创建新的PPT文档,直接使用SlideShow和Slide类就可以,其中SlideShow表示PPT文档,Slide表示某一张幻灯片
创建空的PPT文档:
SlideShow ppt = new SlideShow();
Slide[] slides = ppt.getSlides();
assertTrue(slides.length == 0);
savePPTFile(ppt);
private void savePPTFile(SlideShow ppt) throws Exception{
FileOutputStream out = new FileOutputStream(“d:/test/test.ppt”);
ppt.write(out);
out.close();}
2)设置母版,这样后续的新建幻灯片都将使用母版的字体,背景等设置
SlideShow ppt = new SlideShow();// 设置幻灯片大小
ppt.setPageSize(new Dimension(760, 600));
SlideMaster master = ppt.getSlidesMasters()[0]; // 设置母板背景,支持多种图片格式
int picIndex = 0;
try {
picIndex = ppt.addPicture(new File(“background.png”), Picture.PNG);
} catch (IOException e) {
e.printStackTrace();
}
Picture background = new Picture(picIndex);// 设置图片位置
background.setAnchor(new java.awt.Rectangle(0, 0,
ppt.getPageSize().width, ppt.getPageSize().height));
master.addShape(background);
3)创建幻灯片并插入文本
TextBox txt = new TextBox();// 添加文本框
RichTextRun richTextRun = txt.getTextRun().getRichTextRuns()[0];
richTextRun.setFontColor(Color.BLUE);
richTextRun.setText(“这里可以换行\r\n第二行文本”);// setText参数字符串可以包含回车、换行符,但是最后一行不能以\r\n结尾,否则设置的格式没有效果
txt.setAnchor(new java.awt.Rectangle(50, 150, 400, 400));
newSlide.addShape(txt);
savePPTFile(ppt);
4)插入图片,支持多种格式
picIndex = ppt.addPicture(new File(“img/img.jpg”), Picture.JPEG);
Picture jpg = new Picture(picIndex);
jpg.setAnchor(new java.awt.Rectangle(360, 200, 280, 260)); //set image position in the slide
newSlide.addShape(jpg);
5)插入表格
String[][] datas = { { “序号”, “姓名”, “年龄” }, { “1”, “张三”, “30” },
{ “2”, “李四”, “27” } };
Table table = new Table(3, 3); // create a table of 3 rows and 3
// columnsTable
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
TableCell cell = table.getCell(i, j);
RichTextRun rt = cell.getTextRun().getRichTextRuns()[0];
rt.setFontName(“宋体”);
rt.setFontSize(12);
cell.setVerticalAlignment(TextBox.AnchorMiddle);
cell.setHorizontalAlignment(TextBox.AlignCenter);
cell.setText(datas[i][j]);
if (i == 0) {
cell.setFillColor(Color.GRAY);// 首行背景设置为灰色
}
}
}
Line border = table.createBorder();
border.setLineColor(Color.black);
border.setLineWidth(2.0);
table.setAllBorders(border);
newSlide.addShape(table);
table.moveTo(160, 260);
6)如果是读取已存在的PPT文档则还要用到HSLFSlideShow,下面代码将PPT文件导出为图片(png)格式,如果幻灯片上有中文字符则这些字符的字体需要修改为支持中文的字体(宋体等),否则导出的图片的中文字符不能正常显示
SlideShow ppt = new SlideShow(new HSLFSlideShow(“d:/test/test.ppt”));
Dimension pgsize = ppt.
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
getPageSize();
Slide[] slide = ppt.getSlides();
for (int i = 0; i < slide.length; i++) {
BufferedImage img = new BufferedImage(pgsize.width, pgsize.height,BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = img.createGraphics();
graphics.setPaint(Color.white);// clear the drawing area
graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width,
pgsize.height));
slide[i].draw(graphics);
FileOutputStream out = new FileOutputStream(“png/slide-” + (i + 1)
- “.png”);
javax.imageio.ImageIO.write(img, “png”, out);
out.close();
7)提取PPT文档信息