PDF 파일을 PNG 이미지로 변환하는 것은 문서 처리 파이프라인에서 흔히 요구되는 작업이며, 특히 미리보기나 표시 용도로 페이지를 렌더링해야 할 때 필요합니다. Conholdate.Total for Java는 강력한 SDK를 제공하여 Java 애플리케이션에서 이 작업을 간단하게 수행할 수 있게 합니다. 이 가이드에서는 Java에서 PDF를 PNG로 변환하는 유틸리티를 구현하는 방법을 배우고, 성능 친화적인 옵션을 탐색하며, 완전한 멀티스레드 코드 예제를 확인합니다. 끝까지 읽으면 빠르고 메모리 효율적인 PDF to PNG 변환을 어떤 Java 프로젝트에도 통합할 수 있게 됩니다.
Conholdate.Total를 사용한 Java에서 PDF를 PNG로 변환하는 전체 작업 예제
이 예제는 Java에서 Conholdate.Total의 변환 API를 사용하여 PDF를 PNG로 변환하는 방법을 보여줍니다.
import com.groupdocs.conversion.Converter;
import com.groupdocs.conversion.options.convert.PngConvertOptions;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class PdfToPngDemo {
private static final String INPUT_PDF = "input.pdf";
private static final String OUTPUT_PATTERN = "output_page_%d.png";
public static void main(String[] args) throws Exception {
long start = System.nanoTime();
// Determine page count without loading whole document into memory
int totalPages;
try (InputStream is = new FileInputStream(INPUT_PDF)) {
Converter tempConverter = new Converter(is);
totalPages = tempConverter.getPageCount();
}
// Thread pool sized to available processors
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
List<Future<?>> tasks = new ArrayList<>();
for (int page = 1; page <= totalPages; page++) {
final int pageNumber = page;
tasks.add(executor.submit(() -> {
// Each thread creates its own Converter instance – ensures thread safety
try (InputStream pdfStream = new FileInputStream(INPUT_PDF)) {
Converter converter = new Converter(pdfStream);
PngConvertOptions options = new PngConvertOptions();
options.setPageNumber(pageNumber); // convert single page
options.setResolution(150); // memory‑friendly DPI
options.setQuality(90); // PNG compression quality (0‑100)
String outputPath = String.format(OUTPUT_PATTERN, pageNumber);
converter.convert(outputPath, options);
} catch (Exception e) {
throw new RuntimeException("Failed to convert page " + pageNumber, e);
}
}));
}
// Wait for all conversions to finish
for (Future<?> f : tasks) {
f.get(); // re‑throws any exception from the task
}
executor.shutdown();
long end = System.nanoTime();
System.out.printf("PDF to PNG conversion completed in %.2f seconds.%n",
(end - start) / 1_000_000_000.0);
}
}
참고: 이 코드 예제는 핵심 기능을 보여줍니다. 프로젝트에 사용하기 전에 파일 경로와 구성 값을 실제 환경에 맞게 업데이트하고, 모든 필수 종속성이 올바르게 설치되었는지 확인하며, 개발 환경에서 충분히 테스트하십시오. 문제가 발생하면 공식 문서를 참조하거나 지원 팀에 문의하십시오.
Java 코드에서 PDF를 PNG로 변환 이해하기
다음 항목은 샘플 프로그램의 워크플로우를 단계별로 설명합니다:
- PDF 로드 및 페이지 수 확인 -
Converter클래스는 소스 PDF를 가리키는InputStream으로 인스턴스화됩니다.getPageCount()를 호출하면 전체 문서를 메모리에 로드하지 않고 전체 페이지 수를 가져올 수 있습니다.
try (InputStream is = new FileInputStream(INPUT_PDF)) {
Converter tempConverter = new Converter(is);
totalPages = tempConverter.getPageCount();
}
- 병렬 처리를 위한 스레드 풀 생성 - 사용 가능한 프로세서 수에 맞게 크기가 지정된
ExecutorService가 변환 작업을 동시에 실행하여 전체 처리량을 향상시킵니다.
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
- 페이지별 변환 옵션 구성 - 각 작업마다 새로운
Converter인스턴스를 생성합니다(스레드 안전 보장).PngConvertOptions를 사용하면 대상 페이지, 해상도 및 PNG 품질을 설정할 수 있습니다.
PngConvertOptions options = new PngConvertOptions();
options.setPageNumber(pageNumber);
options.setResolution(150);
options.setQuality(90);
- 변환 실행 및 PNG 파일 쓰기 -
convert메서드는 페이지 번호를 포함하는 형식화된 파일 이름을 사용하여 출력 PNG를 씁니다.
String outputPath = String.format(OUTPUT_PATTERN, pageNumber);
converter.convert(outputPath, options);
- 완료 동기화 및 정리 - 메인 스레드는 모든 future가 완료될 때까지 기다린 다음, 실행자를 종료하고 경과 시간을 출력합니다. 이 패턴은 프로그램이 종료되기 전에 모든 페이지가 처리되도록 보장합니다.
보다 자세한 API 세부 정보는 Conholdate.Total Java API 레퍼런스를 참조하십시오.
환경 준비하기
Conholdate.Total Maven 저장소와 종속성을 pom.xml에 추가합니다:
<repositories>
<repository>
<id>conholdate-repo</id>
<name>Conholdate Maven Repository</name>
<url>https://repository.conholdate.com/repo/</url>
</repository>
</repositories>
<dependency>
<groupId>com.conholdate</groupId>
<artifactId>conholdate-total</artifactId>
<version>24.9</version>
<type>pom</type>
</dependency>
최신 SDK 패키지를 공식 다운로드 페이지에서 다운로드하십시오. 이 라이브러리는 Java 8 이상이 필요하며 표준 JVM에서 실행됩니다.
변환 설정 구성
샘플 코드는 조정할 수 있는 세 가지 주요 옵션을 보여줍니다.
- 페이지 번호 -
options.setPageNumber(pageNumber);특정 페이지를 렌더링하도록 선택합니다. - 해상도 -
options.setResolution(150);DPI를 제어합니다. 값이 높을수록 세부 사항이 향상되지만 메모리 사용량이 증가합니다. - 품질 -
options.setQuality(90);PNG 압축(0‑100)을 설정합니다. 파일 크기와 시각적 품질 사이의 균형을 맞추기 위해 이 값을 조정하십시오.
추가 제어가 필요하면 API 참조에 setColorMode 및 setBackgroundColor와 같은 다른 속성이 나열되어 있습니다.
PDF를 PNG로 효율적으로 변환하기 위한 모범 사례
- Stream Pages Individually -
InputStream에서 각 페이지를 처리하여 전체 PDF를 메모리에 로드하는 것을 방지합니다. - Use a Fixed‑Size Thread Pool - 풀 크기를
Runtime.getRuntime().availableProcessors()에 맞추면 스레드 스래싱을 방지하고 CPU 사용량을 최적화합니다. - Set a Moderate DPI - 대부분의 미리보기 시나리오에서는 150 DPI가 품질과 성능 사이의 좋은 균형을 제공합니다.
- Reuse Converter Instances Sparingly - 스레드당 새로운
Converter를 생성하면 스레드 안전성을 보장합니다; 단일 인스턴스를 공유하면 경쟁 조건이 발생할 수 있습니다. - Measure Execution Time - 샘플은 경과 시간을 초 단위로 출력합니다; 이 데이터를 사용해 특정 워크로드에 맞게 해상도나 스레드 수를 미세 조정하세요.
결론
Java에서 PDF를 PNG로 변환하는 것은 일상적인 작업이지만 성능에 민감한 작업입니다. Conholdate.Total for Java을 사용하면 페이지별 스트리밍, 다중 스레드 실행 및 세밀한 이미지 옵션을 처리하는 전체 기능을 갖춘 SDK를 얻을 수 있습니다. 위 예제는 확장 가능한 PDF to PNG 변환 유틸리티를 구축하고, 해상도와 품질을 구성하며, 메모리 사용량을 낮게 유지하는 방법을 보여줍니다. 프로덕션 사용을 위해 유효한 라이선스를 획득해야 함을 기억하십시오; 임시 라이선스는 https://purchase.conholdate.com/temporary-license/에서 요청할 수 있으며, 가격 옵션은 https://purchase.conholdate.com/pricing/total/family/에서 확인하십시오. 코드를 통합하고, 설정을 필요에 맞게 조정하여, 모든 PDF 문서에서 빠르고 신뢰할 수 있는 이미지 미리보기를 제공하십시오.
자주 묻는 질문
외부 도구 없이 Java에서 PDF를 PNG로 변환하려면 어떻게 해야 하나요?
SDK는 변환을 완전히 코드 내에서 수행하므로 서드파티 명령줄 유틸리티가 필요하지 않습니다. Maven 의존성을 추가하고 아래와 같이Converter클래스를 사용하십시오.Java에서 PDF를 PNG로 변환하는 유틸리티의 성능은 어느 정도 기대할 수 있나요?
페이지를 병렬 처리하고 적당한 DPI(예: 150)를 사용하면 샘플은 일반적으로 50페이지 PDF를 최신 CPU에서 몇 초 이내에 변환합니다. 프로그램이 출력하는 경과 시간을 측정하여 자체 파일을 벤치마크할 수 있습니다.많은 고해상도 이미지를 포함한 PDF를 메모리 부족 없이 변환할 수 있나요?
예. 코드는 각 페이지를 별도로 스트리밍하고 변환 후InputStream을 해제하므로 힙 사용량이 작게 유지됩니다. 메모리 압박이 발생하면 해상도를 조정하거나 스레드 수를 줄여 실행하십시오.PNG 출력물을 더 맞춤화할 수 있나요, 예를 들어 배경 색을 변경하는 것처럼?
PngConvertOptions에서 추가 옵션을 사용할 수 있습니다.setBackgroundColor및setColorMode와 같은 속성에 대해서는 API 참조를 참조하십시오.
