개발/Java

Apache POI를 이용한 워드파일(.docx) 생성방법

정리하는개발자 2023. 11. 7. 09:08
728x90
반응형

실제 프로젝트를 진행하다 보면 MS워드파일을 생성해야 하는 경우가 발생한다.

이때 사용하는 라이브러리가 Apache POI 이며 2023년 11월 7일 기준으로 최신버전은 5.2.4 버전이다.

 

Apache POI - https://poi.apache.org/

 

Apache POI - the Java API for Microsoft Documents

<!--+ |breadtrail +--> <!--+ |start Menu, mainarea +--> <!--+ |start Menu +--> <!--+ |end Menu +--> <!--+ |start content +--> Apache POI - the Java API for Microsoft Documents Project News 28 September 2023 - POI 5.2.4 available The Apache POI team is plea

poi.apache.org

 

개발환경

  • JDK 11 / Maven
  • Apache POI 5.2.4

 

pom.xml 설정

<!-- 의존성 -->
<dependencies>
	<dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi</artifactId>
		<version>5.2.4</version>
	</dependency>
	<!-- MS워드파일 생성시 추가 poi-ooxml -->
	<dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi-ooxml</artifactId>
		<version>5.2.4</version>
	</dependency>
	<!-- 로깅 기본 설정 -->
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-core</artifactId>
		<version>2.21.1</version>
	</dependency>
	<dependency>
	<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>3.13.0</version>
	</dependency>
</dependencies>

 

소스 - WordHelloWorld.java

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

/**
 * <pre>
 * [2023.11.03]
 *   * Hello World!! 워드파일 생성 예제 
 *   * 생성된 워드파일은 사용자 임시폴더의 년월일시분초_HelloWorld.docx 파일로 생성된다.
 *     - 경로 예) C:\Users\wyleedp\AppData\Local\Temp\20231106101051_HelloWorld.docx
 * </pre>
 */
public class WordHelloWorld {

	public void exec() {
		System.out.println("워드파일 생성 시작");
		
		FileOutputStream fos = null;
		XWPFDocument documentWord = null;
		
		try {
			String tmpHome = System.getProperties().getProperty("java.io.tmpdir");
			String wordFileName = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss") + "_HelloWorld.docx";
			String wordFilePath = tmpHome + wordFileName;
			
			documentWord = new XWPFDocument();
			
			XWPFParagraph XWPFParagraph = documentWord.createParagraph();
			XWPFParagraph.setAlignment(ParagraphAlignment.LEFT);
			
			XWPFRun helloRun = XWPFParagraph.createRun();
			helloRun.setFontFamily("맑은 고딕");
			helloRun.setColor("2FB2F3");
			helloRun.setFontSize(20);
			helloRun.setText("Hello World!!!");
			
			fos = new FileOutputStream(wordFilePath);
			documentWord.write(fos);
			
			System.out.println("워드파일 생성완료 : " + wordFilePath + " [" + FileUtils.byteCountToDisplaySize(new File(wordFilePath).length()) + "]");
		}catch(Exception e) {
			e.printStackTrace();
		} finally {
			IOUtils.closeQuietly(fos);
			try {
				documentWord.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
		
	}
	
	public static void main(String[] args) {
		WordHelloWorld wordHelloWorld = new WordHelloWorld();
		wordHelloWorld.exec();
	}
	
}

 

생성된 워드파일

Apache POI를 이용한 워드파일 생성(.docx)

 

생성된 워드파일 화면

Apache POI를 이용한 워드파일 실제화면

 

소스 전체를 GitHub에서 확인할 수 있다.

https://github.com/wyleedp/poi-worker/blob/main/src/main/java/com/github/wyleedp/poi/worker/WordHelloWorld.java

 

728x90
반응형