Hoe maak je een barcode-handtekening Java voor PDF‑documenten

Introductie

In deze tutorial leer je hoe je create barcode signature Java voor PDF‑bestanden maakt met GroupDocs.Signature. Of je nu productcodes, audit‑ID’s of andere gestructureerde gegevens in een contract wilt opnemen, barcode‑handtekeningen stellen je in staat machine‑leesbare informatie toe te voegen die direct kan worden gescand, terwijl het document cryptografisch veilig blijft. We lopen door de installatie, code, aanpassing en best‑practice‑tips zodat je binnen enkele minuten barcode‑handtekeningen aan je PDF‑s kunt toevoegen.

Snelle antwoorden

  • Welke bibliotheek voegt barcode‑handtekeningen toe in Java? GroupDocs.Signature for Java.
  • Welk barcode‑type is het beste voor detailhandel? GS1CompositeBar (industrie‑standaard voor producttracking).
  • Heb ik een licentie nodig voor productie? Ja – een aangeschafte GroupDocs‑licentie is vereist.
  • Kan ik zowel digitale als barcode‑handtekeningen toevoegen? Absoluut; combineer ze voor veiligheid en scanbaarheid.
  • Is de code compatibel met Java 11 en later? Ja, de API werkt met JDK 8+.

Wat is create barcode signature java?

create barcode signature java verwijst naar het proces waarbij programmatically een barcode in een PDF wordt ingebed met Java‑code. GroupDocs.Signature biedt een eenvoudige API die de barcode‑afbeelding genereert, deze op de pagina positioneert en het ondertekende document in één naadloze bewerking opslaat.

Waarom barcode‑handtekeningen gebruiken?

Barcode‑handtekeningen geven je machine‑leesbare metadata binnen een juridisch ondertekend PDF‑document. Ze maken directe visuele verificatie mogelijk, stroomlijnen supply‑chain‑scanning en laten downstream‑systemen gestructureerde gegevens extraheren zonder het bestand te openen. Meer dan 60 barcode‑formaten worden ondersteund, en GS1CompositeBar kan product‑identifiers, serienummers en batch‑codes in één compact symbool coderen — perfect voor detailhandel, gezondheidszorg en financiën.

Vereisten

  • Java Development Kit: JDK 8 of nieuwer (Java 11, 17, 21 werken allemaal).
  • Buildtool: Maven of Gradle – kies degene die je prefereert.
  • IDE: IntelliJ IDEA, Eclipse of VS Code.
  • GroupDocs.Signature bibliotheek: Voeg de afhankelijkheid toe zoals hieronder weergegeven.
  • Licentie: Gratis proefversie voor ontwikkeling; een aangeschafte licentie voor productie.

GroupDocs.Signature toevoegen aan je project

Voor Maven‑gebruikers, voeg dit toe aan je pom.xml:

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

Voor Gradle‑gebruikers, voeg dit toe aan je build.gradle:

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

Over licenties: GroupDocs biedt een gratis proefversie die perfect is voor testen en ontwikkeling. Je kunt deze downloaden vanaf hun releases page. Wanneer je klaar bent voor productie, moet je een licentie aanschaffen of een tijdelijke licentie aanvragen via de GroupDocs website. Voor gedetailleerd API‑gebruik zie de API Reference, raadpleeg de Developer Guide voor stap‑voor‑stap instructies, en stel vragen op het GroupDocs Forum. Dezelfde aankoop‑link staat ook vermeld als de purchase page.

Hoe stel je GroupDocs.Signature in Java in?

De Signature‑klasse vertegenwoordigt een document en biedt methoden om handtekeningen toe te passen, inhoud te zoeken en bronnen te beheren. Maak een Signature‑instantie om je PDF te openen en voor te bereiden op ondertekening. De Signature‑klasse is het kernonderdeel van GroupDocs.Signature dat document‑laden, resource‑handling en de onderteken‑workflow beheert, zodat alle bewerkingen veilig en efficiënt worden uitgevoerd.

import com.groupdocs.signature.Signature;

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

Belangrijk: Ruim altijd het Signature‑object op na gebruik — dit vrijgeeft bestands‑handles en geheugen.

Hoe configureer je de Barcode Sign Options?

De BarcodeSignOptions‑klasse definieert elk aspect van de barcode die je gaat embedden, van data‑payload tot visuele stijl. Het fungeert als container voor alle barcode‑gerelateerde instellingen zoals type, grootte, kleuren en plaatsing. Hieronder zie je een minimale configuratie die een GS1CompositeBar‑barcode maakt met een GTIN en een serienummer, en die laat zien hoe je marges en achtergrondkleuren instelt voor optimale leesbaarheid.

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

De string "(01)03212345678906/(21)A1B2C3D4E5F6G7H8" volgt de GS1‑standaard:

  • (01) = GTIN (globale productidentificatie)
  • 03212345678906 = daadwerkelijke productcode
  • (21) = serienummer‑identificatie
  • A1B2C3D4E5F6G7H8 = unieke serie

Je kunt dit vervangen door elke tekst voor QR‑codes, Code128, DataMatrix, enz. Meer dan 60 barcode‑types worden ondersteund — zie de GroupDocs‑documentatie voor de volledige lijst.

Hoe positioneer en pas je de barcode aan?

Plaatsing en styling worden geregeld via hetzelfde BarcodeSignOptions‑object. Gebruik setTop, setLeft, setWidth en setHeight om exacte coördinaten en afmetingen te definiëren. setAllPages(true) voegt de barcode automatisch aan elke pagina toe, terwijl setPageNumber(1) een specifieke pagina target. Je kunt de barcode ook roteren, een achtergrondkleur toevoegen of marges aanpassen zodat de barcode geen bestaande inhoud overlapt.

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

Voor een preciezere lay‑out kun je de barcode ook aan een specifieke pagina verankeren, roteren of een achtergrondkleur toevoegen:

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)

Visuele aanpassing (voor‑/achtergrondkleuren, marges, tekstlabels) is beschikbaar via extra eigenschappen:

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

Hoe onderteken je het document met een barcode?

De sign‑methode op de Signature‑instantie past de geconfigureerde opties toe en schrijft het ondertekende document naar schijf. Het retourneert een SignResult‑object dat aangeeft hoeveel handtekeningen zijn toegepast en of er waarschuwingen zijn opgetreden. Deze methode handelt alle low‑level PDF‑manipulatie af, zodat je niet direct met PDF‑bibliotheken hoeft te werken.

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();
    }
}

Het omringende try‑finally‑blok garandeert dat het Signature‑object wordt vrijgegeven, zelfs bij een uitzondering, waardoor bestands‑handle‑lekken worden voorkomen.

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

Volledig werkend voorbeeld

Alles samengevoegd, hier is een enkele methode die een PDF laadt, een GS1CompositeBar‑barcode toevoegt en het ondertekende bestand opslaat:

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();
            }
        }
    }
}

Deze methode is productie‑klaar: hij valideert invoer, beheert resources en rapporteert het resultaat.

Hoe voeg je zowel digitale als barcode‑handtekeningen toe?

Voor maximale veiligheid voeg je eerst een cryptografische digitale handtekening toe, daarna de barcode eroverheen. De digitale handtekening garandeert de integriteit van het document, terwijl de barcode snelle visuele verificatie en machine‑leesbare data biedt. Gebruik de DigitalSignOptions‑klasse voor de eerste stap en pas vervolgens BarcodeSignOptions toe zoals hierboven getoond.

// 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);

Het resulterende PDF‑document is zowel juridisch bindend (digitale handtekening) als direct leesbaar door elke barcode‑scanner.

Werken met verschillende barcode‑types

Het wisselen van barcode‑formaten is zo eenvoudig als één enum‑waarde aanpassen. Hieronder een voorbeeld dat de GS1CompositeBar vervangt door een QR‑code:

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

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

En hier dezelfde wijziging voor een lineaire Code128‑barcode:

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

Onthoud dat elk barcode‑type zijn eigen limieten heeft — QR‑codes kunnen duizenden tekens bevatten, terwijl Code39 beperkt is tot alfanumerieke tekens.

Praktische toepassingsgevallen

Supply Chain Management

Het embedden van een GS1CompositeBar op verzend‑manifesten laat magazijnmedewerkers order‑nummers, bestemmingen en batch‑codes scannen zonder het PDF‑bestand te openen.

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

Gezondheidszorgdocumentatie

QR‑codes op toestemmingsformulieren kunnen worden gescand om het document automatisch onder het juiste patiëntendossier te archiveren.

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

Financiële diensten

Transactie‑ID’s gecodeerd in een barcode stellen auditors in staat compliance te verifiëren met een eenvoudige scan.

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

Kwaliteitscontrole in de productie

Inspectierapporten ondertekend met barcodes die batch‑nummers en inspecteur‑ID’s bevatten maken root‑cause‑analyse direct mogelijk.

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

Veelvoorkomende implementatieproblemen

Probleem 1: “File is already in use” uitzondering

Antwoord: Het bestand blijft vergrendeld als een eerdere Signature‑instantie niet is vrijgegeven. Plaats onderteken‑code altijd in een try‑finally‑blok en roep signature.dispose() aan.

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

Probleem 2: Barcode verschijnt niet in PDF

Antwoord: Controleer of setTop/setLeft‑waarden binnen de paginagrenzen liggen, vergroot de breedte/hoogte van de barcode en zorg voor voldoende contrast tussen voor‑ en achtergrondkleur.

// 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);

Probleem 3: “Invalid Barcode Data” uitzondering

Antwoord: GS1‑barcodes vereisen strikte haakjesnotatie. Gebruik de juiste Application Identifiers (bijv. (01), (21)) en vermijd niet‑ondersteunde tekens.

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

// Incorrect:
"03212345678906ABC123"

Probleem 4: OutOfMemoryError bij grote PDF’s

Antwoord: Verhoog de JVM‑heap (-Xmx4G) en overweeg om pagina’s individueel te ondertekenen in plaats van setAllPages(true) te gebruiken voor zeer grote documenten.

java -Xmx2G -jar your-application.jar

Probleem 5: Barcode‑scannen mislukt

Antwoord: Zorg dat de barcode minimaal 200 × 100 px is, hoge contrastkleuren gebruikt en niet vervormd wordt door PDF‑compressie.

// 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));

Beveiliging en validatie

Zijn barcode‑handtekeningen veilig?

Een barcode alleen is niet cryptografisch beschermd, zodat iedereen een nieuwe kan genereren. Combineer het met een digitale handtekening om zowel authenticiteit als scanbaarheid te garanderen. Het dual‑handtekening‑patroon (digitaal eerst, barcode daarna) biedt juridische afdwingbaarheid plus operationeel gemak.

Barcode‑gegevens valideren

Na het scannen controleer je of de digitale handtekening nog steeds geldig is en of de barcode‑payload overeenkomt met de verwachte patronen. Gebruik GroupDocs’ search()‑API met BarcodeSearchOptions om barcode‑inhoud automatisch te extraheren en te valideren.

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);
}

Prestatieoverwegingen

Resourcebeheer

Ruim altijd Signature‑objecten op na elke bewerking om geheugenlekken te voorkomen:

signature.dispose();

Bij verwerking van veel bestanden, maak en ruim een nieuw Signature‑object per document op:

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

Batchverwerking

Voor kleine batches (< 100 bestanden) is sequentiële verwerking eenvoudig:

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

Voor grotere workloads kan parallelle verwerking de snelheid verhogen — houd echter I/O‑druk in de gaten en beperk het aantal threads tot 4‑8:

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

Geheugenoptimalisatie voor grote PDF’s

Verhoog de heap‑grootte, verwerk pagina’s individueel en maak referenties na elke stap leeg. Dit voorkomt OutOfMemoryError bij documenten groter dan 50 MB.

Barcode‑opties cachen

Als je dezelfde barcode‑configuratie voor veel bestanden hergebruikt, cache dan de BarcodeSignOptions‑instantie:

// 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;
}

Geavanceerde functies

Meerdere handtekeningen op één document

Voeg meerdere barcodes (of een mix met digitale handtekeningen) toe door sign meerdere keren aan te roepen met verschillende optie‑objecten:

// 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);

Dynamische barcode‑inhoud

Genereer barcode‑data vanuit document‑metadata, tijdstempels of database‑opvragingen:

// 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);

Integratie met Spring Boot

Exposeer een REST‑endpoint dat een PDF ontvangt, een barcode toevoegt en het ondertekende bestand retourneert:

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

REST API‑voorbeeld

Een minimale controller die de onderteken‑service aanroept:

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

Veelgestelde vragen

Q: Wat is een GS1CompositeBar barcode?
A: Een GS1CompositeBar combineert lineaire en 2D‑componenten om product‑ID’s, serienummers en andere data in één scanbaar symbool op te slaan, veelgebruikt in retail en logistiek.

Q: Kan ik andere barcode‑types gebruiken naast GS1CompositeBar?
A: Ja — GroupDocs.Signature ondersteunt meer dan 60 types, waaronder QR, Code128, DataMatrix, PDF417 en Aztec. Verander de waarde van setEncodeType() om het formaat te wijzigen.

Q: Heb ik een licentie nodig voor productiegebruik?
A: Een geldige GroupDocs‑licentie is vereist voor productie‑implementaties. Een gratis proefversie is beschikbaar voor ontwikkeling en testen.

Q: Lezen barcode‑scanners barcodes uit ondertekende PDF’s?
A: Absoluut, mits de barcode minimaal 200 × 100 px is en voldoende contrast heeft. Smartphone‑scan‑apps werken op‑scherm; hardware‑scanners werken op afgedrukte exemplaren.

Q: Hoe ga ik om met fouten tijdens ondertekenen?
A: Plaats je code in try‑catch‑blokken, log volledige stack‑traces en roep altijd signature.dispose() aan in een finally‑blok om resources vrij te geven.

Q: Kan ik andere documentformaten ondertekenen?
A: Ja — GroupDocs.Signature ondersteunt ook DOCX, XLSX, PPTX, afbeeldingen en nog veel meer. Wijzig simpelweg de extensie van het invoerbestand; de API blijft gelijk.

Q: Zijn er limieten voor bestandsgrootte?
A: Geen harde limiet, maar documenten groter dan 50 MB kunnen een grotere JVM‑heap vereisen en pagina‑voor‑pagina verwerking om geheugen‑efficiënt te blijven.

Q: Hoe onderteken ik PDF’s die in cloud‑opslag staan?
A: Download het bestand naar een tijdelijk lokaal pad, pas de handtekening toe, upload het vervolgens terug naar je cloud‑bucket. Verwijder tijdelijke bestanden daarna.

Conclusie

Je beschikt nu over een volledige, productie‑klare gids om create barcode signature java voor PDF‑documenten te maken. Door cryptografische digitale handtekeningen te combineren met machine‑leesbare barcodes bereik je zowel juridische afdwingbaarheid als operationele efficiëntie in supply‑chain, gezondheidszorg, financiën en productie. Experimenteer met verschillende barcode‑types, integreer de code in je bestaande services en verken batch‑verwerking voor grootschalige implementaties.


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

Gerelateerde tutorials