当前位置: 移动技术网 > IT编程>开发语言>Java > Apache POI将PPT转换成图片实例代码

Apache POI将PPT转换成图片实例代码

2019年07月19日  | 移动技术网IT编程  | 我要评论

胰子,天津申通快递,奥术扰动

本文主要分享的是关于apache poi将ppt转换成图片的相关内容,简单介绍了apache poi,具体内容如下。

1、apache poi 简介

apache poi 是用java编写的免费开源的跨平台的 java api,apache poi提供api给java程式对microsoft office格式档案读和写的功能。

可以查看官方文档 apache poi官网

apache poi操作ppt文档有两种方式:

1.poi-hslf 对应的 powerpoint ‘97(-2007) 的文件格式 – 后缀名为 .ppt
2.poi-xslf 对应的powerpoint 2007 ooxml 的文件格式 – 后缀名为 .pptx

2、jar包

poi 操作office需要的jar包:

    poi-3.12.jar
    poi-ooxml-3.12.jar
    poi-ooxml-schemas-3.12.jar
    poi-scratchpad-3.12.jar
    xmlbeans-2.6.0.jar

maven方式引入:

maven 方式只需要引入两个就可以,因为他们依赖了其他几个

    <dependency>
      <groupid>org.apache.poi</groupid>
      <artifactid>poi-ooxml</artifactid>
      <version>3.12</version>
    </dependency>
    <dependency>
      <groupid>org.apache.poi</groupid>
      <artifactid>poi-scratchpad</artifactid>
      <version>3.12</version>
    </dependency>

3、poi-hslf 方式

poi-hslf 方式处理ppt以 .ppt 后缀结尾的文档。

/**
   * ppt2003 文档的转换 后缀名为.ppt
   * @param pptfile ppt文件
   * @param imgfile 图片将要保存的目录(不是文件)
   * @return
   */
public static boolean doppt2003toimage(file pptfile,file imgfile,list<string> list) {
	try {
		fileinputstream is = new fileinputstream(pptfile);
		slideshow ppt = new slideshow(is);
		//及时关闭掉 输入流
		is.close();
		dimension pgsize = ppt.getpagesize();
		slide[] slide = ppt.getslides();
		for (int i = 0; i < slide.length; i++) {
			log.info("第" + i + "页。");
			textrun[] truns = slide[i].gettextruns();
			for (int k = 0; k < truns.length; k++) {
				richtextrun[] rtruns = truns[k].getrichtextruns();
				for (int l = 0; l < rtruns.length; l++) {
					// 原有的字体索引 和 字体名字
					int index = rtruns[l].getfontindex();
					string name = rtruns[l].getfontname();
					log.info("原有的字体索引 和 字体名字: "+index+" - "+name);
					// 重新设置 字体索引 和 字体名称 是为了防止生成的图片乱码问题
					rtruns[l].setfontindex(1);
					rtruns[l].setfontname("宋体");
				}
			}
			//根据幻灯片大小生成图片
			bufferedimage img = new bufferedimage(pgsize.width,pgsize.height, bufferedimage.type_int_rgb);
			graphics2d graphics = img.creategraphics();
			graphics.setpaint(color.white);
			graphics.fill(new rectangle2d.float(0, 0, pgsize.width,pgsize.height));
			slide[i].draw(graphics);
			// 图片的保存位置
			string absolutepath = imgfile.getabsolutepath()+"/"+ (i + 1) + ".jpeg";
			file jpegfile = new file(absolutepath);
			// 图片路径存放
			list.add((i + 1) + ".jpeg");
			// 如果图片存在,则不再生成
			if (jpegfile.exists()) {
				continue;
			}
			// 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径
			fileoutputstream out = new fileoutputstream(jpegfile);
			imageio.write(img, "jpeg", out);
			out.close();
		}
		log.error("ppt转换成图片 成功!");
		return true;
	}
	catch (exception e) {
		log.error("ppt转换成图片 发生异常!", e);
	}
	return false;
}

4、poi-xslf 方式

poi-xslf 方式处理ppt文件以 .pptx 后缀结尾的文档。

/**
   * ppt2007文档的转换 后缀为.pptx
   * @param pptfile ppt文件
   * @param imgfile 图片将要保存的路径目录(不是文件)
   * @param list 存放文件名的 list
   * @return
   */
public static boolean doppt2007toimage(file pptfile,file imgfile,list<string> list) {
	fileinputstream is = null ;
	try {
		is = new fileinputstream(pptfile);
		xmlslideshow xmlslideshow = new xmlslideshow(is);
		is.close();
		// 获取大小
		dimension pgsize = xmlslideshow.getpagesize();
		// 获取幻灯片
		xslfslide[] slides = xmlslideshow.getslides();
		for (int i = 0 ; i < slides.length ; i++) {
			// 解决乱码问题
			xslfshape[] shapes = slides[i].getshapes();
			for (xslfshape shape : shapes) {
				if (shape instanceof xslftextshape) {
					xslftextshape sh = (xslftextshape) shape;
					list<xslftextparagraph> textparagraphs = sh.gettextparagraphs();
					for (xslftextparagraph xslftextparagraph : textparagraphs) {
						list<xslftextrun> textruns = xslftextparagraph.gettextruns();
						for (xslftextrun xslftextrun : textruns) {
							xslftextrun.setfontfamily("宋体");
						}
					}
				}
			}
			//根据幻灯片大小生成图片
			bufferedimage img = new bufferedimage(pgsize.width,pgsize.height, bufferedimage.type_int_rgb);
			graphics2d graphics = img.creategraphics();
			graphics.setpaint(color.white);
			graphics.fill(new rectangle2d.float(0, 0, pgsize.width,pgsize.height));
			// 最核心的代码
			slides[i].draw(graphics);
			//图片将要存放的路径
			string absolutepath = imgfile.getabsolutepath()+"/"+ (i + 1) + ".jpeg";
			file jpegfile = new file(absolutepath);
			// 图片路径存放
			list.add((i + 1) + ".jpeg");
			//如果图片存在,则不再生成
			if (jpegfile.exists()) {
				continue;
			}
			// 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径
			fileoutputstream out = new fileoutputstream(jpegfile);
			// 写入到图片中去
			imageio.write(img, "jpeg", out);
			out.close();
		}
		log.error("ppt转换成图片 成功!");
		return true;
	}
	catch (exception e) {
		log.error("ppt转换成图片 发生异常!", e);
	}
	return false;
}

5、可能出现的错误

org.apache.poi.poifs.filesystem.officexmlfileexception: the supplied data appears to be in the office 2007+ xml. you are calling the part of poi that deals with ole2 office documents. you need to call a different part of poi to process this data (eg xssf instead of hssf)

出现以上错误,说明是没有对应起来使用,应该使用第二种方式来转换ppt。

有时候核心转换的时候很容易出问题,是因为poi没有做得很好,图片有时候容易失真。

// 最核心的代码
slides[i].draw(graphics);

总结

以上就是本文关于apache poi将ppt转换成图片实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网