java poi ppt 接口的基本操做

依賴

在 pom.xml中增長如下依賴apache

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.1</version>
</dependency>

注:不少博客,教咱們用如下依賴,是沒有XSSF相關內容的ide

 <dependency>
       <groupId>org.apache.poi</groupId>
       <artifactId>poi</artifactId>
       <version>3.14</version>
 </dependency>

 

 version 版本

poi的版本能夠在 https://mvnrepository.com/artifact/org.apache.poi/poi 進行查詢。函數

找到想要依賴的版本字體

 

 點擊進入後,能夠直接複製裏面的依賴spa

 

初始化 

import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.sl.usermodel.SlideShowFactory;

SlideShow slideShow = SlideShowFactory.create(new File("./res/1.pptx"));  
  • 若是文件不存在或文件正在使用,create 方法拋出 IOException 異常
  • 若是文件損壞,create 方法拋出 EncryptedDocumentException 異常
  •  返回值 SlideShow 表明整個ppt文檔,能夠經過 SlieShow.getSlides() 獲取每張幻燈片進行操做,以及獲取整個ppt的信息,如頁面大小(getPageSize, setPageSize),圖片數據(getPictureData, setPictureData),字體,輸出到流等
  • 經過SlideShow.getSlides()後操做Slide均可以反應到SlideShow。

Slide

  •  slide表明幻燈片的一頁
  • 也是表明open-xml中  /ppt/sliders/*.xml 中的一個xml文檔
  • Slide只有一個實現類 XSLFSlide

獲取方法

XSLFSlide未提供public的構造函數,獲取只能經過SlideShow中提供的createSlide, getSlides方法獲取。code

如圖:XSLFSlide的構造函數,都是私有的xml

 

 

如圖:SlideShow中提供的Slide獲取方法, 因爲 Slide 接口只有一個實現(XLSFSlide),因此能夠直接轉換成實現類(XLSFSlide)操做blog

 

經常使用操做

  • 獲取全部的備註接口

XSLFNotes notes = slider.getNotes();
  • 獲取全部的批註圖片

List<XSLFComment> comments = slider.getComments();
  • 獲取全部的關聯部分,包括:備註,批註,圖片,圖表,母版等
List<POIXMLDocumentPart.RelationPart> relationParts = slider.getRelationParts();
    • 獲取備註,批註都是從 getRelationParts中獲取的
    • 除了圖形的獲取,其餘元素的獲取均可以經過此方法獲取(經過遍歷判斷類型)

 

  • 獲取全部的圖形
List<XSLFShape> shapes = slider.getShapes();

POIXMLDocumentPart

POIXMLDocmentPart是一個ppt關聯的部分的具體內容,包括:備註、批註、圖片、圖表、母版等。

經過 POIXMLDocumentPart documentPart = POIXMLDocumentPart.RelationPart.getDocumentPart() 獲取。

  • 批註部分, 與 slider.getComments() 對應
if (documentPart instanceof XSLFComments) {
    XSLFComments comments1 = (XSLFComments) documentPart;
}
  • 圖表部分,有多個,每一個圖表一個 XSLFChart
if (documentPart instanceof XSLFChart) {
    XSLFChart chart = (XSLFChart) documentPart;
}

 

  • 備註部分, 與 slider.getNotes() 相同
if (documentPart instanceof XSLFNotes) {
          XSLFNotes notes1 = (XSLFNotes) documentPart;
}
    • 獲取備註的一行文本
// 文本段落,一行爲一段
List<List<XSLFTextParagraph>> textParagraphs = notes1.getTextParagraphs();
// 第一行的全部文本,包含文本樣式
List<XSLFTextRun> textRuns = textParagraphs.get(0).get(0).getTextRuns();
// 第一行的文本內容
String text = textParagraphs.get(0).get(0).getText();
 

 

  • 母版,只有一個
if (documentPart instanceof XSLFSlideLayout) {
   XSLFSlideLayout relation1 = (XSLFSlideLayout) documentPart;
} 

XSLFShape

獲取 shape 的文本

for (XSLFShape shape : shapes) {
                if (shape instanceof XSLFTextShape) {
                    // 有文本的 sharpe
                    XSLFTextShape textShape = (XSLFTextShape) shape;
                    // 文本段落,一行爲一段
                    List<XSLFTextParagraph> textParagraphs = textShape.getTextParagraphs();
                    // 第一行的全部文本,包含文本樣式
                    List<XSLFTextRun> textRuns = textParagraphs.get(0).getTextRuns();
                    // 第一行的文本內容
                    String text = textParagraphs.get(0).getText();
                } else if (shape instanceof XSLFGroupShape) {
                    // 圖形組合
                    XSLFGroupShape groupShape = (XSLFGroupShape) shape;
                    // 圖形組合下的圖形,能夠與 slider.getShapes() 獲取的list同樣操做
                    List<XSLFShape> groupShapeShapes = groupShape.getShapes();
                }
            }
相關文章
相關標籤/搜索