PDF ドキュメントのためのバーコード署名 Java の作成方法

はじめに

このチュートリアルでは、GroupDocs.Signature を使用して PDF ファイルに バーコード署名 Java を作成する方法を学びます。製品コード、監査 ID、または任意の構造化データを契約書に埋め込む必要がある場合、バーコード署名を使用すると、機械がすぐに読み取れる情報を追加でき、文書は暗号的に安全なままです。セットアップ、コード、カスタマイズ、ベストプラクティスのヒントを順に解説し、数分で PDF にバーコード署名を追加できるようにします。

クイック回答

  • Java でバーコード署名を追加するライブラリは何ですか? GroupDocs.Signature for Java.
  • 小売業に最適なバーコードタイプはどれですか? GS1CompositeBar(製品追跡の業界標準)。
  • 本番環境でライセンスが必要ですか? はい – 購入した GroupDocs ライセンスが必要です。
  • デジタル署名とバーコード署名の両方を追加できますか? もちろんです。セキュリティとスキャン可能性のために組み合わせます。
  • コードは Java 11 以降と互換性がありますか? はい、API は 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 でも動作)。
  • ビルドツール: Maven または Gradle – お好みの方を選択してください。
  • IDE: IntelliJ IDEA、Eclipse、または VS Code。
  • GroupDocs.Signature ライブラリ: 以下のように依存関係を追加してください。
  • ライセンス: 開発用の無料トライアル;本番用には購入したライセンスが必要です。

プロジェクトへの 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'

About licensing: GroupDocs はテストと開発に最適な無料トライアルを提供しています。ダウンロードは releases page から行えます。本番環境の準備ができたら、GroupDocs website からライセンスを購入するか、一時的なライセンスをリクエストしてください。詳細な 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");

重要: 使用後は必ず Signature オブジェクトを破棄してください—これによりファイルハンドルが解放され、メモリが確保されます。

バーコード署名オプションの設定方法?

BarcodeSignOptions クラスは埋め込むバーコードのデータペイロードから視覚スタイルまで、すべての側面を定義します。タイプ、サイズ、色、配置などのバーコード関連設定を保持するコンテナとして機能します。以下は GS1CompositeBar バーコードに GTIN とシリアル番号を含め、余白と背景色を設定して可読性を最適化する最小構成例です。

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 など、任意のテキストに置き換えることができます。60 種類以上のバーコードタイプがサポートされており、完全なリストは GroupDocs のドキュメントをご確認ください。

バーコードの位置設定とカスタマイズ方法?

位置とスタイルは同じ BarcodeSignOptions オブジェクトで制御します。setTopsetLeftsetWidthsetHeight を使用して正確な座標とサイズを定義します。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 オブジェクトが確実に破棄されることを保証し、ファイルハンドルリークを防止します。

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” 例外

回答: 前の Signature インスタンスが破棄されていないとファイルがロックされたままになります。署名コードは必ず try‑finally ブロックでラップし、signature.dispose() を呼び出してください。

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

課題 2: PDF にバーコードが表示されない

回答: 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” 例外

回答: GS1 バーコードは厳密な括弧表記が必要です。正しいアプリケーション識別子(例: (01)(21))を使用し、サポートされていない文字は避けてください。

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

// Incorrect:
"03212345678906ABC123"

課題 4: 大きな PDF での OutOfMemoryError

回答: JVM ヒープを増やします(例: -Xmx4G)し、非常に大きなドキュメントでは setAllPages(true) を使用せずにページ単位で署名することを検討してください。

java -Xmx2G -jar your-application.jar

課題 5: バーコードスキャンが失敗する

回答: バーコードは少なくとも 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;
}

高度な機能

1つのドキュメントに複数署名

異なるオプションオブジェクトで 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 ドキュメントのためのバーコード署名 Java の作成 に関する完全な本番対応ガイドが完成しました。暗号的デジタル署名と機械可読バーコードを組み合わせることで、法的拘束力とサプライチェーン、医療、金融、製造といったユースケースにおける運用効率の両方を実現できます。さまざまなバーコードタイプを試し、既存サービスにコードを統合し、大規模展開のためにバッチ処理を活用してください。


Last Updated: 2026-05-21
Tested With: GroupDocs.Signature 23.10 for Java
Author: 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);

関連チュートリアル