Java에서 PDF에 바코드 추가하는 방법

소개

Java 애플리케이션에서 문서 진위성을 다루느라 고생한 적이 있나요? 당신만 그런 것이 아닙니다. 재고 관리 시스템을 구축하든, 계약서를 관리하든, 공급망 문서를 다루든, 자동으로 PDF에 서명하고 검증할 신뢰할 수 있는 방법이 필요할 가능성이 높습니다.

전통적인 디지털 서명도 훌륭하지만, 때로는 스캔 시스템 및 자동화 워크플로와 원활히 작동하는 바코드 서명과 같이 보다 특화된 것이 필요합니다. 바로 그때 GS1DotCode 바코드가 유용합니다.

What you’ll learn:

  • Java에서 GS1DotCode 바코드로 PDF 문서에 서명하는 방법
  • 바코드 서명 이미지를 추출하고 저장하는 방법
  • 전통적인 방법에 비해 바코드 서명을 언제(그리고 왜) 사용할지
  • 일반적인 함정과 회피 방법

이 가이드를 끝까지 읽으면, 어떤 Java 프로젝트에도 바로 통합할 수 있는 즉시 사용 가능한 솔루션을 갖게 됩니다.

빠른 답변

  • Java에서 PDF에 바코드를 추가하는 라이브러리는? GroupDocs.Signature for Java.
  • 지원되는 바코드 형식은? GS1DotCode, 컴팩트한 2‑D 점 매트릭스.
  • 유료 라이선스가 필요한가? 무료 체험은 테스트에 사용 가능하며, 프로덕션에는 상업용 라이선스가 필요합니다.
  • 바코드를 이미지로 추출할 수 있나요? 예, BarcodeSignature API를 사용합니다.
  • 필요한 Java 버전은? JDK 8 이상.

바코드 추가란 무엇인가?

How to add barcode는 기계가 읽을 수 있는 바코드 그래픽을 프로그래밍 방식으로 PDF 파일에 삽입하여 바코드가 문서의 콘텐츠 스트림의 일부가 되도록 하는 과정을 의미합니다. 여기에는 바코드 이미지를 생성하고, 페이지에 위치시키며, 수정된 PDF를 저장하여 바코드가 검색 가능하고 인쇄 가능하도록 보장하는 단계가 포함됩니다.

왜 GS1DotCode 바코드를 선택해야 할까?

GS1DotCode는 공간이 제한된 상황을 위해 설계되었습니다. 가로로 늘어나는 선형 바코드와 달리 DotCode는 작은 영역에 많은 정보를 담을 수 있는 2‑D 점 매트릭스를 생성합니다. 이는 다음과 같은 경우에 최적입니다:

  • 모든 밀리미터가 중요한 작은 제품 라벨
  • 생산 라인의 고속 인쇄(이 형식은 이를 위해 설계됨)
  • 복잡한 데이터 구조를 인코딩해야 하는 공급망 추적

이 형식은 컴팩트한 공간에 최대 3,116자까지 처리할 수 있으며, 고속 또는 부분 손상 상황에서도 안정적으로 읽힙니다. 소매나 물류 분야에서 작업한다면 파트너가 이미 GS1 표준을 사용하고 있을 가능성이 높아 동일한 언어를 사용하게 됩니다.

Pro tip: 1 인치 × 1 인치보다 작은 라벨에 20자 이상을 삽입해야 할 때 GS1DotCode를 사용하세요.

사전 요구 사항

코딩을 시작하기 전에 환경이 다음 요구 사항을 충족하는지 확인하십시오.

필수 라이브러리 및 종속성

  • GroupDocs.Signature for Java 23.12 이상 (30+ 문서 형식 지원)
  • Maven 또는 Gradle을 사용한 종속성 관리

환경 설정

  • JDK 8 이상 설치 및 PATH에 구성
  • IntelliJ IDEA, Eclipse 또는 NetBeans와 같은 IDE
  • 실험용 샘플 PDF 파일(보호되지 않은 PDF이면 어느 것이든 가능)

지식 사전 요구 사항

  • 기본 Java 구문(변수, 메서드, 객체)
  • Maven 또는 Gradle 종속성 선언에 대한 친숙함
  • Java 파일 I/O 이해(예: FileInputStream)

이 항목 중 누락된 것이 있다면 지금 설치하십시오. 이후 단계는 모두 설치가 완료된 것을 전제로 합니다.

GroupDocs.Signature for Java 설정

Maven

Maven을 사용하는 경우 pom.xml에 다음 종속성을 추가하십시오:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>

Maven이 라이브러리와 모든 전이 종속성을 자동으로 다운로드합니다.

Gradle

Gradle 사용자는 build.gradle 파일에 다음 줄을 삽입하십시오:

implementation 'com.groupdocs:groupdocs-signature:23.12'

Gradle도 동일한 방식으로 패키지를 해결합니다.

Direct download

수동 관리를 선호한다면 공식 릴리스 페이지에서 JAR 파일을 다운로드하십시오: GroupDocs.Signature for Java releases. 프로젝트의 클래스패스에 JAR를 배치합니다.

Pro tip: Maven 또는 Gradle을 사용하면 향후 업그레이드가 간편해집니다—버전 번호만 올리면 됩니다.

라이선스 획득

GroupDocs는 세 가지 라이선스 옵션을 제공합니다:

  • 무료 체험 – 신용카드 필요 없음, 출력에 워터마크 적용
  • 임시 라이선스 – 30일 전체 기능 평가
  • 상업용 라이선스 – 체험 제한 제거 및 프로덕션 권한 부여

라이선스 파일을 얻은 후 프로젝트의 resources 폴더에 배치하고 Signature 객체를 생성하기 전에 로드하십시오.

License.setLicense는 GroupDocs 라이선스 파일을 로드하여 체험 제한 없이 전체 기능을 사용할 수 있게 합니다.

다음 스니펫을 실행하여 라이브러리가 올바르게 로드되는지 확인하십시오:

import com.groupdocs.signature.Signature;

public class InitializeGroupDocs {
    public static void main(String[] args) {
        // Create an instance of Signature
        Signature signature = new Signature("path/to/your/document.pdf");
        
        System.out.println("Initialization successful!");
    }
}

“Initialization successful!” 메시지가 표시되면 설정이 완료된 것입니다. 그렇지 않다면 클래스패스와 라이선스 경로를 다시 확인하십시오.

구현 가이드

두 가지 핵심 기능을 다룹니다: (1) GS1DotCode 바코드로 PDF 서명하기, (2) 해당 바코드를 이미지 파일로 추출하기.

기능 1: GS1DotCode 바코드로 문서 서명

Java에서 GS1DotCode 바코드로 PDF에 서명하는 방법?

new Signature("source.pdf")로 대상 PDF를 로드하고, GS1 형식 데이터를 포함한 BarcodeSignOptions 객체를 구성한 뒤 sign()을 호출하면 바코드가 삽입된 새 PDF가 생성됩니다. 이 작업은 바코드를 PDF 콘텐츠 스트림에 직접 기록하여 인쇄 및 재스캔 시에도 유지됩니다.

프로세스는 세 단계로 구성됩니다: Signature 인스턴스 생성, BarcodeSignOptions 설정, sign() 호출. 아래 코드가 각 단계를 보여줍니다.

1. 서명 객체 초기화

Signature 클래스는 GroupDocs.Signature에서 모든 문서 처리 작업의 진입점입니다.

import com.groupdocs.signature.Signature;

String sourceFilePath = "YOUR_DOCUMENT_DIRECTORY/document.pdf";
final Signature signature = new Signature(sourceFilePath);

Why this matters: Signature 객체는 파일 처리를 추상화하여 전체 파일을 메모리에 로드하지 않고도 대용량 PDF를 효율적으로 스트리밍합니다.

2. 바코드 옵션 구성

BarcodeSignOptions를 사용하면 바코드 유형, 인코딩 데이터, 위치 및 크기를 지정할 수 있습니다.

import com.groupdocs.signature.domain.signatures.BarcodeSignature;
import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;

BarcodeSignOptions gs1DotCodeOptions = new BarcodeSignOptions("(01)04912345123459(15)970331(30)128(10)ABC123", BarcodeTypes.GS1DotCode);
gs1DotCodeOptions.setLeft(100); // Set barcode position
gs1DotCodeOptions.setTop(100);
gs1DotCodeOptions.setHeight(150);
gs1DotCodeOptions.setWidth(200);

Key points:

  • 인코딩 문자열은 (01) GTIN, (15) 유통기한 등 GS1 응용 식별자(AI)를 따릅니다.
  • setLeft()와 setTop()은 포인트 단위(72 pts = 1 in)로 지정합니다.
  • 신뢰할 수 있는 스캔을 위해 최소 권장 크기는 108 pt × 108 pt (1.5 in × 1.5 in)입니다.
3. 문서 서명

구성된 옵션을 리스트에 추가(여러 서명 유형을 결합 가능)하고 sign()을 호출합니다.

import java.util.ArrayList;
import java.util.List;

List<com.groupdocs.signature.options.sign.SignOptions> listOptions = new ArrayList<>();
listOptions.add(gs1DotCodeOptions);
signature.sign("YOUR_OUTPUT_DIRECTORY/signed_document_with_gs1dotcode.pdf", listOptions);

Performance note: 배치 작업 시 단일 Signature 인스턴스를 재사용하면 객체 생성 오버헤드가 감소하고 처리량이 향상됩니다.

기능 2: 바코드 서명 내용을 파일에 저장

서명된 PDF에서 바코드 이미지를 추출하는 방법?

BarcodeSignature는 서명된 문서에서 추출된 바코드 서명 객체로, 데이터와 이미지 콘텐츠에 접근할 수 있습니다.

BarcodeSignature 인스턴스를 생성(또는 search()를 통해 검색)하고 getContent()로 Base64‑인코딩된 이미지 데이터를 읽은 뒤 디코딩하여 PNG 파일에 기록합니다. 이렇게 하면 UI에 표시하거나 라벨 프린터에 전송할 수 있는 독립적인 이미지가 생성됩니다.

1. 바코드 서명 생성 시뮬레이션

실제 시나리오에서는 search() 결과에서 BarcodeSignature를 얻지만, 여기서는 설명을 위해 직접 인스턴스를 생성합니다.

import com.groupdocs.signature.domain.signatures.BarcodeSignature;
import java.io.FileOutputStream;

String base64String = "SampleBase64EncodedData";
BarcodeSignature barcodeSignature = new BarcodeSignature(base64String);
2. 내용을 파일에 저장

Base64 문자열을 디코딩하고 try‑with‑resources 블록을 사용해 바이트를 디스크에 기록합니다.

int imageNumber = 1;
String formatExtension = ".png";  // Assume PNG format

try (FileOutputStream outputStream = new FileOutputStream("YOUR_OUTPUT_DIRECTORY/barcode_image" + imageNumber + formatExtension)) {
    byte[] byteArray = barcodeSignature.getContent();
    if (byteArray != null) {
        outputStream.write(byteArray);
    }
}

Gotcha: 서명 생성 시 이미지가 포함되지 않은 경우 getContent()가 null을 반환할 수 있습니다. 파일을 쓰기 전에 반드시 null 여부를 확인하십시오.

일반적인 문제와 해결책

문제: 바코드가 스캔되지 않음

Symptoms: PDF 뷰어에서는 바코드가 정상적으로 보이지만 스캐너가 오류를 반환합니다.

Solutions:

  • 바코드 크기를 최소 108 pt × 108 pt 이상으로 늘리세요.
  • 프린터 해상도가 ≥ 300 dpi인지 확인하세요.
  • GS1 데이터 문자열이 올바른 AI 구문을 따르는지 확인하세요; 괄호가 누락되면 스캐너가 오류를 발생합니다.

문제: 대용량 PDF에서 OutOfMemoryError 발생

Symptoms: 50 MB 이상 문서를 처리할 때 힙 공간 부족 오류가 발생합니다.

Solutions:

  • JVM을 더 큰 힙으로 실행하세요, 예: -Xmx2g.
  • 문서를 더 작은 배치로 처리하세요.
  • 각 파일 처리 후 signature.dispose()를 호출해 Signature 객체를 명시적으로 해제하세요.

문제: 바코드가 흐릿하게 보임

Symptoms: 출력 PDF에서 바코드가 픽셀화되어 보입니다.

Solutions:

  • 더 큰 크기를 사용하세요; 라이브러리는 가능한 경우 벡터 그래픽을 렌더링하지만, 생성 후 축소하면 아티팩트가 발생합니다.
  • 래스터‑벡터 변환을 피하고, GroupDocs가 벡터 정의에서 직접 렌더링하도록 하세요.

문제: 라이선스 예외

Symptoms: “License not found” 또는 “Trial limitations exceeded”와 같은 오류가 나타납니다.

Solutions:

  • 라이선스 파일을 클래스패스 루트(src/main/resources)에 두세요.
  • Signature 인스턴스를 전에 License.setLicense("GroupDocs.Signature.lic")를 호출하세요.
  • 임시 라이선스의 경우, 발행일로부터 30일인 만료 날짜를 확인하세요.

언제 이 접근 방식을 사용할까

적합한 사용 사례

  • 공급망 추적 – 운송 문서에 제품 ID, 배치 번호, 유통기한을 직접 삽입
  • 자동 라벨 인쇄 – 각 PDF 청구서에 실시간으로 바코드 생성
  • 규제 산업 – 많은 소매 및 의료 환경에서 GS1 표준이 필수

대안을 고려해야 할 때

  • 암호학적 무결성만 필요하면 표준 PKI 디지털 서명이 더 적합합니다.
  • 간단한 시각적 주석에는 텍스트 서명이나 이미지 스탬프만으로 충분할 수 있습니다.
  • 문서 크기가 중요한 제약인 경우 고해상도 바코드 이미지를 추가하지 말고, 동일한 데이터 밀도에 대해 더 작은 QR 코드를 사용하세요.

보안 모범 사례

데이터 검증

바코드에 인코딩하기 전에 사용자 제공 데이터를 반드시 정제하십시오. 잘못된 GS1 문자열은 스캔 오류를 일으키거나 최악의 경우 레거시 스캐너 펌웨어에서 버퍼 오버플로를 유발할 수 있습니다.

접근 제어

역할 기반 접근 제어(RBAC)를 구현해 서명 API를 호출할 수 있는 사용자를 제한하십시오. 라이선스 파일을 안전하게 저장하고 파일 시스템 권한을 제한하십시오.

감사 로깅

사용자 ID, 타임스탬프, 원본 파일 경로, 정확한 GS1 페이로드 등 서명 작업마다 로그를 남기십시오. 예시 로그 코드:

// Simple logging example (use a proper logging framework in production)
System.out.println("Document signed by: " + userId + " at " + new Date());
System.out.println("Barcode data: " + barcodeData);

변조 감지

바코드 서명에 암호학적 디지털 서명을 결합하십시오. 바코드는 기계 판독 데이터를 제공하고, 디지털 서명은 무결성과 부인 방지를 보장합니다.

실용적인 적용 사례

1. 공급망 관리

각 포장 전표에 GS1DotCode 바코드를 삽입해 GTIN, 배치, 목적지를 인코딩합니다. 각 검문소의 스캐너가 자동으로 ERP 시스템을 업데이트하여 수작업 입력 오류를 98 % 감소시킵니다.

2. 재고 관리

상품이 입고될 때 PDF에 바코드 서명을 추가해 PO 번호와 수량을 포함합니다. 창고 직원이 바코드를 스캔하면 재고 데이터베이스가 실시간으로 업데이트됩니다.

3. 소매 POS

바코드가 포함된 청구서를 인쇄하면 캐셔가 거래 ID를 수동 입력하는 대신 청구서를 스캔해 반품을 처리할 수 있어 평균 반품 처리 시간이 30 초 단축됩니다.

4. 의료 문서

바코드가 포함된 처방전은 환자 ID, 약품 코드, 복용 지시를 인코딩합니다. 약국에서 바코드를 스캔하면 전사 오류가 사라져 약물 부작용을 예방합니다.

성능 고려 사항

메모리 관리

GroupDocs.Signature는 PDF 데이터를 스트리밍하지만, 리소스는 즉시 닫아야 합니다:

try (Signature signature = new Signature(sourceFilePath)) {
    // Do your signing operations here
} // Signature automatically disposed here

try‑with‑resources를 사용하면 예외가 발생하더라도 Signature 객체가 파일 핸들을 해제합니다.

배치 처리 팁

  • 여러 문서에 동일한 페이로드가 있을 경우 같은 BarcodeSignOptions 인스턴스를 재사용하세요.
  • ExecutorService를 사용해 서명을 병렬화하면 CPU‑집중 작업에 효과적이며, 일반적인 8코어 서버는 파일당 5 MB 이하일 경우 ≈ 150 PDF/분을 서명할 수 있습니다.
  • 외부 라이선스 검증 호출을 제한하여 속도 제한을 피하세요.

파일 형식 최적화

  • 보관용으로 PDF/A‑1b를 선호하세요; 스트림을 압축해 파일 크기를 최대 40 % 줄입니다.
  • 바코드 크기를 필요 이상으로 크게 하지 마세요; 1.5 in × 1.5 in 바코드는 2 MB PDF에 약 15 KB 정도 추가합니다.

결론

이제 Java에서 PDF 파일에 GS1DotCode 바코드 서명을 추가하고, 해당 바코드를 이미지로 추출하며, 이를 문서 관리 파이프라인에 통합하는 완전한 프로덕션‑레디 워크플로를 갖추었습니다. 기억하십시오:

  1. GS1 페이로드를 인코딩하기 전에 검증하십시오.
  2. 스캔 신뢰성을 위해 바코드 크기를 레이아웃 제약에 맞게 조정하십시오.
  3. 전체 보안을 위해 바코드 서명을 암호학적 디지털 서명과 결합하십시오.

다음 단계: GroupDocs.Signature가 제공하는 다른 서명 유형—QR 코드, 텍스트 스탬프, 디지털 인증서—을 탐색하십시오. 모두 일관된 API를 공유합니다.


자주 묻는 질문

Q: GS1DotCode란 무엇이며 QR 코드와 다른 점은 무엇인가?
A: GS1DotCode는 QR 코드보다 작은 발자국에 최대 3,116자를 저장할 수 있는 컴팩트한 2‑D 점 매트릭스이며, 작은 라벨과 고속 인쇄에 최적화되었습니다.

Q: 프로덕션 배포에 무료 체험을 사용할 수 있나요?
A: 무료 체험은 평가용으로 제한되며 출력 파일에 워터마크가 추가됩니다. 프로덕션 사용에는 구매하거나 30일 임시 라이선스를 사용해야 합니다.

Q: 특정 페이지에 바코드를 배치하려면 어떻게 해야 하나요?
A: BarcodeSignOptions 객체에 setPageNumber(pageIndex)를 설정하고, setLeft()와 setTop()을 조정해 정확히 배치합니다.

Q: GroupDocs.Signature가 비밀번호로 보호된 PDF를 지원하나요?
A: 예. Signature 객체를 생성할 때 비밀번호를 전달하면 됩니다: new Signature("file.pdf", "password").

Q: 바코드 서명이 올바르게 추가되었는지 어떻게 확인하나요?
Signature.search()는 문서에서 서명을 검색하고 일치하는 서명 객체 컬렉션을 반환합니다. BarcodeSearchOptions와 함께 Signature.search()를 사용하면 인코딩된 데이터와 이미지 콘텐츠를 포함한 BarcodeSignature 객체를 얻을 수 있습니다.

Q: 신뢰할 수 있는 스캔을 위한 최소 바코드 크기는 얼마인가요?
A: 최소 108 pt × 108 pt (1.5 in × 1.5 in)를 목표로 하세요. 크기가 클수록 저해상도 프린터에서도 가독성이 향상됩니다.

Q: 여러 PDF를 동시에 서명할 수 있나요?
A: 예. 스레드 풀을 만들고 각 스레드마다 별도의 Signature 객체를 인스턴스화하면 됩니다. 라이브러리는 스레드당 독립적인 문서 작업에 대해 스레드 안전합니다.

Q: 단일 PDF에 삽입할 수 있는 바코드 수에 제한이 있나요?
A: 하드 제한은 없지만 각 바코드가 약 15 KB의 데이터를 추가합니다. 100 MB 이상의 PDF에서는 메모리 사용량을 관리하기 위해 배치 처리를 고려하십시오.

Q: 라이브러리가 비 Windows 플랫폼에서도 작동하나요?
A: 예. GroupDocs.Signature for Java는 플랫폼에 구애받지 않으며, Linux와 macOS를 포함한 호환 JRE가 설치된 모든 OS에서 실행됩니다.

마지막 업데이트: 2026-08-25
테스트 환경: GroupDocs.Signature 23.12 for Java
작성자: GroupDocs

관련 튜토리얼