应需求需要抓取PPT的图表标题,poi可以实现这个功能,PDFbox和itext也可以,但是后两者比较麻烦。
一、依赖
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.3</version></dependency>
二、代码
public static void main(String[] args) {try {XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("C:\\Users\\Administrator\\Desktop\\a.pptx"));//循环幻灯片for (XSLFSlide S:ppt.getSlides()){for (POIXMLDocumentPart part :S.getRelations()){//判断是否有chartif(part instanceof XSLFChart){XSLFChart chart = (XSLFChart) part;CTChart ctChart = chart.getCTChart();CTTitle title = ctChart.getTitle();if(title == null)continue;CTTx titleTx = title.getTx();CTTextBody body = titleTx.getRich();CTTextParagraph[] paragraphs = body.getPArray();for(int i=0; i<paragraphs.length; i++) {CTTextParagraph paragraph = paragraphs[i];CTRegularTextRun[] runs = paragraph.getRArray();String chartTitle = "";for(int j=0; j<runs.length; j++) {CTRegularTextRun run = runs[j];String t = run.getT();chartTitle += t;}System.out.println(chartTitle);}}}}} catch (IOException e) {e.printStackTrace();}}