[java] Apache POI를 이용한 Word 문서 변경 이력

Microsoft Word는 많은 사용자들에게 사무 작업을 위한 기본 도구로 널리 사용되고 있습니다. Java 프로그램에서 Word 문서를 조작하고 변경 이력을 관리해야 할 때가 있는데, 이때 Apache POI 라이브러리를 사용할 수 있습니다.

Apache POI는 Java에서 Microsoft Office 파일 형식을 다룰 수 있는 라이브러리로서, Word, Excel, PowerPoint 등의 다양한 파일들을 조작할 수 있습니다. 이 중에서도 Word 문서를 변경하고 이력을 관리하는 방법을 알아보겠습니다.

1. 의존성 추가

먼저 Apache POI를 사용하기 위해 Maven이나 Gradle 프로젝트에 의존성을 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependencies>
  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
  </dependency>
</dependencies>

Gradle을 사용하는 경우 build.gradle 파일에 다음과 같이 의존성을 추가합니다.

dependencies {
  implementation 'org.apache.poi:poi:4.1.2'
}

의존성을 추가한 후 프로젝트를 빌드하면 Apache POI 라이브러리를 사용할 수 있는 환경이 준비됩니다.

2. Word 문서 열기

Apache POI를 사용하여 Word 문서를 열려면 XWPFDocument 클래스를 사용합니다. 다음은 예제 코드입니다.

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.FileInputStream;
import java.io.IOException;

public class WordDocument {
    public static void main(String[] args) {
        try {
            FileInputStream file = new FileInputStream("path/to/your/document.docx");
            XWPFDocument document = new XWPFDocument(file);

            // 문서 조작 작업 수행

            document.close();
            file.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

XWPFDocument 객체를 생성하고, 파일을 열기 위해 FileInputStream을 사용합니다. 경로는 실제 문서 파일의 경로로 변경해야 합니다.

3. 문서 변경

Word 문서를 변경하기 위해서는 주로 XWPFParagraphXWPFRun 클래스를 사용합니다. XWPFParagraph은 문단을 나타내고, XWPFRun은 문단 내의 텍스트를 나타냅니다. 다음은 예제 코드입니다.

import org.apache.poi.xwpf.usermodel.XWPFParagraph;

// ...

// 문단 리스트 가져오기
List<XWPFParagraph> paragraphs = document.getParagraphs();

// 모든 문단에 대해 변경 작업 수행
for (XWPFParagraph paragraph : paragraphs) {
    // 특정 텍스트를 변경할 경우
    if (paragraph.getText().contains("oldText")) {
        // 텍스트 변경
        String newText = paragraph.getText().replace("oldText", "newText");
        paragraph.setText(newText);
    }

    // 텍스트를 굵게 변경할 경우
    for (XWPFRun run : paragraph.getRuns()) {
        run.setBold(true);
    }
}

XWPFDocument 객체에서 getParagraphs() 메서드를 호출하여 모든 문단을 가져올 수 있습니다. 다음으로, 각 문단에 대해 변경 작업을 수행하면 됩니다. 특정 텍스트를 변경하는 경우 getText() 메서드로 현재 텍스트를 가져온 후, replace() 메서드를 사용하여 변경합니다. 텍스트를 굵게 변경하는 경우 setBold() 메서드를 사용하여 글꼴 속성을 변경합니다.

4. 변경된 문서 저장

Word 문서를 변경한 후에는 변경된 내용을 저장해야 합니다. 저장하기 위해서는 FileOutputStream을 사용하여 새로운 파일에 변경된 내용을 쓰는것이 일반적입니다.

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class WordDocument {
    public static void main(String[] args) {
        try {
            FileInputStream file = new FileInputStream("path/to/your/document.docx");
            XWPFDocument document = new XWPFDocument(file);

            // 문서 조작 작업 수행

            FileOutputStream out = new FileOutputStream("path/to/your/modified_document.docx");
            document.write(out);

            document.close();
            file.close();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

FileOutputStream을 새로운 파일 경로로 초기화한 다음, write() 메서드를 사용하여 변경 내용을 쓸 수 있습니다.

결론

Apache POI를 사용하면 Java로 Word 문서를 변경하고, 변경 내용을 관리할 수 있습니다. 위의 예제 코드를 참고하여 필요에 맞게 Word 문서를 조작해보세요. Apache POI의 다양한 클래스와 메서드를 이용하여 복잡한 작업도 수행할 수 있습니다. 자세한 내용은 Apache POI 공식 문서를 참고하시기 바랍니다.