[java] Apache POI를 이용한 Word 이미지 삽입

Apache POI는 Java에서 Microsoft Office문서를 생성하고 편집할 수 있는 라이브러리입니다. 이 라이브러리를 사용하면 Java로 워드 문서를 생성하고 이미지를 삽입할 수 있습니다. 이번 블로그에서는 Apache POI를 사용하여 워드 문서에 이미지를 삽입하는 방법에 대해 알아보겠습니다.

1. Apache POI 의존성 추가

우선, Maven 프로젝트를 사용하는 경우, pom.xml 파일에 다음 의존성을 추가해야 합니다.

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

Gradle 프로젝트를 사용하는 경우, build.gradle 파일에 다음 의존성을 추가해야 합니다.

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

이후, Maven이나 Gradle을 사용하여 의존성을 업데이트합니다.

2. 워드 문서 생성 및 이미지 삽입

아래는 Apache POI를 사용하여 워드 문서에 이미지를 삽입하는 예제 코드입니다. 이미지 파일은 로컬 경로에 존재한다고 가정합니다.

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

import java.io.*;

public class WordImageInsertion {

    public static void main(String[] args) {
        // 워드 문서 생성
        XWPFDocument doc = new XWPFDocument();

        // 이미지 삽입
        try {
            // 이미지 파일 경로
            String imagePath = "C:/path/to/image.png";
            File imageFile = new File(imagePath);
            FileInputStream fis = new FileInputStream(imageFile);
            byte[] imageData = IOUtils.toByteArray(fis);
            fis.close();

            // 이미지 삽입을 위한 Inline 삽입 정보 생성
            int format;
            if (imagePath.endsWith(".png")) {
                format = XWPFDocument.PICTURE_TYPE_PNG;
            } else if (imagePath.endsWith(".jpeg") || imagePath.endsWith(".jpg")) {
                format = XWPFDocument.PICTURE_TYPE_JPEG;
            } else {
                throw new IllegalArgumentException("Unsupported image format");
            }

            int imageWidth = 200; // 이미지 너비
            int imageHeight = 200; // 이미지 높이

            // 이미지 삽입
            XWPFParagraph paragraph = doc.createParagraph();
            XWPFRun run = paragraph.createRun();
            int picId = doc.getNextPicNameNumber(format);
            run.addPicture(new ByteArrayInputStream(imageData), format, "image" + picId, Units.toEMU(imageWidth), Units.toEMU(imageHeight));

            // 워드 문서 저장
            FileOutputStream fos = new FileOutputStream("C:/path/to/output.docx");
            doc.write(fos);
            fos.close();

            System.out.println("이미지가 성공적으로 삽입되었습니다.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예제 코드는 워드 문서를 생성하고 이미지를 삽입하는 기본적인 예제입니다. 필요에 따라 삽입할 이미지의 경로와 삽입할 이미지의 크기를 조정하여 사용하면 됩니다.

결론

Apache POI를 사용하면 Java에서 워드 문서에 이미지를 쉽게 삽입할 수 있습니다. 이를 통해 워드 문서를 동적으로 생성하거나 이미지를 삽입해야 하는 경우 유용하게 활용할 수 있습니다. 참고 자료는 Apache POI 공식 문서를 참조하시기 바랍니다.