POI操作Microsoft Office 之 操作PPT简单示例(附源码)

POI的了解

POI 是 Apache 下的 Jakata 项目的一个子项目,主要用于提供 java 操作 Microsoft

Office 办公套件如 Excel,Word,Powerpoint 等文件的 API.

     微软的Office 办公软件在企业的日常办公中占据着重要的地位,人们已经非常熟悉

Office 的使用。在我们开发的应用系统中,常常需要将数据导出到 Excel 文件中,或者

Word 文件中进行打印。比如移动的话费查询系统中就提供了将话费清单导入到 excel 表

格中的功能。这样在web 应用中,我们在浏览器中看到的数据可以被导出到 Excel 中了。

  • Excel 文件: xls 格式文件对应 POI API 为 HSSF 。 xlsx 格式为 office 2007 的文件格式,POI 中对应的API 为XSSF

  • 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.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文档信息

SlideShow ppt = new SlideShow(new HSLFSlideShow("ppt/testppt.ppt"));
		Slide[] slides = ppt.getSlides();// 提取文本信息
		for (Slide each : slides) {
			System.out.println(each.getTitle());
			TextRun[] textRuns = each.getTextRuns();
			for (int i = 0; i < textRuns.length; i++) {
				System.out.println(textRuns[i].getText());
				RichTextRun[] richTextRuns = textRuns[i].getRichTextRuns();
				for (int j = 0; j < richTextRuns.length; j++) {
					System.out.println(richTextRuns[j].getText());
				}
			}
		}// 提取所有JPEG图片
		PictureData[] picDatas = ppt.getPictureData();
		for (int i = 0; i < picDatas.length; i++) {
			if (picDatas[i].getType() == Picture.PNG) {
				FileOutputStream out = new FileOutputStream("jpg/jpg_" + i + ".jpg");
				ppt.write(out);
				out.close();
			}
		}
8)设置PPT文档摘要信息(文档点击鼠标右键查看属性)

HSLFSlideShow hslf = HSLFSlideShow.create();
		DocumentSummaryInformation dsi= hslf.getDocumentSummaryInformation();  
		SummaryInformation si= hslf.getSummaryInformation();    
		dsi.setCompany("yourCompany");  
		dsi.setCategory("ppt测试");  
		si.setAuthor("yourName");  
		si.setTitle("标题");   
		SlideShow ppt = new SlideShow(hslf);

链接: http://pan.baidu.com/s/1o8SzpLS 密码: hh1t


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值