Skip to content

Latest commit

ย 

History

History
532 lines (394 loc) ยท 25.8 KB

File metadata and controls

532 lines (394 loc) ยท 25.8 KB
categories
Java Development
date 2026-01-18
description GroupDocs.Annotation์„ ์‚ฌ์šฉํ•˜์—ฌ Java์—์„œ PDF ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ๋ณด๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ์„ธ์š”. ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์˜ˆ์ œ๋กœ PDF, Word ๋ฌธ์„œ ๋“ฑ์—์„œ ๊ณ ํ’ˆ์งˆ PNG ์ธ๋„ค์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
keywords Java document page preview generator, GroupDocs.Annotation Java tutorial, generate PNG document previews Java, Java document thumbnail creation, how to create document page previews in Java
lastmod 2026-01-18
linktitle Java Document Page Preview Generator
tags
document-processing
java-libraries
pdf-preview
groupdocs
title preview pdf java โ€“ Java ๋ฌธ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ๊ธฐ (2025)
type docs
url /ko/java/document-preview/groupdocs-annotation-java-document-page-previews/
weight 1

Java ๋ฌธ์„œ ํŽ˜์ด์ง€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ๊ธฐ - PNG ์ธ๋„ค์ผ ๋งŒ๋“ค๊ธฐ (2025 ๊ฐ€์ด๋“œ)

์†Œ๊ฐœ

์ „์ฒด ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฒŒ ํ•˜์ง€ ์•Š๊ณ  ๋ฌธ์„œ์˜ ๋น ๋ฅธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค˜์•ผ ํ–ˆ๋˜ ์ ์ด ์žˆ๋‚˜์š”? ๋ฌธ์„œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋“ , ํŒŒ์ผ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋งŒ๋“ค๋“ , ํ˜น์€ ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ์‚ด์ง ์—ฟ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋“ , preview pdf java๋Š” ๊ฒŒ์ž„ ์ฒด์ธ์ €์ž…๋‹ˆ๋‹ค.

๋น ๋ฅด๊ฒŒ preview pdf java ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ์ด ๊ฐ€์ด๋“œ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์ธ๋„ค์ผ์ด๋‚˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“œ๋Š” ์ผ์€ ์•…๋ชฝ๊ณผ๋„ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์œ ํ˜•๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ณ , ๋‹ค์–‘ํ•œ ํฌ๋งท์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ, ์—ฃ์ง€ ์ผ€์ด์Šค์™€ ์”จ๋ฆ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์—ฌ๊ธฐ์„œ GroupDocs.Annotation for Java๊ฐ€ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค โ€“ ๋ฌธ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ์„ ์œ„ํ•œ ์Šค์œ„์Šค ๊ตฐ์šฉ ๋‚˜์ดํ”„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋ช‡ ์ค„์˜ Java ์ฝ”๋“œ๋งŒ์œผ๋กœ ๊ฑฐ์˜ ๋ชจ๋“  ๋ฌธ์„œ ์œ ํ˜•์—์„œ ๊ณ ํ’ˆ์งˆ PNG ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ •๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ์ตœ์ ํ™” ๊ธฐ๋ฒ•, ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ œ๊นŒ์ง€ ๋ชจ๋‘ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ฐฐ์šฐ๊ฒŒ ๋  ๋‚ด์šฉ:

  • GroupDocs.Annotation for Java ์„ค์ •ํ•˜๊ธฐ (์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•)
  • ์ตœ์†Œ ์ฝ”๋“œ๋กœ ์„ ๋ช…ํ•œ PNG ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑํ•˜๊ธฐ
  • ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์˜ต์…˜ ๋ฏธ์„ธ ์กฐ์ •ํ•˜๊ธฐ
  • ๋ฌธ์ œ ๋ฐœ์ƒ ์ „์— ์ผ๋ฐ˜์ ์ธ ์ด์Šˆ ๋ฏธ๋ฆฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ
  • ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฌธ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋ฐ”๊ฟ€ ์ค€๋น„๊ฐ€ ๋˜์…จ๋‚˜์š”? ๋ฐ”๋กœ ์‹œ์ž‘ํ•ด๋ด…์‹œ๋‹ค!

๋น ๋ฅธ ๋‹ต๋ณ€

  • preview pdf java๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š”? GroupDocs.Annotation for Java
  • ํ•„์š”ํ•œ ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜๋Š”? ๊ธฐ๋ณธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์— ์•ฝ 10โ€“15์ค„
  • ์ถ”์ฒœ ์ด๋ฏธ์ง€ ํฌ๋งท์€? ๋ฌด์†์‹ค ํ’ˆ์งˆ์„ ์œ„ํ•œ PNG
  • ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ๋ณผ ์ˆ˜ ์žˆ๋‚˜์š”? ์˜ˆ, PreviewOptions์— ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค
  • ํ”„๋กœ๋•์…˜์— ๋ผ์ด์„ ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ, ์ƒ์šฉ ๋ผ์ด์„ ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›Œํ„ฐ๋งˆํฌ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค

preview pdf java๋ž€?

preview pdf java๋Š” PDF(๋˜๋Š” ์ง€์›๋˜๋Š” ๋‹ค๋ฅธ ๋ฌธ์„œ)์˜ ๊ฐ ํŽ˜์ด์ง€๋ฅผ ์ด๋ฏธ์ง€โ€”๋ณดํ†ต PNG ๋˜๋Š” JPEGโ€”๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์›น ์•ฑ, ๋ชจ๋ฐ”์ผ ์•ฑ, ๋ฐ์Šคํฌํ†ฑ ๋„๊ตฌ์—์„œ ์›๋ณธ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์—ด์ง€ ์•Š๊ณ ๋„ ๋ฌธ์„œ ์ธ๋„ค์ผ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์ œ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ

์ฝ”๋“œ ์ž‘์„ฑ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, ๋ฌธ์„œ ํŽ˜์ด์ง€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ์ด ๋น›์„ ๋ฐœํ•˜๋Š” ์ƒํ™ฉ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค:

๋ฌธ์„œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ โ€“ ์‚ฌ์šฉ์ž๋Š” ๊ฐ ํŒŒ์ผ์„ ์—ด์ง€ ์•Š๊ณ ๋„ ๋น ๋ฅด๊ฒŒ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ๊ฐ€ ๋ฌธ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์„ ๋– ์˜ฌ๋ ค ๋ณด์„ธ์š”. ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ปค๋จธ์Šค ํ”Œ๋žซํผ โ€“ ์ „์ž์ฑ…, ํ…œํ”Œ๋ฆฟ, ๋ณด๊ณ ์„œ์™€ ๊ฐ™์€ ๋””์ง€ํ„ธ ์ œํ’ˆ์„ ํŒ๋งคํ•˜๋‚˜์š”? ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง€๋Š” ๊ณ ๊ฐ์ด ๊ตฌ๋งค ์ „ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๊ฒŒ ํ•ด ์ฃผ์–ด ์ „ํ™˜์œจ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ•๋ฅ  ์†Œํ”„ํŠธ์›จ์–ด โ€“ ๋ณ€ํ˜ธ์‚ฌ์™€ ๋ฒ•๋ฌด ๋ณด์กฐ์›์€ ๊ณ„์•ฝ์„œ, ์ฆ์–ธ ๊ธฐ๋ก, ์‚ฌ๊ฑด ํŒŒ์ผ ๋“ฑ์—์„œ ํŠน์ • ํŽ˜์ด์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ธ๋„ค์ผ์€ ์ด ๊ณผ์ •์„ ๋ฒˆ๊ฐœ์ฒ˜๋Ÿผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

๊ต์œก ํ”Œ๋žซํผ โ€“ ํ•™์ƒ๋“ค์€ ๊ต๊ณผ์„œ ํŽ˜์ด์ง€, ๊ณผ์ œ, ์ฐธ๊ณ  ์ž๋ฃŒ ๋“ฑ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๊ณต๋ถ€ํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜ํ…์ธ  ์Šน์ธ ์›Œํฌํ”Œ๋กœ โ€“ ๋งˆ์ผ€ํŒ… ํŒ€, ์ถœํŒ์‚ฌ, ์ฝ˜ํ…์ธ  ์ œ์ž‘์ž๋Š” ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ด์ง€ ์•Š๊ณ ๋„ ๋ฌธ์„œ ๋ ˆ์ด์•„์›ƒ๊ณผ ๋‚ด์šฉ์„ ํ•œ๋ˆˆ์— ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GroupDocs.Annotation์˜ ์žฅ์ ์€ ๋ชจ๋“  ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹คโ€”PDF, Word, Excel, PowerPoint ๋“ฑ ์–ด๋–ค ํฌ๋งท์ด๋“  ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ API, ๋ชจ๋“  ํฌ๋งท.

์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์ค€๋น„๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค. ์„ค์ •์€ ๊ฝค ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์ข…์†์„ฑ

์šฐ๋ฆฌ์˜ ์ฃผ์ธ๊ณต์€ GroupDocs.Annotation for Java์ž…๋‹ˆ๋‹ค. Maven์„ ์‚ฌ์šฉํ•ด ์ข…์†์„ฑ์„ ๊ด€๋ฆฌํ•  ๊ฒƒ์ด๋ฉฐ, ์ˆ˜๋™์œผ๋กœ JAR ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์€ ์ด์ œ ๊ทธ๋งŒ.

ํ™˜๊ฒฝ ์„ค์ • ์š”๊ตฌ ์‚ฌํ•ญ

  • Java Development Kit (JDK): JDKโ€ฏ8 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ๋ฒ„์ „์„ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ์ง€๊ธˆ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹คโ€”์„ฑ๋Šฅ๊ณผ ๋ณด์•ˆ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ๋„๊ตฌ: Maven ๋˜๋Š” Gradle (์˜ˆ์ œ๋Š” Maven ์‚ฌ์šฉ, ๊ฐœ๋…์€ ๋™์ผ)
  • IDE: ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋งŒ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ, IntelliJ IDEA ๋˜๋Š” Eclipse๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊น…๊ณผ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.

์ง€์‹ ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

๊ธฐ๋ณธ Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ต์ˆ™ํ•˜๊ณ  Maven ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Maven์ด ์ฒ˜์Œ์ด๋ผ๋ฉด ๊ฑฑ์ • ๋งˆ์„ธ์š”โ€”์‚ฌ์šฉํ•  ๊ฐœ๋…์€ ๋งค์šฐ ๊ธฐ๋ณธ์ ์ด๋ฉฐ Maven ์‹œ์ž‘ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

GroupDocs.Annotation for Java ์„ค์ •ํ•˜๊ธฐ

์ด์ œ ์‹ค์ œ ์„ค์ • ๋‹จ๊ณ„๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ์ข‹์€ ์†Œ์‹์€ GroupDocs๊ฐ€ ์ด ๊ณผ์ •์„ ๋†€๋ผ์šธ ์ •๋„๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

Maven ์„ค์ •:
ํ”„๋กœ์ ํŠธ์— GroupDocs.Annotation์„ ํฌํ•จํ•˜๋ ค๋ฉด pom.xml์— ๋‹ค์Œ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

<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>

ํŒ: ์ตœ์‹  ๋ฒ„์ „ ๋ฒˆํ˜ธ๋Š” GroupDocs ์›น์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•˜์„ธ์š”. ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ •๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค ํš๋“

๋ผ์ด์„ ์Šค์— ๋Œ€ํ•ด ๊ผญ ์•Œ์•„๋‘์–ด์•ผ ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. GroupDocs.Annotation์€ ์ƒ์—…์  ์‚ฌ์šฉ์— ๋ฌด๋ฃŒ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ, ํ‰๊ฐ€์šฉ์€ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๋ฌด๋ฃŒ ์ฒดํ—˜: ํ…Œ์ŠคํŠธ์™€ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. GroupDocs releases page์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”. ์ฒดํ—˜ ๋ฒ„์ „์€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์— ์›Œํ„ฐ๋งˆํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  • ์ž„์‹œ ๋ผ์ด์„ ์Šค: ํ‰๊ฐ€ ๊ธฐ๊ฐ„์„ ๋” ๋Š˜๋ฆฌ๊ณ  ์‹ถ๋‚˜์š”? support forum์—์„œ ์š”์ฒญํ•˜๋ฉด ์›Œํ„ฐ๋งˆํฌ ์—†์ด ์—ฐ์žฅ๋œ ์ฒดํ—˜์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ •์‹ ๋ผ์ด์„ ์Šค: ํ”„๋กœ๋•์…˜์— ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด purchase page์—์„œ ๊ตฌ๋งคํ•˜์„ธ์š”. ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•˜๋ฉด ๊ฐ€๊ฒฉ์€ ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ดˆ๊ธฐํ™”

ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ์ž„ํฌํŠธํ•˜๊ณ  Annotator ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์„น์…˜์—์„œ ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ๋ฅผ ๋ณด์—ฌ์ค„ ๊ฒƒ์ด์ง€๋งŒ, ๊ธฐ์–ตํ•  ํ•ต์‹ฌ์€ GroupDocs๊ฐ€ ํ‘œ์ค€ Java ๊ด€ํ–‰์„ ๋”ฐ๋ฅด๋ฉฐ ๋ณต์žกํ•œ ์ดˆ๊ธฐํ™” ์ ˆ์ฐจ๋‚˜ ๋ณ„๋„ ์„ค์ • ํŒŒ์ผ์ด ํ•„์š” ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๊ตฌํ˜„ ๊ฐ€์ด๋“œ: ๋ฌธ์„œ ํŽ˜์ด์ง€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋งŒ๋“ค๊ธฐ

์ด์ œ ์žฌ๋ฏธ์žˆ๋Š” ๋ถ€๋ถ„โ€”๋ฌธ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์‹ค์ œ๋กœ ์ƒ์„ฑํ•ด๋ด…์‹œ๋‹ค! ๊ณผ์ •์€ ์˜ˆ์ƒ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ๋ฏธ๋ฌ˜ํ•œ ์ ์„ ์ดํ•ดํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค ์ดํ•ดํ•˜๊ธฐ

๋ฌธ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ์€ ์„ธ ๋‹จ๊ณ„์˜ ๋Œ„์Šค์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ชจ์–‘๊ณผ ์ €์žฅ ์œ„์น˜๋ฅผ ์„ค์ •
  2. ๋ฏธ๋ฆฌ๋ณผ ํŽ˜์ด์ง€๋ฅผ ์ง€์ •
  3. ์‹ค์ œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ

GroupDocs.Annotation์€ ํฌ๋งท ๊ฐ์ง€, ํŽ˜์ด์ง€ ๋ Œ๋”๋ง, ์ด๋ฏธ์ง€ ์ตœ์ ํ™”, ํŒŒ์ผ ์ถœ๋ ฅ ๋“ฑ ๋ณต์žกํ•œ ์ž‘์—…์„ ๋ชจ๋‘ ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋งŒ ์•Œ๋ ค์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‹จ๊ณ„ 1: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์˜ต์…˜ ์ •์˜

์—ฌ๊ธฐ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ ์ฒญ์‚ฌ์ง„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. CreatePageStream ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ฒ˜์Œ์—” ๋‹ค์†Œ ์œ„ํ˜‘์ ์œผ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋งค์šฐ ์Šค๋งˆํŠธํ•ฉ๋‹ˆ๋‹คโ€”๊ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋  ์œ„์น˜๋ฅผ ๋™์ ์œผ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค๋‹ˆ๋‹ค.

import com.groupdocs.annotation.Annotator;
import com.groupdocs.annotation.exception.GroupDocsException;
import com.groupdocs.annotation.options.pagepreview.CreatePageStream;
import com.groupdocs.annotation.options.pagepreview.PreviewFormats;
import com.groupdocs.annotation.options.pagepreview.PreviewOptions;
import java.io.FileOutputStream;
import java.io.OutputStream;

PreviewOptions previewOptions = new PreviewOptions(new CreatePageStream() {
    @Override
    public OutputStream invoke(int pageNumber) {
        String fileName = "YOUR_OUTPUT_DIRECTORY/GenerateDocumentPagesPreview_" + pageNumber + ".png";
        try {
            return new FileOutputStream(fileName);
        } catch (Exception ex) {
            throw new GroupDocsException(ex); // Handle exceptions appropriately.
        }
    }
});

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‚˜์š”? CreatePageStream ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. pageNumber ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ˜„์žฌ ์ฒ˜๋ฆฌ ์ค‘์ธ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ์•Œ๋ ค ์ฃผ๋ฏ€๋กœ ๊ณ ์œ  ํŒŒ์ผ๋ช…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ตœ๋Œ€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ๋ช…๋ช… ๊ทœ์น™์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ์›น ์‘๋‹ต์œผ๋กœ ์ง์ ‘ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๊ณ„ 2: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์˜ต์…˜ ๊ตฌ์„ฑ

์ด์ œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์˜ ์™ธ๊ด€๊ณผ ๋™์ž‘์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

previewOptions.setResolution(85); // Set desired resolution.
previewOptions.setPreviewFormat(PreviewFormats.PNG); // Choose PNG as the output format.
previewOptions.setPageNumbers(new int[]{1, 2}); // Specify pages to generate previews for.

ํ•ด์ƒ๋„ ์ค‘์š”: ํ•ด์ƒ๋„ ์„ค์ •์€ ์ด๋ฏธ์ง€ ํ’ˆ์งˆ๊ณผ ํŒŒ์ผ ํฌ๊ธฐ์— ์ง์ ‘ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๊ฐ€์ด๋“œ:

  • 72 DPI: ์›น ์ธ๋„ค์ผ์— ์ ํ•ฉ, ํŒŒ์ผ ํฌ๊ธฐ ์ž‘์Œ
  • 96 DPI: ๋Œ€๋ถ€๋ถ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ‘œ์ค€, ํ’ˆ์งˆ๊ณผ ํฌ๊ธฐ ๊ท ํ˜•
  • 150 DPI: ๊ณ ํ’ˆ์งˆ, ์ธ์‡„ ๋˜๋Š” ์ƒ์„ธ ๋ณด๊ธฐ์šฉ
  • 300 DPI: ์ธ์‡„ ํ’ˆ์งˆ, ํŒŒ์ผ ํฌ๊ธฐ ํฌ๊ฒŒ

ํฌ๋งท ์„ ํƒ: ์˜ˆ์ œ์—์„œ๋Š” PNG๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์ตœ๊ณ  ํ’ˆ์งˆ). ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์••์ถ• ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ๊ดœ์ฐฎ๋‹ค๋ฉด JPEG๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€ ์„ ํƒ: setPageNumbers ๋ฉ”์„œ๋“œ๋กœ ๋ฏธ๋ฆฌ๋ณผ ํŽ˜์ด์ง€๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋Ÿ‰ ๋ฌธ์„œ์—์„œ ํ•ต์‹ฌ ํŽ˜์ด์ง€๋งŒ ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹จ๊ณ„ 3: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ

์ด์ œ ๋งˆ๋ฒ•์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค:

try (Annotator annotator = new Annotator("YOUR_DOCUMENT_DIRECTORY/input.pdf")) {
    annotator.getDocument().generatePreview(previewOptions);
}

์™œ tryโ€‘withโ€‘resources๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜์š”? ๋ฌธ์„œ๊ฐ€ ์ฒ˜๋ฆฌ ํ›„ ์ œ๋Œ€๋กœ ๋‹ซํžˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ํŒŒ์ผ ์ž ๊ธˆ ๋ฐฉ์ง€์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. Annotator๋Š” AutoCloseable์„ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ ์ด ํŒจํ„ด์ด ์™„๋ฒฝํžˆ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๊ฒฝ๋กœ ์ฃผ์˜: ์ž…๋ ฅ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์ •ํ™•ํ•˜๊ณ  ํŒŒ์ผ์ด ์‹ค์ œ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๋˜ํ•œ ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๋ฏธ๋ฆฌ ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹คโ€”GroupDocs๋Š” ์ž๋™์œผ๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ”ํžˆ ๊ฒช๋Š” ํ•จ์ •๊ณผ ํšŒํ”ผ ๋ฐฉ๋ฒ•

๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ: ๋Œ€์šฉ๋Ÿ‰ ๋ฌธ์„œ๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๋ฌธ์„œ๋‚˜ ๋งค์šฐ ํฐ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด:

  • ๋ฌธ์„œ๋ฅผ ์ž‘์€ ๋ฐฐ์น˜๋กœ ๋‚˜๋ˆ  ์ฒ˜๋ฆฌ
  • -Xmx ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ JVM ํž™ ํฌ๊ธฐ ํ™•๋Œ€
  • ์ดˆ๊ธฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์— ๋‚ฎ์€ ํ•ด์ƒ๋„ ์‚ฌ์šฉ

ํŒŒ์ผ ๊ถŒํ•œ: ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ํŠนํžˆ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์ด๋‚˜ ๋ณด์•ˆ ์ •์ฑ…์ด ์—„๊ฒฉํ•œ ์„œ๋ฒ„์—์„œ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

ํฌ๋งท ์ง€์›: GroupDocs๋Š” ๋งŽ์€ ํฌ๋งท์„ ์ง€์›ํ•˜์ง€๋งŒ, ์‹ค์ œ ์‚ฌ์šฉ ์ค‘์ธ ๋ฌธ์„œ ์œ ํ˜•์œผ๋กœ ๋ฐ˜๋“œ์‹œ ํ…Œ์ŠคํŠธํ•˜์„ธ์š”. ์ผ๋ถ€ ์˜ค๋ž˜๋˜๊ฑฐ๋‚˜ ํฌ๊ท€ํ•œ ํฌ๋งท์€ ์ง€์›๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ์šฐ์•„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ๊ตฌ์„ฑ ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€

๋ฌธ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ์„ ํ•œ ๋‹จ๊ณ„ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ณ ๊ธ‰ ๊ธฐ์ˆ ๊ณผ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ด…์‹œ๋‹ค.

๋™์  ํŒŒ์ผ ๋ช…๋ช… ์ „๋žต

๊ธฐ๋ณธ ์˜ˆ์ œ๋Š” ๋‹จ์ˆœํ•œ ๋ช…๋ช… ๊ทœ์น™์„ ๋ณด์—ฌ์ฃผ์ง€๋งŒ, ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋” ์ •๊ตํ•œ ์ ‘๊ทผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

PreviewOptions previewOptions = new PreviewOptions(new CreatePageStream() {
    @Override
    public OutputStream invoke(int pageNumber) {
        // Include timestamp for cache busting
        String timestamp = String.valueOf(System.currentTimeMillis());
        String fileName = String.format("preview_%s_page_%d_%s.png", 
                                      documentId, pageNumber, timestamp);
        String fullPath = outputDirectory + "/" + fileName;
        
        try {
            return new FileOutputStream(fullPath);
        } catch (Exception ex) {
            throw new GroupDocsException(ex);
        }
    }
});

์ด ์ ‘๊ทผ ๋ฐฉ์‹์€:

  • ์ถฉ๋Œ ์—†๋Š” ๊ณ ์œ  ํŒŒ์ผ๋ช… ์ œ๊ณต
  • ์–ด๋–ค ๋ฌธ์„œ์˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ธ์ง€ ์‰ฝ๊ฒŒ ์‹๋ณ„ ๊ฐ€๋Šฅ
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์บ์‹œ ๋ฌดํšจํ™” ์ง€์›

๋‹ค์ค‘ ๋ฌธ์„œ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ

์—ฌ๋Ÿฌ ๋ฌธ์„œ์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•  ๋•Œ ํšจ์œจ์„ฑ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค:

public void generatePreviewsForDocuments(List<String> documentPaths, String outputDir) {
    for (String docPath : documentPaths) {
        try (Annotator annotator = new Annotator(docPath)) {
            String docName = Paths.get(docPath).getFileName().toString();
            
            PreviewOptions options = new PreviewOptions(pageNumber -> {
                String fileName = String.format("%s/%s_page_%d.png", 
                                               outputDir, docName, pageNumber);
                try {
                    return new FileOutputStream(fileName);
                } catch (Exception ex) {
                    throw new GroupDocsException(ex);
                }
            });
            
            options.setResolution(96);
            options.setPreviewFormat(PreviewFormats.PNG);
            
            annotator.getDocument().generatePreview(options);
            
        } catch (Exception ex) {
            // Log error but continue processing other documents
            System.err.println("Failed to process " + docPath + ": " + ex.getMessage());
        }
    }
}

์„ฑ๋Šฅ ์ตœ์ ํ™” ํŒ

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ: ํ”„๋กœ๋•์…˜์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ •๋ฆฌ ์ „๋žต์„ ๊ตฌํ˜„ํ•˜์„ธ์š”:

// Force garbage collection after processing large batches
System.gc();

๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ: ๋Œ€์šฉ๋Ÿ‰ ๋ฌธ์„œ ์ง‘ํ•ฉ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ ๋ คํ•˜๋˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ์œ ์˜ํ•˜์„ธ์š”:

documentPaths.parallelStream().forEach(this::generatePreviewForDocument);

์บ์‹œ ์ „๋žต: ๋ถˆํ•„์š”ํ•œ ์žฌ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ง€๋Šฅํ˜• ์บ์‹ฑ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”:

  • ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๊ณ  ์›๋ณธ๋ณด๋‹ค ์ตœ์‹ ์ธ์ง€ ํ™•์ธ
  • ํŒŒ์ผ ์ˆ˜์ • ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์‚ฌ์šฉํ•ด ์žฌ์ƒ์„ฑ ํ•„์š” ์—ฌ๋ถ€ ํŒ๋‹จ
  • ๋น ๋ฅธ ์กฐํšŒ๋ฅผ ์œ„ํ•ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ

์‹ค์ œ ํ†ตํ•ฉ ์˜ˆ์‹œ

๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ์ด ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์–ด๋–ป๊ฒŒ ๋“ค์–ด๊ฐ€๋Š”์ง€ ์‚ดํŽด๋ด…์‹œ๋‹ค.

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ†ตํ•ฉ

Spring Boot ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:

@RestController
public class DocumentPreviewController {
    
    @GetMapping("/api/documents/{id}/preview/{pageNumber}")
    public ResponseEntity<byte[]> getDocumentPreview(
            @PathVariable String id, 
            @PathVariable int pageNumber) {
        
        // Check if preview already exists
        String previewPath = getPreviewPath(id, pageNumber);
        if (Files.exists(Paths.get(previewPath))) {
            byte[] imageBytes = Files.readAllBytes(Paths.get(previewPath));
            return ResponseEntity.ok()
                    .contentType(MediaType.IMAGE_PNG)
                    .body(imageBytes);
        }
        
        // Generate preview if it doesn't exist
        generatePreviewForPage(id, pageNumber);
        
        // Return the generated preview
        byte[] imageBytes = Files.readAllBytes(Paths.get(previewPath));
        return ResponseEntity.ok()
                .contentType(MediaType.IMAGE_PNG)
                .body(imageBytes);
    }
}

๋ฌธ์„œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ํ†ตํ•ฉ

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฌธ์„œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

@Service
public class DocumentPreviewService {
    
    @Async
    public CompletableFuture<List<String>> generatePreviewsAsync(String documentPath) {
        List<String> previewPaths = new ArrayList<>();
        
        try (Annotator annotator = new Annotator(documentPath)) {
            // Get total page count first
            int pageCount = annotator.getDocument().getPages().size();
            
            PreviewOptions options = new PreviewOptions(pageNumber -> {
                String previewPath = generatePreviewPath(documentPath, pageNumber);
                previewPaths.add(previewPath);
                
                try {
                    return new FileOutputStream(previewPath);
                } catch (Exception ex) {
                    throw new GroupDocsException(ex);
                }
            });
            
            // Generate previews for all pages
            int[] allPages = IntStream.rangeClosed(1, pageCount).toArray();
            options.setPageNumbers(allPages);
            options.setResolution(150);
            
            annotator.getDocument().generatePreview(options);
        }
        
        return CompletableFuture.completedFuture(previewPaths);
    }
}

์„ฑ๋Šฅ ๊ณ ๋ ค ์‚ฌํ•ญ ๋ฐ ์ตœ์ ํ™”

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์„ฑ๋Šฅ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ง‘์ค‘ํ•ด์•ผ ํ•  ์ฃผ์š” ์˜์—ญ์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ „๋žต

๋ฌธ์„œ ํฌ๊ธฐ ์ œํ•œ: ๋Œ€์šฉ๋Ÿ‰ ๋ฌธ์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ธ‰๊ฒฉํžˆ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค. ํฌ๊ธฐ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”:

File documentFile = new File(documentPath);
long fileSizeInMB = documentFile.length() / (1024 * 1024);

if (fileSizeInMB > 50) { // Adjust threshold based on your server capacity
    // Process with lower resolution or in smaller chunks
    previewOptions.setResolution(72);
}

๋ฆฌ์†Œ์Šค ์ •๋ฆฌ: ํ•ญ์ƒ tryโ€‘withโ€‘resources๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์žฅ๊ธฐ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ๋ช…์‹œ์  ์ •๋ฆฌ๋ฅผ ๊ณ ๋ คํ•˜์„ธ์š”:

try (Annotator annotator = new Annotator(documentPath)) {
    // Generate previews
    annotator.getDocument().generatePreview(previewOptions);
} // Automatic cleanup happens here

๊ณ ์šฉ๋Ÿ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ™•์žฅ

ํ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ: ๋งŽ์€ ๋ฌธ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฉ”์‹œ์ง€ ํ๋ฅผ ํ™œ์šฉํ•˜์„ธ์š”:

@Component
public class PreviewGenerationWorker {
    
    @RabbitListener(queues = "preview-generation-queue")
    public void processPreviewRequest(PreviewRequest request) {
        try {
            generateDocumentPreviews(request.getDocumentPath(), request.getOutputDir());
        } catch (Exception ex) {
            // Handle errors, potentially retry or send to dead letter queue
            log.error("Failed to generate previews for {}", request.getDocumentPath(), ex);
        }
    }
}

์บ์‹ฑ ์ „๋žต: ๋ถˆํ•„์š”ํ•œ ์žฌ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ง€๋Šฅํ˜• ์บ์‹ฑ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”:

public boolean shouldRegeneratePreview(String documentPath, String previewPath) {
    try {
        Path docPath = Paths.get(documentPath);
        Path prevPath = Paths.get(previewPath);
        
        if (!Files.exists(prevPath)) {
            return true; // Preview doesn't exist
        }
        
        FileTime docModified = Files.getLastModifiedTime(docPath);
        FileTime previewModified = Files.getLastModifiedTime(prevPath);
        
        return docModified.compareTo(previewModified) > 0; // Doc is newer
    } catch (Exception ex) {
        return true; // When in doubt, regenerate
    }
}

ํ•ด์ƒ๋„ ๋ฐ ํ’ˆ์งˆ ์ตœ์ ํ™”

์ ์‘ํ˜• ํ•ด์ƒ๋„: ์‚ฌ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ ํ•ด์ƒ๋„๋ฅผ ์กฐ์ •ํ•˜์„ธ์š”:

public int getOptimalResolution(PreviewUsage usage) {
    switch (usage) {
        case THUMBNAIL: return 72;
        case WEB_DISPLAY: return 96;
        case DETAILED_REVIEW: return 150;
        case PRINT_QUALITY: return 300;
        default: return 96;
    }
}

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ตœ์ ์˜ ์„ค์ •์„ ๊ฐ–์ถ”์–ด๋„ ๊ฐ€๋” ๋ฌธ์ œ์— ์ง๋ฉดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํ”ํ•œ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ ‘๊ทผ ๋ฐ ๊ถŒํ•œ ๋ฌธ์ œ

๋ฌธ์ œ: "Access denied" ๋˜๋Š” "File not found" ์˜ค๋ฅ˜
ํ•ด๊ฒฐ:

  • ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์ •ํ™•ํ•˜๊ณ  ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์›๋ณธ ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
  • ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
  • Linux/Unix ํ™˜๊ฒฝ์—์„œ๋Š” ํŒŒ์ผ ์†Œ์œ ์ž์™€ ๊ถŒํ•œ์„ ์ ๊ฒ€

๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์„ฑ๋Šฅ ๋ฌธ์ œ

๋ฌธ์ œ: OutOfMemoryError ๋˜๋Š” ์ฒ˜๋ฆฌ ์†๋„ ์ €ํ•˜
ํ•ด๊ฒฐ:

  • JVM ํž™ ํฌ๊ธฐ ํ™•๋Œ€: -Xmx2048m ๋“ฑ
  • ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ํŽ˜์ด์ง€ ์ˆ˜ ๊ฐ์†Œ
  • ๋Œ€์šฉ๋Ÿ‰ ๋ฌธ์„œ์—๋Š” ๋‚ฎ์€ ํ•ด์ƒ๋„ ์‚ฌ์šฉ
  • (์œ„ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ ์ฐธ๊ณ ) ๋ฌธ์„œ ํฌ๊ธฐ ์ œํ•œ ๊ตฌํ˜„

ํฌ๋งท๋ณ„ ๋ฌธ์ œ

๋ฌธ์ œ: ์ผ๋ถ€ ๋ฌธ์„œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Œ
ํ•ด๊ฒฐ:

  • ๋ฌธ์„œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—ด์–ด ์†์ƒ ์—ฌ๋ถ€ ํ™•์ธ
  • GroupDocs.Annotation ์ง€์› ํฌ๋งท ๋ชฉ๋ก ํ™•์ธ (50๊ฐœ ์ด์ƒ ์ง€์›)
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณดํ˜ธ ๋ฌธ์„œ๋Š” ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ ํ•„์š” (FAQ ์ฐธ๊ณ )
  • ์„œ๋ฒ„์— ํ•„์š”ํ•œ ๋ชจ๋“  ํฐํŠธ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ

์ถœ๋ ฅ ํ’ˆ์งˆ ๋ฌธ์ œ

๋ฌธ์ œ: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง€๊ฐ€ ํ๋ฆฌ๊ฑฐ๋‚˜ ํ”ฝ์…€ํ™”๋จ
ํ•ด๊ฒฐ:

  • ํ•ด์ƒ๋„ ์„ค์ •์„ ๋†’์ด๋˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ฐ์•ˆ
  • ํ…์ŠคํŠธ๊ฐ€ ๋งŽ์€ ๋ฌธ์„œ๋Š” JPEG๋ณด๋‹ค PNG๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ข‹์Œ
  • ์›๋ณธ ๋ฌธ์„œ ์ž์ฒด์˜ ํ’ˆ์งˆ์„ ํ™•์ธ

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Q: GroupDocs.Annotation์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ์— ์ง€์›ํ•˜๋Š” ํŒŒ์ผ ํฌ๋งท์€?
A: PDF, Word, Excel, PowerPoint, OpenDocument, ์ผ๋ฐ˜ ์ด๋ฏธ์ง€ ํƒ€์ž…, DWGยทDXF ๊ฐ™์€ CAD ํŒŒ์ผ ๋“ฑ 50๊ฐœ ์ด์ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๋ชฉ๋ก์€ ๊ณต์‹ ๋ฌธ์„œ์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

Q: ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณดํ˜ธ ๋ฌธ์„œ์˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‚˜์š”?
A: ์˜ˆ. ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•œ LoadOptions๋ฅผ ์‚ฌ์šฉํ•ด new Annotator(filePath, new LoadOptions(password))์™€ ๊ฐ™์ด ์ƒ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Q: ๋งค์šฐ ํฐ ๋ฌธ์„œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์—†์ด ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?
A: ํŽ˜์ด์ง€๋ฅผ ์ž‘์€ ๋ฐฐ์น˜๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜๊ณ , ์ดˆ๊ธฐ ์ธ๋„ค์ผ์—๋Š” ๋‚ฎ์€ ํ•ด์ƒ๋„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, JVM ํž™์„ ๋Š˜๋ฆฌ๊ณ , ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋ชจ๋‘ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ คํ•˜์„ธ์š”.

Q: ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋™์ ์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?
A: ๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค. CreatePageStream ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ์ €์žฅ ์œ„์น˜๋ฅผ ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ ์งœ, ๋ฌธ์„œ ์œ ํ˜•, ์‚ฌ์šฉ์ž ๋“ฑ ์›ํ•˜๋Š” ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ๋กœ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Q: PNG ์™ธ์— ๋‹ค๋ฅธ ํฌ๋งท์œผ๋กœ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‚˜์š”?
A: ์˜ˆ. JPEG, BMP ๋“ฑ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์••์ถ• ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ๊ดœ์ฐฎ๋‹ค๋ฉด previewOptions.setPreviewFormat(PreviewFormats.JPEG)์™€ ๊ฐ™์ด ํฌ๋งท์„ ์ „ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ด์ œ preview pdf java ์ธ๋„ค์ผ์„ GroupDocs.Annotation์œผ๋กœ ๋งˆ์Šคํ„ฐํ–ˆ์Šต๋‹ˆ๋‹ค! ์ด ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์€ ํŒŒ์ผ ๋ธŒ๋ผ์šฐ์ €๋ถ€ํ„ฐ ๋ณต์žกํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฌธ์„œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊นŒ์ง€, ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๋ฌธ์„œ ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์š”์•ฝ:

  • ๋ช‡ ์ค„์˜ Java ์ฝ”๋“œ๋งŒ์œผ๋กœ ๊ณ ํ’ˆ์งˆ PNG ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์†์‰ฝ๊ฒŒ ์ƒ์„ฑ
  • ํ•ด์ƒ๋„, ํฌ๋งท, ํŽ˜์ด์ง€ ์„ ํƒ ๋“ฑ์„ ์ž์œ ๋กญ๊ฒŒ ์กฐ์ •ํ•ด ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž์ถค ์ ์šฉ
  • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ์บ์‹ฑ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋“ฑ ์„ฑ๋Šฅ ์ค‘์‹ฌ ํŒ์œผ๋กœ ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ •์  ์šด์˜
  • ํ’๋ถ€ํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์™€ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด ์ผ๋ฐ˜์ ์ธ ํ•จ์ •์„ ์‚ฌ์ „์— ์ฐจ๋‹จ

๋‹ค์Œ ๋‹จ๊ณ„: GroupDocs.Annotation์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅโ€”์ฃผ์„ ์ถ”๊ฐ€, ํ…์ŠคํŠธ ์ถ”์ถœ, ํฌ๋งท ๋ณ€ํ™˜ ๋“ฑโ€”์„ ํƒ์ƒ‰ํ•ด ๋ณด์„ธ์š”. ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๋ชจ๋“  ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ฐ€์ด๋“œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ฒœ ๊ณ„ํš:

  1. ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก ํ•˜๊ณ  ์ง์ ‘ PDF, Word, Excel ํŒŒ์ผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์„ธ์š”.
  2. UI์— ๋งž๋Š” ์ตœ์ ์˜ ํ•ด์ƒ๋„์™€ ํฌ๋งท์„ ์‹คํ—˜ํ•ด ๋ณด์„ธ์š”.
  3. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ƒ์„ฑ์„ ์›น ์—”๋“œํฌ์ธํŠธ์— ํ†ตํ•ฉํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•ด ๋น ๋ฅธ ์žฌ๋กœ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์„ธ์š”.

์ฝ”๋”ฉ์„ ์ฆ๊ธฐ์‹œ๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•  ๋ถ€๋“œ๋Ÿฌ์šด ๋ฌธ์„œ ๊ฒฝํ—˜์„ ๊ธฐ๋Œ€ํ•ด ๋ณด์„ธ์š”!


์ตœ์ข… ์—…๋ฐ์ดํŠธ: 2026-01-18
ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ: GroupDocs.Annotation 25.2 for Java
์ž‘์„ฑ์ž: GroupDocs