PDF 문서용 Java 바코드 서명 생성 방법

소개

이 튜토리얼에서는 GroupDocs.Signature를 사용하여 PDF 파일에 create barcode signature Java 를 만드는 방법을 배웁니다. 제품 코드, 감사 ID 또는 계약서에 구조화된 데이터를 삽입해야 할 경우, 바코드 서명을 사용하면 기계가 읽을 수 있는 정보를 즉시 스캔할 수 있으면서도 문서를 암호적으로 안전하게 유지할 수 있습니다. 설정, 코드, 커스터마이징 및 모범 사례 팁을 단계별로 안내하므로 몇 분 안에 PDF에 바코드 서명을 추가할 수 있습니다.

빠른 답변

  • Java에서 바코드 서명을 추가하는 라이브러리는 무엇인가요? GroupDocs.Signature for Java.
  • 소매업에 가장 적합한 바코드 유형은 무엇인가요? GS1CompositeBar (industry‑standard for product tracking).
  • 프로덕션에 라이선스가 필요합니까? Yes – a purchased GroupDocs license is required.
  • 디지털 서명과 바코드 서명을 모두 추가할 수 있나요? Absolutely; combine them for security and scanability.
  • 코드가 Java 11 및 이후 버전과 호환되나요? Yes, the API works with JDK 8+.

create barcode signature java란 무엇인가요?

create barcode signature java는 Java 코드를 사용하여 프로그래밍 방식으로 PDF에 바코드를 삽입하는 과정을 말합니다. GroupDocs.Signature는 바코드 이미지를 생성하고 페이지에 배치하며 서명된 문서를 한 번에 저장하는 간단한 API를 제공합니다.

왜 바코드 서명을 사용하나요?

바코드 서명은 법적으로 서명된 PDF 내부에 기계가 읽을 수 있는 메타데이터를 제공합니다. 즉시 시각적 검증을 가능하게 하고, 공급망 스캔을 간소화하며, 하위 시스템이 파일을 열지 않고도 구조화된 데이터를 추출할 수 있습니다. 60가지 이상의 바코드 형식을 지원하며, GS1CompositeBar는 제품 식별자, 일련 번호 및 배치 코드를 하나의 컴팩트한 심볼에 인코딩할 수 있어 소매, 의료 및 금융에 최적입니다.

전제 조건

  • Java Development Kit: JDK 8 이상 (Java 11, 17, 21 모두 작동).
  • Build Tool: Maven 또는 Gradle – 원하는 것을 선택하세요.
  • IDE: IntelliJ IDEA, Eclipse 또는 VS Code.
  • GroupDocs.Signature 라이브러리: 아래와 같이 종속성을 추가하세요.
  • License: 개발용 무료 체험; 프로덕션용 구매 라이선스.

프로젝트에 GroupDocs.Signature 추가

Maven 사용자를 위한, pom.xml에 다음을 추가하세요:

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

Gradle 사용자를 위한, build.gradle에 다음을 추가하세요:

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

라이선스 정보: GroupDocs는 테스트 및 개발에 적합한 무료 체험을 제공합니다. releases page에서 다운로드할 수 있습니다. 프로덕션 준비가 되면 GroupDocs 웹사이트에서 라이선스를 구매하거나 임시 라이선스를 요청해야 합니다. 자세한 API 사용법은 API Reference를 참고하고, 단계별 안내는 Developer Guide를 확인하며, 질문은 GroupDocs Forum에 올리세요. 동일한 구매 링크는 purchase page에도 나와 있습니다.

Java에서 GroupDocs.Signature 설정 방법

Signature 클래스는 문서를 나타내며 서명을 적용하고, 콘텐츠를 검색하고, 리소스를 관리하는 메서드를 제공합니다. Signature 인스턴스를 생성하여 PDF를 열고 서명을 준비합니다. Signature 클래스는 문서 로드, 리소스 처리 및 서명 워크플로를 관리하는 GroupDocs.Signature의 핵심 구성 요소로, 모든 작업이 안전하고 효율적으로 수행되도록 보장합니다.

import com.groupdocs.signature.Signature;

// Point to your PDF file
Signature signature = new Signature("path/to/your/document.pdf");

Important: 사용 후 항상 Signature 객체를 해제하세요—파일 핸들을 해제하고 메모리를 확보합니다.

Barcode Sign Options 설정 방법

BarcodeSignOptions 클래스는 데이터 페이로드부터 시각적 스타일까지 삽입하려는 바코드의 모든 측면을 정의합니다. 유형, 크기, 색상, 배치와 같은 바코드 관련 설정을 모두 담는 컨테이너 역할을 합니다. 아래는 GTIN과 일련 번호를 포함하는 GS1CompositeBar 바코드를 생성하고, 최적 가독성을 위해 여백 및 배경 색상을 설정하는 최소 구성 예시입니다.

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

// Create barcode with GS1 format data
BarcodeSignOptions options = new BarcodeSignOptions("(01)03212345678906/(21)A1B2C3D4E5F6G7H8");
options.setEncodeType(BarcodeTypes.GS1CompositeBar);

문자열 "(01)03212345678906/(21)A1B2C3D4E5F6G7H8"은 GS1 표준을 따릅니다:

  • (01) = GTIN (전 세계 제품 식별자)
  • 03212345678906 = 실제 제품 코드
  • (21) = 일련 번호 식별자
  • A1B2C3D4E5F6G7H8 = 고유 일련 번호

이 문자열을 QR 코드, Code128, DataMatrix 등 any text 로 교체할 수 있습니다. 60가지 이상의 바코드 유형을 지원하며 전체 목록은 GroupDocs 문서를 참고하세요.

바코드 위치 지정 및 사용자 정의 방법

배치와 스타일은 동일한 BarcodeSignOptions 객체를 통해 제어됩니다. setTop, setLeft, setWidth, setHeight를 사용하여 정확한 좌표와 크기를 정의합니다. setAllPages(true)를 설정하면 바코드가 모든 페이지에 자동으로 추가되고, setPageNumber(1)은 특정 페이지를 대상으로 합니다. 바코드를 회전하거나 배경 색을 추가하고, 여백을 조정하여 바코드가 기존 콘텐츠와 겹치지 않도록 할 수 있습니다.

// Set position and apply to all pages
options.setTop(200); // Set vertical position
options.setAllPages(true);

보다 정밀한 레이아웃을 위해 바코드를 특정 페이지에 고정하고, 회전하거나 배경 색을 추가할 수도 있습니다:

options.setLeft(100);        // 100 pixels from left edge
options.setTop(200);         // 200 pixels from top
options.setWidth(300);       // Barcode width in pixels
options.setHeight(100);      // Barcode height in pixels
options.setPageNumber(1);    // Only sign page 1 (removes setAllPages)

시각적 사용자 정의(전경/배경 색, 여백, 텍스트 레이블)는 추가 속성을 통해 사용할 수 있습니다:

options.setMargin(new Padding(10));           // Add padding around barcode
options.setBackground(new Background());       // Set background color
options.setForeColor(Color.BLACK);            // Barcode color
options.setBackgroundColor(Color.WHITE);      // Background color

바코드로 문서 서명하는 방법

Signature 인스턴스의 sign 메서드는 구성된 옵션을 적용하고 서명된 문서를 디스크에 저장합니다. 이 메서드는 적용된 서명 수와 경고 발생 여부를 알려주는 SignResult 객체를 반환합니다. 이 메서드는 모든 저수준 PDF 조작을 처리하므로 PDF 라이브러리를 직접 사용할 필요가 없습니다.

try {
    SignResult signResult = signature.sign(outputPath, options);
    System.out.println("Document signed successfully!");
    System.out.println("Signed document saved to: " + outputPath);
} finally {
    if (signature != null) {
        signature.dispose();
    }
}

주변의 try‑finally 블록은 예외가 발생하더라도 Signature 객체가 해제되도록 보장하여 파일 핸들 누수를 방지합니다.

SignResult를 검사하여 성공 여부를 확인할 수 있습니다:

if (signResult.getSucceeded().size() > 0) {
    System.out.println("Successfully added " + signResult.getSucceeded().size() + " signature(s)");
}

완전한 작업 예제

모든 것을 종합하면, PDF를 로드하고 GS1CompositeBar 바코드를 추가한 뒤 서명된 파일을 저장하는 단일 메서드는 다음과 같습니다:

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

public class BarcodeSigningExample {
    
    public void signPdfWithBarcode(String inputPath, String outputPath) {
        Signature signature = null;
        
        try {
            // Initialize signature
            signature = new Signature(inputPath);
            
            // Configure barcode
            BarcodeSignOptions options = new BarcodeSignOptions(
                "(01)03212345678906/(21)A1B2C3D4E5F6G7H8"
            );
            options.setEncodeType(BarcodeTypes.GS1CompositeBar);
            options.setTop(200);
            options.setAllPages(true);
            
            // Sign and save
            SignResult result = signature.sign(outputPath, options);
            
            System.out.println("Signing completed: " + result.getSucceeded().size() + " signature(s) added");
            
        } catch (Exception e) {
            System.err.println("Error signing document: " + e.getMessage());
            e.printStackTrace();
        } finally {
            if (signature != null) {
                signature.dispose();
            }
        }
    }
}

이 메서드는 프로덕션 준비가 되어 있으며, 입력을 검증하고 리소스를 관리하며 결과를 보고합니다.

디지털 서명과 바코드 서명을 모두 추가하는 방법

최대 보안을 위해 먼저 암호화된 디지털 서명을 추가하고 그 위에 바코드를 겹칩니다. 디지털 서명은 문서 무결성을 보장하고, 바코드는 빠른 시각적 검증 및 기계가 읽을 수 있는 데이터를 제공합니다. 첫 단계에서는 DigitalSignOptions 클래스를 사용하고, 이후 위에 보여준 대로 BarcodeSignOptions를 적용하세요.

// First, add digital signature
DigitalSignOptions digitalOptions = new DigitalSignOptions("certificate.pfx");
digitalOptions.setPassword("cert_password");
signature.sign(outputPath, digitalOptions);

// Then, add barcode on top
BarcodeSignOptions barcodeOptions = new BarcodeSignOptions("DATA");
barcodeOptions.setEncodeType(BarcodeTypes.QR);
signature.sign(outputPath, barcodeOptions);

결과 PDF는 법적 구속력이 있는 디지털 서명과 동시에 모든 바코드 스캐너가 즉시 읽을 수 있습니다.

다양한 바코드 유형 작업

바코드 형식을 전환하는 것은 enum 값을 하나 바꾸는 것만큼 쉽습니다. 아래는 GS1CompositeBar를 QR 코드로 교체하는 예시입니다:

// Define barcode sign options with sample text
BarcodeSignOptions options = new BarcodeSignOptions("Sample Text");

// Assign specific barcode type
options.setEncodeType(BarcodeTypes.GS1CompositeBar);

그리고 Code128 선형 바코드로 교체하는 동일한 예시입니다:

options.setEncodeType(BarcodeTypes.QR);           // QR code
options.setEncodeType(BarcodeTypes.Code128);      // Code 128
options.setEncodeType(BarcodeTypes.DataMatrix);   // Data Matrix

각 바코드 유형마다 데이터 용량 제한이 있습니다—QR 코드는 수천 문자까지 저장할 수 있지만, Code39는 알파벳과 숫자만 지원합니다.

실제 사용 사례

공급망 관리

배송 명세서에 GS1CompositeBar를 삽입하면 창고 직원이 PDF를 열지 않고도 주문 번호, 목적지 및 배치 코드를 스캔할 수 있습니다.

BarcodeSignOptions options = new BarcodeSignOptions(
    "(01)" + gtin + "/(21)" + serialNumber + "/(10)" + batchNumber
);
options.setEncodeType(BarcodeTypes.GS1CompositeBar);

헬스케어 문서

동의서에 QR 코드를 삽입하면 올바른 환자 기록에 자동으로 문서를 파일링할 수 있도록 스캔할 수 있습니다.

String patientData = "PATIENT_ID:" + patientId + "|DOC_TYPE:CONSENT|DATE:" + dateString;
BarcodeSignOptions options = new BarcodeSignOptions(patientData);
options.setEncodeType(BarcodeTypes.QR);

금융 서비스

바코드에 인코딩된 거래 ID는 감사자가 간단히 스캔하여 규정 준수를 확인할 수 있게 합니다.

String complianceData = "TXN:" + transactionId + "|AGENT:" + agentId + "|BRANCH:" + branchCode;
BarcodeSignOptions options = new BarcodeSignOptions(complianceData);
options.setEncodeType(BarcodeTypes.PDF417);

제조 품질 관리

배치 번호와 검사자 ID를 포함한 바코드로 서명된 검사 보고서는 근본 원인 분석을 즉시 가능하게 합니다.

String qcData = "BATCH:" + batchNumber + "|INSPECTOR:" + inspectorId + "|RESULT:" + passFailStatus;
BarcodeSignOptions options = new BarcodeSignOptions(qcData);
options.setEncodeType(BarcodeTypes.DataMatrix);

일반 구현 문제

문제 1: “File is already in use” 예외

Answer: 이전 Signature 인스턴스가 해제되지 않으면 파일이 잠긴 상태로 남습니다. 서명 코드를 항상 try‑finally 블록으로 감싸고 signature.dispose()를 호출하세요.

Signature signature = null;
try {
    signature = new Signature(filePath);
    // ... your code ...
} finally {
    if (signature != null) {
        signature.dispose();
    }
}

문제 2: 바코드가 PDF에 표시되지 않음

Answer: setTop/setLeft 값이 페이지 범위 내에 있는지 확인하고, 바코드의 너비/높이를 늘리며, 전경/배경 색상이 페이지 배경과 대비되는지 확인하세요.

// Make sure dimensions are reasonable
options.setTop(100);      // Not 10000
options.setLeft(100);
options.setWidth(300);    // At least 200 pixels for readability
options.setHeight(100);

// Ensure contrast
options.setForeColor(Color.BLACK);
options.setBackgroundColor(Color.WHITE);

문제 3: “Invalid Barcode Data” 예외

Answer: GS1 바코드는 엄격한 괄호 표기법을 요구합니다. 올바른 Application Identifier(예: (01), (21))를 사용하고 지원되지 않는 문자를 피하세요.

// Correct:
"(01)03212345678906/(21)ABC123"

// Incorrect:
"03212345678906ABC123"

문제 4: 대용량 PDF에서 OutOfMemoryError

Answer: JVM 힙을 늘리세요(-Xmx4G) 그리고 매우 큰 문서의 경우 setAllPages(true) 대신 페이지별로 서명하는 것을 고려하세요.

java -Xmx2G -jar your-application.jar

문제 5: 바코드 스캔 실패

Answer: 바코드가 최소 200 × 100 px 크기이며, 고대비 색상을 사용하고, PDF 압축으로 왜곡되지 않았는지 확인하세요.

// Increase size
options.setWidth(400);
options.setHeight(150);

// Maximize contrast
options.setForeColor(Color.BLACK);
options.setBackgroundColor(Color.WHITE);

// Add quiet zone (blank space around barcode)
options.setMargin(new Padding(10));

보안 및 검증

바코드 서명은 안전한가요?

바코드만으로는 암호적으로 보호되지 않기 때문에 누구든 새 바코드를 생성할 수 있습니다. 디지털 서명과 결합하면 진위와 스캔 가능성을 모두 보장합니다. 이중 서명 패턴(디지털 서명 먼저, 바코드 서명 나중)은 법적 구속력과 운영상의 편리함을 제공합니다.

바코드 데이터 검증

스캔 후, 문서의 디지털 서명이 여전히 유효한지와 바코드 페이로드가 예상 패턴과 일치하는지 확인합니다. GroupDocs의 search() API와 BarcodeSearchOptions를 사용하여 바코드 내용을 자동으로 추출하고 검증하세요.

public boolean validateScannedBarcode(String scannedData, String documentPath) {
    // Verify digital signature first
    if (!verifyDigitalSignature(documentPath)) {
        return false;
    }
    
    // Validate barcode format
    if (!scannedData.matches("(01)\\d{14}/(21)[A-Z0-9]+")) {
        return false;
    }
    
    // Check against database
    String productId = extractProductId(scannedData);
    return database.productExists(productId);
}

성능 고려 사항

리소스 관리

메모리 누수를 방지하려면 각 작업 후 항상 Signature 객체를 해제하세요:

signature.dispose();

많은 파일을 처리할 때는 문서당 새로운 Signature를 생성하고 해제하세요:

for (String filePath : documentPaths) {
    Signature signature = null;
    try {
        signature = new Signature(filePath);
        // ... signing logic ...
    } finally {
        if (signature != null) {
            signature.dispose();
        }
    }
}

배치 처리

작은 배치(< 100 파일)에서는 순차 처리가 간단합니다:

for (String path : paths) {
    signDocument(path);
}

대규모 작업에서는 병렬 처리가 속도를 높일 수 있지만, I/O 부하를 모니터링하고 스레드를 4‑8개로 제한하세요:

paths.parallelStream().forEach(path -> signDocument(path));

대용량 PDF 메모리 최적화

힙 크기를 늘리고, 페이지를 개별적으로 처리하며, 각 단계 후에 참조를 정리하세요. 이는 50 MB 이상의 문서에서 OutOfMemoryError 발생을 방지합니다.

바코드 옵션 캐싱

많은 파일에서 동일한 바코드 구성을 재사용한다면 BarcodeSignOptions 인스턴스를 캐시하세요:

// Create once, reuse many times
private static BarcodeSignOptions createStandardBarcodeOptions(String data) {
    BarcodeSignOptions options = new BarcodeSignOptions(data);
    options.setEncodeType(BarcodeTypes.GS1CompositeBar);
    options.setTop(200);
    options.setAllPages(true);
    return options;
}

고급 기능

하나의 문서에 여러 서명

다양한 옵션 객체를 사용해 sign을 여러 번 호출하여 여러 바코드(또는 디지털 서명과 혼합)를 추가하세요:

// Add QR code in top-left
BarcodeSignOptions qrOptions = new BarcodeSignOptions("https://example.com");
qrOptions.setEncodeType(BarcodeTypes.QR);
qrOptions.setTop(50);
qrOptions.setLeft(50);
signature.sign(outputPath, qrOptions);

// Add GS1 barcode in bottom-right
BarcodeSignOptions gs1Options = new BarcodeSignOptions("(01)03212345678906");
gs1Options.setEncodeType(BarcodeTypes.GS1CompositeBar);
gs1Options.setTop(700);
gs1Options.setLeft(400);
signature.sign(outputPath, gs1Options);

동적 바코드 콘텐츠

문서 메타데이터, 타임스탬프 또는 데이터베이스 조회를 통해 바코드 데이터를 생성하세요:

// Extract data from PDF or database
String orderId = extractOrderIdFromPdf(filePath);
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME);
String barcodeData = String.format("ORDER:%s|TIME:%s", orderId, timestamp);

BarcodeSignOptions options = new BarcodeSignOptions(barcodeData);

Spring Boot와 통합

PDF를 받아 바코드를 추가하고 서명된 파일을 반환하는 REST 엔드포인트를 노출하세요:

@Service
public class DocumentSigningService {
    public void signWithBarcode(MultipartFile file, String barcodeData) {
        // ... implementation ...
    }
}

REST API 예제

서명 서비스에 위임하는 최소 컨트롤러 예시:

@PostMapping("/sign-document")
public ResponseEntity<byte[]> signDocument(
    @RequestParam("file") MultipartFile file,
    @RequestParam("barcode") String barcodeData
) {
    // Sign document and return as byte array
}

자주 묻는 질문

Q: GS1CompositeBar 바코드란 무엇인가요?
A: GS1CompositeBar는 선형 및 2D 구성 요소를 결합하여 제품 ID, 일련 번호 및 기타 데이터를 하나의 스캔 가능한 심볼에 저장하는 방식으로, 소매 및 물류에서 널리 사용됩니다.

Q: GS1CompositeBar 외에 다른 바코드 유형을 사용할 수 있나요?
A: 예—GroupDocs.Signature는 QR, Code128, DataMatrix, PDF417, Aztec 등을 포함해 60가지 이상의 유형을 지원합니다. 형식을 변경하려면 setEncodeType() 값을 바꾸면 됩니다.

Q: 프로덕션 사용에 라이선스가 필요합니까?
A: 프로덕션 배포에는 유효한 GroupDocs 라이선스가 필요합니다. 개발 및 테스트용 무료 체험이 제공됩니다.

Q: 바코드 스캐너가 서명된 PDF의 바코드를 읽을 수 있나요?
A: 물론입니다. 바코드가 최소 200 × 100 px 크기이며 충분한 대비를 가지고 있다면 가능합니다. 스마트폰 스캔 앱은 화면에서도 작동하고, 하드웨어 스캐너는 인쇄된 사본에서도 작동합니다.

Q: 서명 중 오류를 어떻게 처리하나요?
A: 코드를 try‑catch 블록으로 감싸고 전체 스택 트레이스를 로그에 기록하며, finally 블록에서 항상 signature.dispose()를 호출해 리소스를 해제하세요.

Q: 다른 문서 형식에도 서명할 수 있나요?
A: 예—GroupDocs.Signature는 DOCX, XLSX, PPTX, 이미지 등 다양한 형식을 지원합니다. 입력 파일 확장자를 변경하기만 하면 API는 동일하게 작동합니다.

Q: 파일 크기 제한이 있나요?
A: 엄격한 제한은 없지만, 50 MB 이상의 문서는 더 큰 JVM 힙과 페이지별 처리가 필요할 수 있습니다.

Q: 클라우드 스토리지에 저장된 PDF에 서명하려면 어떻게 해야 하나요?
A: 파일을 임시 로컬 경로에 다운로드하고 서명을 적용한 뒤, 다시 클라우드 버킷에 업로드하세요. 이후 임시 파일을 정리합니다.

결론

이제 PDF 문서에 대한 create barcode signature java 를 위한 완전하고 프로덕션 준비된 가이드를 갖추었습니다. 암호화 디지털 서명과 기계가 읽을 수 있는 바코드를 결합하면 공급망, 헬스케어, 금융, 제조 등 다양한 사용 사례에서 법적 구속력과 운영 효율성을 동시에 달성할 수 있습니다. 다양한 바코드 유형을 실험하고 코드를 기존 서비스에 통합하며, 대규모 배포를 위한 배치 처리를 탐색해 보세요.


마지막 업데이트: 2026-05-21
테스트 환경: GroupDocs.Signature 23.10 for Java
작성자: GroupDocs

String filePath = "YOUR_DOCUMENT_DIRECTORY" + "/sample.pdf";
String fileName = new java.io.File(filePath).getName();
String outputPath = "YOUR_OUTPUT_DIRECTORY" + "/SignedWithBarcodeGS1CompositeBar/" + fileName;
String documentDir = System.getenv("DOCUMENT_DIR");
String outputDir = System.getenv("OUTPUT_DIR");
Signature signature = new Signature(filePath);

관련 튜토리얼