真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用ApachePOI怎么將PPT轉(zhuǎn)換成圖片

使用Apache POI怎么將PPT轉(zhuǎn)換成圖片?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

成都創(chuàng)新互聯(lián)是專業(yè)的和政網(wǎng)站建設(shè)公司,和政接單;提供網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行和政網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

1、Apache POI 簡介

Apache POI 是用Java編寫的免費(fèi)開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能。

可以查看官方文檔 Apache POI官網(wǎng)

Apache POI操作PPT文檔有兩種方式:

1.POI-HSLF 對應(yīng)的 Powerpoint ‘97(-2007) 的文件格式 – 后綴名為 .ppt
2.POI-XSLF 對應(yīng)的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 方式只需要引入兩個就可以,因為他們依賴了其他幾個


      org.apache.poi
      poi-ooxml
      3.12
    
    
      org.apache.poi
      poi-scratchpad
      3.12
    

3、POI-HSLF 方式

POI-HSLF 方式處理PPT以 .ppt 后綴結(jié)尾的文檔。

/**
   * ppt2003 文檔的轉(zhuǎn)換 后綴名為.ppt
   * @param pptFile ppt文件
   * @param imgFile 圖片將要保存的目錄(不是文件)
   * @return
   */
public static Boolean doPPT2003toImage(File pptFile,File imgFile,List list) {
	try {
		FileInputStream is = new FileInputStream(pptFile);
		SlideShow ppt = new SlideShow(is);
		//及時關(guān)閉掉 輸入流
		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);
					// 重新設(shè)置 字體索引 和 字體名稱 是為了防止生成的圖片亂碼問題
					rtruns[l].setFontIndex(1);
					rtruns[l].setFontName("宋體");
				}
			}
			//根據(jù)幻燈片大小生成圖片
			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;
			}
			// 這里設(shè)置圖片的存放路徑和圖片的格式(jpeg,png,bmp等等),注意生成文件路徑
			FileOutputStream out = new FileOutputStream(jpegFile);
			ImageIO.write(img, "jpeg", out);
			out.close();
		}
		log.error("PPT轉(zhuǎn)換成圖片 成功!");
		return true;
	}
	catch (Exception e) {
		log.error("PPT轉(zhuǎn)換成圖片 發(fā)生異常!", e);
	}
	return false;
}

4、POI-XSLF 方式

POI-XSLF 方式處理PPT文件以 .pptx 后綴結(jié)尾的文檔。

/**
   * ppt2007文檔的轉(zhuǎn)換 后綴為.pptx
   * @param pptFile PPT文件
   * @param imgFile 圖片將要保存的路徑目錄(不是文件)
   * @param list 存放文件名的 list
   * @return
   */
public static Boolean doPPT2007toImage(File pptFile,File imgFile,List 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 textParagraphs = sh.getTextParagraphs();
					for (XSLFTextParagraph xslfTextParagraph : textParagraphs) {
						List textRuns = xslfTextParagraph.getTextRuns();
						for (XSLFTextRun xslfTextRun : textRuns) {
							xslfTextRun.setFontFamily("宋體");
						}
					}
				}
			}
			//根據(jù)幻燈片大小生成圖片
			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;
			}
			// 這里設(shè)置圖片的存放路徑和圖片的格式(jpeg,png,bmp等等),注意生成文件路徑
			FileOutputStream out = new FileOutputStream(jpegFile);
			// 寫入到圖片中去
			ImageIO.write(img, "jpeg", out);
			out.close();
		}
		log.error("PPT轉(zhuǎn)換成圖片 成功!");
		return true;
	}
	catch (Exception e) {
		log.error("PPT轉(zhuǎn)換成圖片 發(fā)生異常!", e);
	}
	return false;
}

5、可能出現(xiàn)的錯誤

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)

出現(xiàn)以上錯誤,說明是沒有對應(yīng)起來使用,應(yīng)該使用第二種方式來轉(zhuǎn)換PPT。

有時候核心轉(zhuǎn)換的時候很容易出問題,是因為POI沒有做得很好,圖片有時候容易失真。

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

看完上述內(nèi)容,你們掌握使用Apache POI怎么將PPT轉(zhuǎn)換成圖片的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


網(wǎng)頁名稱:使用ApachePOI怎么將PPT轉(zhuǎn)換成圖片
當(dāng)前路徑:http://weahome.cn/article/pcdhpi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部