Apache POI PPT - 파워포인트에서 Java로

응용 프로그램이 Power Point 파일을 편집하고 읽어야 하는 것처럼 Microsoft Office ppt 또는 pptx 형식으로 보고서를 생성해야 하는 경우가 종종 있습니다. MS Office 파일을 생성하려는 Java 프로그래머는 Java 라이브러리를 사용해야 하며 그 중에는 효율성으로 유명한 Apache 라이브러리가 있습니다.

Apache POI는 MS Office 파일을 생성, 수정 및 표시할 수 있는 API입니다. 이 오픈 소스 서점은 Apache Software Foundation에서 개발 및 배포합니다.

이 튜토리얼은 Java를 사용하여 Power Point 파일을 읽고, 만들고, 편집해야 하는 사람들을 대상으로 합니다. Apache POI 라이브러리의 필수 기능과 Power Point 파일에서 작업을 수행할 수 있는 기본 기능에 대해 설명합니다.

Apache POI PPT

공식 웹 사이트에서 최신 버전의 Apache POI를 다운로드하여 다운로드하고(Apache POI PPT 다운로드) 프로젝트 폴더에 압축을 푼 다음 필요한 라이브러리를 애플리케이션에 연결할 수 있습니다. 다음 .jar 파일이 필요합니다.
  • poi.jar
  • poi-oxml.jar
  • poi-oxml-schema.jar
  • log4j.jar
  • xmlbeans.jar

Classes and Methods

Apache POI에는 Excel, Word 및 Power Point 파일 작업을 위한 클래스와 메서드가 포함되어 있습니다. 이전 기사에서 Excel 및 Word에 대한 이러한 클래스에 대해 이미 설명했습니다. 파워포인트와 관련된 클래스를 보여드리겠습니다.
  • XMLSlideShow: 프레젠테이션을 만들고 관리하려면 org.apache.poi.xslf.usermoder.
  • XSLFSlide: 프레젠테이션에서 슬라이드를 만들고 관리합니다.
  • XSLFSlideMaster: 다른 슬라이드 레이아웃이 포함된 프레젠테이션에 사용됩니다. XSLFSlideMaster 클래스는 이러한 레이아웃에 대한 액세스를 제공합니다.
  • XSLFSlideLayout: 슬라이드의 레이아웃을 관리할 수 있습니다.
  • XSLFTextParagraph: XSLFTextParagraph.
  • XSLFTextRun 클래스: 이 클래스는 텍스트의 서식(하이퍼링크, colors, fonts, etc.).
  • XSLFTextShape: 이 클래스는 텍스트가 포함된 도형을 처리합니다.
  • XSLFHyperlink: 프레젠테이션에서 하이퍼링크를 만들 수 있습니다.

빈 Power Point 프레젠테이션 만들기

이제 Java를 사용하여 프레젠테이션을 만드는 방법을 살펴보겠습니다. 빈 프리젠테이션을 만들려면 XMLSlideShow 클래스를 인스턴스화해야 합니다.

XMLSlideShow ppt = new XMLSlideShow(); 
FileOutputStream을 사용하여 PPT 문서에 변경 사항을 저장합니다.

File file=new File("C://POIPPT//Examples//example1.pptx"); 
FileOutputStream out = 새 FileOutputStream(파일);
ppt.write(출력);
아래 코드는 빈 PowerPoint 문서를 만드는 완전한 프로그램입니다.

import java.io.File; 
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide를 사용합니다.

public class PowerPoint {

public static void main(String args[]) throws IOException{

//비어 있는 새 슬라이드 쇼 만들기
XMLSlideShow ppt = new XMLSlideShow();

//PPT
File file =new File("exemple.pptx");
FileOutputStream fis = 새 FileOutputStream(파일);

//파일 저장
ppt.write(fis);
System.out.println("파일이 성공적으로 생성되었습니다.");
fis.close();
}
}
이 코드를 컴파일하고 실행하면 프로젝트 디렉토리에 다음과 같은 빈 exemple.pptx 파일이 생성됩니다.

< / a>< / div>

기존 PowerPoint 파일 수정 또는 편집

기존 프레젠테이션을 열려면 XMLSlideShow 클래스를 인스턴스화하고 수정하려는 파일의 FileInputStream 개체를 XMLSlideShow.

File file=new File("C://POIPPT//Examples//example1.pptx"); 
FileInputstream 입력 스트림 = 새 FileInputStream (파일);
XMLSlideShow ppt = 새 XMLSlideShow(inputstream);
createSlide() 메서드를 사용하여 프레젠테이션에 슬라이드를 추가할 수 있습니다. XMLSlideShow.

XSLFSlide slide1= ppt.createSlide(); 
다음 프로그램이 열리고 이미 생성된 파일에 슬라이드가 추가됩니다 exemple.pptx:

import java.io.File; 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide를 사용합니다.

public class EditPresentation {

public static void main(String ar[]) throws IOException{

//기존 파워포인트 파일 열기
File file = new File("exemple.pptx");
FileInputStream inputstream=new FileInputStream(파일);
XMLSlideShow ppt = new XMLSlideShow(inputstream);

//프레젠테이션에 슬라이드 추가
XSLFSlide slide1 = ppt.createSlide();
XSLFSlide slide2 = ppt.createSlide();
XSLFSlide slide3 = ppt.createSlide();

//변경 사항 저장
FileOutputStream fis = new FileOutputStream(file);
ppt.쓰기(fis);

System.out.println("수정이 성공적으로 완료되었습니다.");
fis.close();
}
}
이 프로그램은 다음과 같은 결과를 생성합니다.

수정이 성공적으로 완료되었습니다
세 개의 새 슬라이드로 수정된 문서:


새 슬라이드를 추가한 후 해당 슬라이드를 읽고, 쓰고, 작업을 수행할 수 있습니다.

사용 가능한 레이아웃

PowerPoint 프레젠테이션에는 선택할 수 있는 각 슬라이드의 레이아웃이 있습니다. 먼저 사용 가능한 모든 레이아웃 목록을 찾아보겠습니다.
마스터 슬라이드라고 하는 다양한 슬라이드가 있으며 각 슬라이드 마스터에는 여러 슬라이드 레이아웃이 있습니다.
- 메서드를 사용하여 슬라이드 목록을 가져올 수 있습니다.  getSlideMasters()  클래스의  XMLSlideShow.
- 각 슬라이드 마스터에서 슬라이드 레이아웃 목록을 가져올 수 있습니다. getSlideLayouts()  클래스의  XSLFSlideMaster.
- 객체에서 레이아웃 이름을 가져올 수 있습니다  레이아웃  사용 getType()  클래스의  XSLFSlideLayout.

아래 프로그램은 사용 가능한 모든 레이아웃을 PPT로 표시합니다.

import java.io.IOException; 
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster를 사용합니다.

public class SlideLayouts {

public static void main(String args[]) throws IOException{

XMLSlideShow ppt = new XMLSlideShow();
System.out.println("사용 가능한 레이아웃");

//모든 슬라이드 목록 가져오기 masters
for(XSLFSlideMaster master: ppt.getSlideMasters()){

//각 슬라이드의 모든 슬라이드 레이아웃 목록 가져오기 master
for(XSLFSlideLayout layout : master.getSlideLayouts()){

//이름 가져오기 layout
System.out.println(layout.getType());
}
}
}
}
출력:

사용 가능한 레이아웃
BLANK
TITLE_ONLY
SECTION_HEADER
PIC_TX
TITLE_AND_CONTENT
TITLE
VERT_TX< br />VERT_TITLE_AND_TX
TWO_TX_TWO_OBJ
TWO_OBJ
OBJ_TX
아래 그림은 MS Office 2007에서 사용할 수 있는 몇 가지 레이아웃을 보여줍니다.

< / a>< / div>
< / div>

제목 레이아웃을 사용하는 슬라이드 만들기

레이아웃을 사용하는 슬라이드를 만들어 봅시다 Title:

1- 클래스를 인스턴스화하여 빈 프레젠테이션을 만듭니다  XMLSlideShow:

XMLSlideShow ppt=new XMLSlideShow(); 
2- 메서드를 사용하여 슬라이드 마스터 목록 가져오기  getSlideMasters()입니다. 그런 다음 인덱스가 있는 원하는 슬라이드 마스터를 선택합니다.

XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0); 
여기서 배열의 위치 0에 있는 기본 슬라이드 마스터를 가져옵니다.

3- 메서드를 사용하여 레이아웃을 선택합니다.  getLayout()  XSLFSlideMaster 클래스의. 이 메서드는 원하는 레이아웃을 나타내는 정적 변수인 매개 변수를 허용합니다. 이 클래스에는 여러 변수가 있으며 각 변수는 슬라이드 레이아웃을 나타냅니다.

다음 코드에서는 제목 레이아웃을 만드는 방법을 보여 줍니다.

XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE); 
4- 슬라이드 레이아웃 개체를 매개 변수로 전달하여 새 슬라이드를 만듭니다.

XSLFSlide slide = ppt.createSlide(titleLayout); 

5- XSLFSlide 클래스의 getPlaceholder() 메서드를 사용하여 자리 표시자를 선택합니다. 이 메서드는 정수 매개 변수를 허용합니다. 값 0을 전달하면 슬라이드의 제목 텍스트 영역에 액세스하는 데 사용되는 XSLFTextSlide 객체가 제공됩니다. setText()로 제목 변경:

XSLFTextShape title = slide.getPlaceholder(0); 
title.setText("자바코더");

전체 프로그램은 다음과 같습니다.

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 TitleLayout {

public static void main(String args[]) throws IOException{

XMLSlideShow ppt = new XMLSlideShow();

//slidemaster
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);

//원하는 슬라이드 레이아웃을 가져옵니다
XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);

//선택한 slidelayout으로 슬라이드 만들기layout
XSLFSlide slide = ppt.createSlide(titleLayout);

//제목인 자리 표시자 0 수정
XSLFTextShape title = slide.getPlaceholder(0);

//제목 편집
title.setText("JavaCoder");

//새 pptx
파일 file=new File("Exemple.pptx");
FileOutputStream fos = 새로운 FileOutputStream(파일);

//변경사항 저장
ppt.write(fos);
System.out.println("슬라이드가 성공적으로 생성되었습니다.");
fos.close();
}
}
출력:

slide가 성공적으로 생성되었습니다


6 - XSLFTextShape 클래스의 clearText() 메서드를 호출하여 슬라이드 텍스트를 지웁니다.

body.clearText(); 
7- addNewTextParagraph() 메서드를 사용하여 새 단락을 추가합니다. 이제 addNewTextRun() 메서드를 사용하여 텍스트를 추가한 다음 setText().

body.addNewTextParagraph().addNewTextRun().setText("이것은 내 첫 번째 슬라이드 본문입니다."); 
전체 코드는 다음과 같습니다.

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 TitleAndBodyLayout {

public static void main(String args[]) throws IOException{

XMLSlideShow ppt = new XMLSlideShow();

//slidemaster
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);

//원하는 슬라이드 레이아웃을 가져옵니다
XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);

//선택한 slidelayout으로 슬라이드 만들기layout
XSLFSlide slide = ppt.createSlide(titleLayout);

//제목인 자리 표시자 0 수정
XSLFTextShape title = slide.getPlaceholder(0);

//제목 편집
title.setText("소개");

//텍스트인 자리 표시자 1을 선택합니다
XSLFTextShape body = slide.getPlaceholder(1);

//오래된 내용 삭제
body.clearText();

//단락 추가
body.addNewTextParagraph().addNewTextRun().setText("첫 번째 슬라이드");

//새 pptx
파일 file=new File("Exemple.pptx");
FileOutputStream fos = 새로운 FileOutputStream(파일);

//변경사항 저장
ppt.write(fos);
System.out.println("슬라이드가 성공적으로 생성되었습니다.");
fos.close();
}
}
출력:

slide가 성공적으로 생성되었습니다

슬라이드 크기 가져오기 및 변경



전체 프로그램은 다음과 같습니다.

import java.awt.Dimension; 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;

public class ChangingSlide {

public static void main(String args[]) throws IOException{

File file = new File("Exemple.pptx");
XMLSlideShow ppt = 새 XMLSlideShow();

//현재 차원 가져오기
차원 pptsize = ppt.getPageSize();

System.out.println("현재 슬라이드 크기:");
System.out.println("너비:" + pptsize.width);
System.out.println("높이:" + pptsize.height);

//차원 변경
ppt.setPageSize(new java.awt.Dimension(1024,400));

FileOutputStream out = 새 FileOutputStream(파일);
ppt.write(출력);
System.out.println("슬라이드 크기가 변경되었습니다.");
out.close();
}
}
출력:

현재 슬라이드 크기:
width:720
height:540
슬라이드 크기가 변경되었습니다
크기를 변경한 후 슬라이드는 다음과 같이 나타납니다.

다음 코드는 예를 보여줍니다.

import java.io.File; 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide를 사용합니다.

public class ReorderSlide {

public static void main(String args[]) throws IOException{

File file=new File("exemple.pptx");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

//슬라이드 목록 검색
java.util.List slides = ppt.getSlides();

//세 번째 슬라이드 선택
XSLFSlide selectesdslide = slides.get(2);

//첫 번째 위치에 놓습니다
ppt.setSlideOrder(selectesdslide, 0);

FileOutputStream fos = 새로운 FileOutputStream(파일);
ppt.쓰기(fos);
fos.close();
}
}
슬라이드 1과 3 사이의 스왑 전후의 표시:

< / a >< / td >< / tr>
전면 < / td >< / tr>< / tbody >< / table >
< / a>< / td >< / tr>
이후

슬라이드 삭제

removeSlide() 메서드를 호출하여 슬라이드를 삭제할 수 있습니다. 이 메서드는 삭제할 슬라이드의 위치를 나타내는 정수를 허용합니다.

 
File file=new File("fichier1.pptx");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

//0
ppt.removeSlide(0);
.
.
.
세 개의 슬라이드(1, 2, 3)가 포함된 위의 예에 이 삭제 작업을 적용하면 다음과 같이 출력됩니다.

< / a>< / div>

Add Image

XSLFSlide 클래스의 createPicture() 메서드를 사용하여 프레젠테이션에 이미지를 추가할 수 있습니다. createPicture() 메서드는 바이트 또는 바이트 배열 형식의 이미지를 받아들입니다.

추가할 이미지의 파일을 읽고 IOUtils.toByteArray().

//read image
File image=new File("C://logo.jpg");

//이미지를 바이트 배열로 변환
byte[] bimage = IOUtils.toByteArray(new FileInputStream(image));
이제 addPicture() 메서드를 사용하여 생성된 이미지를 프레젠테이션에 추가해야 합니다. 이 메소드는 image.

PictureData picdata = ppt.addPicture(picture, PictureData.PictureType.PNG); 
마지막으로 createPicture()를 사용하여 이미지를 슬라이드에 통합합니다.

XSLFPictureShape pic = slide.createPicture(picdata); 
다음 프로그램은 이미지를 추가하기 위해 다음 단계를 구현합니다.

import java.io.File; 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFPictureData를 사용합니다.
import org.apache.poi.xslf.usermodel.XSLFPictureShape;
import org.apache.poi.xslf.usermodel.XSLFSlide를 사용합니다.

public class AddImage {

public static void main(String args[]) throws IOException{

XMLSlideShow ppt = new XMLSlideShow();
XSLFSlide 슬라이드 = ppt.createSlide();

//이미지 읽기
파일 image=new File("logo.png");

//이미지를 바이트로 변환
byte[] picture = IOUtils.toByteArray(new FileInputStream(image));

//프레젠테이션에 이미지 추가
PictureData picdata = ppt.addPicture(picture, PictureData.PictureType.PNG);

//추가된 이미지에 대한 슬라이드 만들기
XSLFPictureShape pic = slide.createPicture(picdata);

파일 file=new 파일("diapoimage.pptx");
FileOutputStream fos = 새로운 FileOutputStream(파일);

ppt.쓰기(fos);
System.out.println("이미지가 추가되었습니다!");
fos.close();
}
}
파일이 생성된 후 다음과 같이 나타납니다.

Formatting Text

프레젠테이션의 텍스트는 XSLFTextRun 클래스의 메서드를 사용하여 서식을 지정할 수 있습니다. 이렇게하려면 아래와 같이 XSLFTextRun 객체를 만들어야합니다.

//제목과 내용이 있는 슬라이드 만들기
XSLFSlide slide = ppt.createSlide(slidelayout);

//자리 표시자 선택 1
XSLFTextShape body = slide.getPlaceholder(1);

//단락 추가
XSLFTextParagraph paragraph=body.addNewTextParagraph();

//TextRun 객체 만들기
XSLFTextRun run = paragraph.addNewTextRun();
setFontSize():

run.setFontColor(java.awt.Color.blue); 
run.setFontSize(26);
다음 코드는 파워포인트의 텍스트에 굵게, 기울임꼴, 밑줄 등 다양한 스타일을 적용하는 방법을 보여줍니다.

//텍스트를 굵게 변경합니다
run.setBold(true);

//텍스트를 이탤릭체로 변경
run.setItalic(true)

//텍스트 중간에 선을 그립니다
run.setStrikethrough(true);

//밑줄 text
run.setUnderline(true);
단락 사이에 공백을 두려면 XSLFTextParagraph에서 addLineBreak()를 추가합니다.

paragraph.addLineBreak(); 
다음 프로그램은 언급된 모든 방법을 수집합니다.

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.XSLFTextParagraph 를 참조하십시오.
import org.apache.poi.xslf.usermodel.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class TextFormatting {

public static void main(String args[]) throws IOException{

//빈 프레젠테이션 만들기
XMLSlideShow ppt = new XMLSlideShow();

//slidemaster
XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];

//제공된 목록에서 레이아웃 선택
XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);

//제목과 내용이 있는 슬라이드 만들기
XSLFSlide slide = ppt.createSlide(slidelayout);

//제목 선택
XSLFTextShape body = slide.getPlaceholder(1);

//슬라이드에서 기존 텍스트 제거
body.clearText();

//새 단락 추가
XSLFTextParagraph 단락=body.addNewTextParagraph();

//줄 1

XSLFTextRun run1 = paragraph.addNewTextRun();
run1.setText("컬러 라인");

//텍스트 색상 변경
run1.setFontColor(java.awt.Color.red);

//글꼴 크기 변경
run1.setFontSize(24);

//다음 줄로 건너뛰기
paragraph.addLineBreak();

//라인 2

XSLFTextRun run2 = paragraph.addNewTextRun();
run2.setText("굵은 선");
run2.setFontColor(java.awt.Color.CYAN);

//굵은 글씨체로 텍스트 렌더링
run2.setBold(true);
paragraph.addLineBreak();

//라인 3

XSLFTextRun run3 = paragraph.addNewTextRun();
run3.setText("취소선");
run3.setFontSize(12);

//텍스트 렌더링 Italic
run3.setItalic(true);

//취소선
run3.setStrikethrough(true);
paragraph.addLineBreak();

//줄 4

XSLFTextRun run4 = paragraph.addNewTextRun();
run4.setText("밑줄");
run4.setUnderline(true);

//밑줄 텍스트
paragraph.addLineBreak();

//파일 객체 생성
File file=new File("TextFormat.pptx");
FileOutputStream out = new FileOutputStream(파일);

//변경사항 저장
ppt.write(out);
out.close();
}
}
Execution: