Apache POI – Đọc ghi file PowerPoint ppt bằng Java với Apache POI
1. Xử lý file PowerPoint với Apache POI
Các thành phần cơ bản của file PowerPoint và các class trong Apache POI dùng để xử lý chúng:
Presentation (1 file trình chiếu PowerPoint)
Để tạo và quản lý presentation ta sử dụng class org.apache.poi.xslf.usermodel.XMLSlideShow.
Class XMLSlideShow này dùng để tạo 1 presentation, thêm ảnh và lấy ảnh từ presentation, tạo mới Slide, chỉnh sửa kích thước trang…
Slide (1 trang trong PowerPoint)
Để tạo và quản lý 1 slide ta sử dụng class org.apache.poi.xslf.usermodel.XSLFSlide
Class XSLFSlide được dùng để lấy background, lấy slide layout, slide master, và theme..
Slide Layout
Slide Layout là khung của 1 slide:
Để quản lý Slide layout ta sử dụng class org.apache.poi.xslf.usermodel.XSLFSlideLayout
Slide Master (dùng để hiển thị các slide layout khác nhau)
Để quản lý Slide Master ta sử dụng class org.apache.poi.xslf.usermodel.XSLFSlideMaster
Class XSLFSlideMaster cho phép lấy backgroud và layout.
Text Paragraph
Text Paragraph dùng để chứa nội dung của slide
Để quản lý Text Paragraph ta dùng class org.apache.poi.xslf.usermodel.XSLFTextParagraph
Class XSLFTextParagraph cho phép tạo dòng mới, tùy chỉnh aligh, margin, thêm text run…
Text Run
Text Run được dùng để quản lý các đoạn text của 1 paragraph như tạo link, tùy chỉnh font, size,…
Để quản lý Text Run ta sử dụng class org.apache.poi.xslf.usermodel.XSLFTextRun
Một số thành phần khác
Hyperlink, comment, picture, table…
(Tham khảo trong package: org.apache.poi.xslf.usermodel)
2. Thư viện sử dụng:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.17</version> </dependency>
3. Ví dụ ghi/tạo file PowerPoint bằng Java sử dụng Apache POI
Ví dụ 1:
Tạo 1 presentation (file powerpoint) với 2 slide trống
package stackjava.com.apachepoi.ptt.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
public class CreatePresentation {
public static void main(String args[]) throws IOException {
// Create an empty presentation
XMLSlideShow ppt = new XMLSlideShow();
// adding new empty slides
ppt.createSlide();
ppt.createSlide();
// creating an FileOutputStream object
File file = new File("demo-create-presentation.pptx");
FileOutputStream out = new FileOutputStream(file);
// saving the changes to a file
ppt.write(out);
System.out.println("successfully");
out.close();
ppt.close();
}
}
Kết quả:
Ví dụ 2:
Tạo 1 presentation với 1 slide có layout là ‘Title’ và thêm nội dung cho nó:
package stackjava.com.apachepoi.ptt.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextShape;
public class CreateLayout {
public static void main(String args[]) throws IOException {
// Create an empty presentation
XMLSlideShow ppt = new XMLSlideShow();
// Create Slide with SlideLayout = Title
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);
XSLFSlide slide = ppt.createSlide(titleLayout);
XSLFTextShape title1 = slide.getPlaceholder(0);
// setting the title init
title1.setText("stackjava.com");
// creating an FileOutputStream object
File file = new File("demo-create-layout.pptx");
FileOutputStream out = new FileOutputStream(file);
// saving the changes to a file
ppt.write(out);
System.out.println("successfully");
out.close();
ppt.close();
}
}
Kết quả:
Ví dụ 3:
Chèn text, link vào slide và định dạng text
package stackjava.com.apachepoi.ptt.demo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFHyperlink;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextParagraph;
import org.apache.poi.xslf.usermodel.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;
public class InsertTextLink {
public static void main(String args[]) throws IOException {
// Create an empty presentation
XMLSlideShow ppt = new XMLSlideShow();
// Create Slide with SlideLayout = Title
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
XSLFSlide slide = ppt.createSlide(titleLayout);
XSLFTextShape title = slide.getPlaceholder(0);
// setting the title init
title.setText("stackjava.com");
XSLFTextShape body = slide.getPlaceholder(1);
// adding new paragraph
XSLFTextParagraph paragraph = body.addNewTextParagraph();
// creating text run object
XSLFTextRun textRun1 = paragraph.addNewTextRun();
textRun1.setText("Text bold and color RED");
// setting color to the text
textRun1.setFontColor(java.awt.Color.RED);
textRun1.setBold(true);
// setting font size to the text
textRun1.setFontSize(20.0);
// add new line
paragraph.addLineBreak();
XSLFTextRun textRun2 = paragraph.addNewTextRun();
textRun2.setText("Text color blue");
textRun2.setFontColor(java.awt.Color.BLUE);
paragraph.addLineBreak();
XSLFTextRun textRun3 = paragraph.addNewTextRun();
textRun3.setText("stackjava.com");
XSLFHyperlink link = textRun3.createHyperlink();
link.setAddress("https://stackjava.com/");
// creating an FileOutputStream object
File file = new File("demo-insert-link-text.pptx");
FileOutputStream out = new FileOutputStream(file);
// saving the changes to a file
ppt.write(out);
System.out.println("successfully");
out.close();
ppt.close();
}
}
Kết quả:
Okay, Done!
Download code ví dụ trên tại đây
References:
http://poi.apache.org/slideshow/