Apache POI將PPT轉換成圖片執行個體代碼,

來源:互聯網
上載者:User

Apache POI將PPT轉換成圖片執行個體代碼,

本文主要分享的是關於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轉換成圖片執行個體代碼的全部內容,希望對大家有所協助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.