카테고리 없음

자바에서 한글(hwpx) 파일 읽기 - hwpxlib

방감자 2025. 4. 8. 10:19

hwpxlib로 HWPX 파일 텍스트 추출하기

이전 글에서 hwplib을 활용해 .hwp 문서에서 텍스트를 추출하는 방법을 다뤘다.
이번 글에서는 그 후속으로, .hwpx 파일을 다룰 수 있는 hwpxlib 사용법에 대해 정리하려고 한다.


기본 사용 예제

아래 코드는 hwpxlib를 이용해 .hwpx 파일에서 텍스트를 추출하는 가장 기본적인 형태다.

public class Hwpxlib {
    public static void main(String[] args) throws Exception {
        HWPXFile hwpFile = HWPXReader.fromFilepath("C:/Users/eunji/Downloads/새 한글.hwpx");
        TextMarks textMarks = new TextMarks();
        String text = TextExtractor.extract(hwpFile,TextExtractMethod.InsertControlTextBetweenParagraphText,true, textMarks);

        System.out.println(text);
    }
}

여기서 핵심은 TextMarks 클래스다.
이 클래스는 텍스트 추출 시 표, 단락, 줄바꿈 등 문서 구조에 해당하는 마크를 삽입하는 기능을 제공한다.

 

TextMarks란?

TextMarks는 추출되는 텍스트에 구조를 식별할 수 있는 문자열 마크를 삽입할 수 있도록 도와준다.

예를 들어 아래와 같이 설정할 수 있다:

 

TextMarks marks = new TextMarks()
    .tableStartAnd("\n[TABLE_START]\n")
    .tableEndAnd("\n[TABLE_END]\n")
    .tableRowSeparatorAnd("[ROW_END]\n")
    .tableCellSeparatorAnd(" | ");

이렇게 설정하면 표가 포함된 문서를 추출할 때 아래처럼 출력된다:

 

[TABLE_START]
이름 | 나이 | 직업[ROW_END]
홍길동 | 30 | 개발자[ROW_END]
김철수 | 28 | 디자이너[ROW_END]
[TABLE_END]

 

즉, 마크를 삽입해둠으로써 추출된 텍스트에서도 구조를 쉽게 파악할 수 있게 된다.

 

TextMarks 주요 필드

TextMarks 클래스에는 설정 가능한 다양한 필드가 존재한다.
예를 들어 다음과 같은 마크들을 지정할 수 있다:

 
private String paraSeparator;
private String lineBreak;
private String tab;
private String tableStart;
private String tableEnd;
private String tableRowSeparator;
private String tableCellSeparator;
private String rectangleStart;
private String rectangleEnd;
// 그 외에도 텍스트 아트, 곡선, 도형 등에 대한 필드가 존재

필요한 마크만 골라서 설정하면 된다.


업로드 파일에서 텍스트 추출

아래는 업로드된 .hwpx 파일에서 텍스트를 추출하는 코드 예제다.

private static void hwpxUpload(MultipartFile file) throws Exception {
    File convFile = FileUtil.convertToFile(file);
    HWPXFile hwpFile = HWPXReader.fromFile(convFile);
    
    TextMarks marks = new TextMarks()
            .paraSeparatorAnd("\n\n")              // 단락 구분은 빈 줄
            .lineBreakAnd("\n")                    // 줄바꿈
            .tabAnd("\t")                          // 탭 문자
            .tableStartAnd("\n")                   // 표 시작
            .tableEndAnd("\n")                     // 표 끝
            .tableRowSeparatorAnd("\n")            // 행 구분
            .tableCellSeparatorAnd(" | ");         // 셀 구분

    String text = TextExtractor.extract(
        hwpFile, 
        TextExtractMethod.InsertControlTextBetweenParagraphText, 
        true, 
        marks
    );

    System.out.println(text);
}

이처럼 적절한 마크를 설정하면 추출된 텍스트를 훨씬 더 깔끔하게 정리할 수 있으며,
향후 후처리나 파싱 작업에도 유리하다.

 

TextExtractMethod는 텍스트 추출 방식에 대한 설정이다.
이번 예제에서는 InsertControlTextBetweenParagraphText를 사용했는데,
이는 문단과 컨트롤 사이에 텍스트를 끼워 넣는 방식이다.

해당 메서드에 대한 자세한 설명은 이전 글인 hwplib 텍스트 추출 방법에서 다뤘으니 참고하길 바란다.