본문 바로가기

개발/Java

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

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
반응형