Java와 GroupDocs를 사용하여 이미지로 PDF에 주석 달기

이미지로 PDF에 이미지로 PDF에 주석 달기—예를 들어 로고, 다이어그램, 또는 사진을 계약서나 교육 매뉴얼에 직접 삽입하는 경우—Java용 GroupDocs.Annotation을 사용하면 손쉽게 할 수 있습니다. 이 튜토리얼에서는 이미지 주석을 추가하고, 불투명도와 회전을 제어하며, 암호로 보호된 PDF나 대용량 파일과 같은 일반적인 문제를 처리하는 방법을 보여드립니다. 끝까지 진행하면 프로그래밍 방식으로 PDF에 이미지를 삽입하고, 생산 환경에 자신 있게 배포할 수 있게 됩니다.

빠른 답변

  • Java로 PDF에 이미지를 추가할 수 있나요? 예 – GroupDocs.Annotation의 ImageAnnotation 클래스를 사용하세요.
  • 이미지 불투명도를 제어하는 메서드는 무엇인가요? setOpacity(float) 메서드를 주석 객체에 호출하세요.
  • 프로덕션에 라이선스가 필요합니까? 테스트용으로는 체험판을 사용할 수 있지만, 상업적 사용을 위해서는 정식 라이선스가 필요합니다.
  • 암호로 보호된 PDF에 주석을 달 수 있나요? 예 – Annotator를 생성할 때 비밀번호를 제공하면 됩니다.
  • 필요한 Java 버전은 무엇인가요? Java 8 이상이며, 최상의 성능을 위해 Java 11 이상을 권장합니다.

PDF에 이미지를 추가한다는 것은 무엇인가요?

PDF 페이지에 이미지를 로드하면 이미지 주석이 생성되어 문서의 콘텐츠 스트림의 일부가 됩니다. ImageAnnotation은 이미지 데이터, 위치, 크기, 회전 및 시각적 스타일을 저장하는 객체로, 그림을 다른 주석 유형과 동일하게 다룰 수 있게 합니다.

Java용 GroupDocs Annotation을 사용하는 이유는?

PDF를 로드하고 ImageAnnotation을 첨부한 뒤 저장하면 외부 뷰어가 필요 없습니다. GroupDocs Annotation은 50개 이상의 입력 및 출력 형식을 지원하고, 전체 파일을 메모리에 로드하지 않고 500 MB까지의 PDF를 처리할 수 있으며, Windows, Linux, macOS에서 실행됩니다. API를 통해 배치, 불투명도(0‑1 범위), 회전(0‑360°)을 세밀하게 제어할 수 있어 엔터프라이즈 수준 문서 워크플로에 이상적입니다.

전제 조건

  • Java 8 이상 (Java 11+ 권장).
  • IDE – IntelliJ IDEA, Eclipse 또는 Java 호환 편집기.
  • 빌드 도구 – Maven 또는 Gradle (예제는 Maven 사용).

GroupDocs.Annotation 설정

pom.xml에 Maven 저장소와 의존성을 추가합니다:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/annotation/java/</url>
   </repository>
</repositories>
<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-annotation</artifactId>
      <version>25.2</version>
   </dependency>
</dependencies>

Pro tip: 최신 버전은 항상 GroupDocs 릴리스 페이지에서 확인하세요. Version 25.2는 2025년 초 기준 최신이었지만, 이후 릴리스에서 기능이 추가될 수 있습니다.

라이선스 (이 단계는 건너뛰지 마세요!)

You have three options:

  1. Free trial – 테스트에 적합하며, GroupDocs 체험 페이지에서 받을 수 있습니다.
  2. Temporary license – 평가 시간을 더 필요로 하면, 임시 라이선스 페이지에서 받으세요.
  3. Full license – 프로덕션 사용을 위해, 구매 페이지에서 구입할 수 있습니다.

시작하기 – 첫 번째 이미지 주석

1단계: Annotator 초기화

Annotator는 PDF를 열고 수정 준비를 하는 진입점입니다.
Annotator는 PDF 문서를 로드하고, 주석 컬렉션을 제공하며, 변경 사항을 디스크에 저장하는 핵심 클래스입니다.

try (final Annotator annotator = new Annotator("YOUR_DOCUMENT_DIRECTORY/input.pdf")) {
    // Your annotation magic happens here
}

왜 try‑with‑resources를 사용하나요? 이는 Annotator가 닫히고 파일 핸들을 해제하도록 보장하여 메모리 누수를 방지합니다.

2단계: 이미지 주석 생성 및 구성

아래는 최소한의 ImageAnnotation 설정 예시입니다; ImageAnnotation은 PDF 페이지에 배치할 수 있는 이미지 기반 주석을 나타냅니다. 여기서는 사각형, 불투명도, 페이지 번호, 이미지 소스 및 회전 각도를 정의합니다.

Rectangle는 페이지에서 주석의 위치와 크기를 정의합니다. Rectangle(100, 100, 100, 100)은 왼쪽 상단 모서리에서 (100, 100) 시작해 100 × 100 px 크기의 박스를 만든다는 의미입니다. 레이아웃에 맞게 이 숫자를 조정하세요.

// Initialize the image annotation
class ImageAnnotation {
    public void setBox(Rectangle rectangle) { /* Implementation */ }
    public void setOpacity(double opacity) { /* Implementation */ }
    public void setPageNumber(int pageNumber) { /* Implementation */ }
    public void setImagePath(String imagePath) { /* Implementation */ }
    public void setAngle(double angle) { /* Implementation */ }
}

// Create your image annotation
ImageAnnotation imageAnnotation = new ImageAnnotation();

// Position and size (x, y, width, height in pixels)
imageAnnotation.setBox(new Rectangle(100, 100, 100, 100));

// Make it 70% opaque (0.0 = transparent, 1.0 = fully opaque)
imageAnnotation.setOpacity(0.7);

// Place it on the first page (0‑indexed)
imageAnnotation.setPageNumber(0);

// Your image source (can be local file or URL)
imageAnnotation.setImagePath("www.google.com.ua/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png");

// Rotate it 100 degrees (because why not?)
imageAnnotation.setAngle(100.);

setOpacity 이해하기 – setOpacity(float) 메서드는 주석의 투명도를 0(완전 투명)에서 1(완전 불투명) 사이의 값으로 설정합니다.

3단계: 주석 적용 및 저장

이제 주석을 문서에 첨부하고 결과를 디스크에 저장합니다.

// Add the annotation to your document
annotator.add(imageAnnotation);

// Save the annotated PDF
annotator.save("YOUR_OUTPUT_DIRECTORY/result_image_annotation.pdf");

이것으로 끝입니다 – 이제 이미지로 PDF에 주석 달기를 성공적으로 수행했습니다.

일반적인 문제 및 해결책

파일 경로 문제

  • 증상: FileNotFoundException 또는 빈 이미지.
  • 해결책: 절대 경로를 사용하거나 URL에 접근 가능한지 확인하세요.
// Bad: relative path that may fail
imageAnnotation.setImagePath("images/logo.png");

// Good: absolute path
imageAnnotation.setImagePath("/full/path/to/your/images/logo.png");

이미지 크기 및 품질

  • 증상: 픽셀이 깨지거나 이미지가 너무 큽니다.
  • 해결책: 이미지 크기를 주석 사각형에 맞추세요.
// Rectangle is 200 × 200, so use an image at least that size
imageAnnotation.setBox(new Rectangle(50, 50, 200, 200));

대용량 PDF 메모리 문제

  • 증상: OutOfMemoryError.
  • 해결책: 문서를 배치 처리하고 이미지를 가볍게 유지하세요.

이미지로 PDF에 주석을 달아야 할 때

시각적 컨텍스트가 일반 텍스트로는 전달할 수 없는 가치를 추가할 때 PDF에 이미지를 주석으로 달아야 합니다—예를 들어 현장 사진을 검사 보고서에 첨부하거나, 교육 워크시트에 다이어그램을 삽입하거나, 계약서에 로고를 스탬프하는 경우 등입니다. 이미지 주석을 사용하면 원본 PDF 레이아웃을 유지하면서 독자에게 추가 시각 정보를 즉시 제공할 수 있습니다.

성능 최적화 권장 사항

이미지 소스 최적화

// Avoid huge files
imageAnnotation.setImagePath("massive_10mb_image.png");

// Resize to match annotation box (e.g., 100 × 100)

배치 처리 전략

List<String> pdfFiles = Arrays.asList("doc1.pdf", "doc2.pdf", "doc3.pdf");

for (String pdfFile : pdfFiles) {
    try (final Annotator annotator = new Annotator(pdfFile)) {
        ImageAnnotation annotation = createImageAnnotation();
        annotator.add(annotation);
        annotator.save("annotated_" + pdfFile);
    }
}

리소스 관리

// Good – automatically closes resources
try (final Annotator annotator = new Annotator("input.pdf")) {
    // Your code here
}

// Bad – might cause memory leaks
Annotator annotator = new Annotator("input.pdf");
// ... do stuff ...
// Forgot to close!

고급 구성 팁

동적 위치 지정

// Bottom‑right corner placement (assuming standard Letter size)
int pageWidth = 612;   // points
int pageHeight = 792;  // points
int imageSize = 50;

Rectangle dynamicPosition = new Rectangle(
    pageWidth - imageSize - 10,   // 10 px margin from right
    pageHeight - imageSize - 10,  // 10 px margin from bottom
    imageSize,
    imageSize
);

imageAnnotation.setBox(dynamicPosition);

한 페이지에 여러 이미지

// Add a logo
ImageAnnotation logo = new ImageAnnotation();
logo.setBox(new Rectangle(50, 50, 100, 50));
logo.setImagePath("company_logo.png");
logo.setPageNumber(0);

// Add an approval stamp
ImageAnnotation stamp = new ImageAnnotation();
stamp.setBox(new Rectangle(400, 700, 100, 50));
stamp.setImagePath("approved_stamp.png");
stamp.setPageNumber(0);

annotator.add(logo);
annotator.add(stamp);

자주 묻는 질문

Q: 사용할 수 있는 최대 이미지 크기는 얼마인가요?
A: 명확한 제한은 없지만, 최적 성능을 위해 이미지는 2 MB 이하로 유지하세요.

Q: 애니메이션 GIF를 사용할 수 있나요?
A: GroupDocs는 애니메이션 GIF의 첫 번째 프레임만 렌더링합니다.

Q: 이미지를 정확히 어떻게 배치하나요?
A: GroupDocs는 좌상단을 원점으로 사용하며, Rectangle 좌표는 해당 지점으로부터 픽셀 단위로 측정됩니다.

Q: 암호로 보호된 PDF에 주석을 달 수 있나요?
A: 예 – Annotator를 생성할 때 비밀번호를 제공하면 됩니다.

Q: 모든 PDF 버전에서 작동하나요?
A: 지원되는 PDF 버전은 1.4부터 2.0까지이며, 거의 모든 PDF에 적용됩니다.

마무리

이제 GroupDocs.Annotation for Java을 사용하여 이미지로 PDF에 주석 달기를 위한 탄탄한 기반을 갖추었습니다. 다음을 기억하세요:

  • try‑with‑resources를 사용해 자원을 깔끔히 해제하세요.
  • PDF를 가볍게 유지하기 위해 이미지 크기를 최적화하세요.
  • 경로 관련 오류를 방지하려면 절대 경로로 테스트하세요.
  • 시각 디자인에 맞는 불투명도와 회전을 선택하세요.

다음 단계: 다른 주석 유형(텍스트, 도형, 하이라이트)을 살펴보거나 이 로직을 Spring Boot 서비스에 통합하여 실시간 PDF 처리를 구현하세요.

docs.groupdocs.com에 있는 문서에는 더 심화된 예제와 API 레퍼런스가 있어, 더 깊이 탐구하고 싶을 때 참고하세요.


마지막 업데이트: 2026-09-15
테스트 환경: GroupDocs.Annotation 25.2 (Java)
작성자: GroupDocs

리소스 및 지원

관련 튜토리얼