Så skapar du streckkodsignatur Java för PDF-dokument
Introduktion
I den här handledningen kommer du att lära dig hur du skapar streckkodsignatur Java för PDF-filer med GroupDocs.Signature. Oavsett om du behöver bädda in produktkoder, revisions‑ID:n eller någon strukturerad data i ett avtal, låter streckkodsignaturer dig lägga till maskinläsbar information som kan skannas omedelbart samtidigt som dokumentet förblir kryptografiskt säkert. Vi går igenom installation, kod, anpassning och bästa praxis‑tips så att du kan börja lägga till streckkodsignaturer i dina PDF‑filer på några minuter.
Snabba svar
- Vilket bibliotek lägger till streckkodsignaturer i Java? GroupDocs.Signature for Java.
- Vilken streckkodstyp är bäst för detaljhandel?
GS1CompositeBar(industry‑standard for product tracking). - Behöver jag en licens för produktion? Yes – a purchased GroupDocs license is required.
- Kan jag lägga till både digitala och streckkodsignaturer? Absolutely; combine them for security and scanability.
- Är koden kompatibel med Java 11 och senare? Yes, the API works with JDK 8+.
Vad är create barcode signature java?
create barcode signature java avser processen att programatiskt bädda in en streckkod i en PDF med Java‑kod. GroupDocs.Signature tillhandahåller ett enkelt API som genererar streckkodsbilden, placerar den på sidan och sparar det signerade dokumentet i en sömlös operation.
Varför använda streckkodsignaturer?
Streckkodsignaturer ger dig maskinläsbar metadata i en juridiskt signerad PDF. De möjliggör omedelbar visuell verifiering, effektiviserar leveranskedjeskanning och låter efterföljande system extrahera strukturerad data utan att öppna filen. Över 60 streckkodformat stöds, och GS1CompositeBar kan koda produktidentifierare, serienummer och batchkoder i en enda kompakt symbol – perfekt för detaljhandel, sjukvård och finans.
Förutsättningar
- Java Development Kit: JDK 8 eller nyare (Java 11, 17, 21 fungerar alla).
- Byggverktyg: Maven eller Gradle – välj det du föredrar.
- IDE: IntelliJ IDEA, Eclipse eller VS Code.
- GroupDocs.Signature‑bibliotek: Lägg till beroendet som visas nedan.
- Licens: Gratis provversion för utveckling; en köpt licens för produktion.
Lägga till GroupDocs.Signature i ditt projekt
För Maven‑användare, lägg till detta i din pom.xml:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
För Gradle‑användare, lägg till detta i din build.gradle:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Om licensiering: GroupDocs erbjuder en gratis provversion som är perfekt för testning och utveckling. Du kan ladda ner den från deras releases page. När du är redo för produktion måste du köpa en licens eller begära en tillfällig licens från GroupDocs website. För detaljerad API‑användning se API Reference, konsultera Developer Guide för steg‑för‑steg‑instruktioner, och ställ frågor på GroupDocs Forum. Samma köplänk listas också som purchase page.
Hur ställer du in GroupDocs.Signature i Java?
Signature‑klassen representerar ett dokument och tillhandahåller metoder för att applicera signaturer, söka innehåll och hantera resurser. Skapa en Signature‑instans för att öppna din PDF och förbereda den för signering. Signature‑klassen är GroupDocs.Signature:s kärnkomponent som hanterar dokumentladdning, resurs‑hantering och signeringsarbetsflödet, vilket säkerställer att alla operationer utförs säkert och effektivt.
import com.groupdocs.signature.Signature;
// Point to your PDF file
Signature signature = new Signature("path/to/your/document.pdf");
Viktigt: Disposera alltid Signature‑objektet efter användning — detta frigör filhandtag och minne.
Hur konfigurerar du Barcode Sign Options?
BarcodeSignOptions‑klassen definierar varje aspekt av streckkoden du ska bädda in, från datapayload till visuell stil. Den fungerar som en behållare för alla streckkod‑relaterade inställningar såsom typ, storlek, färger och placering. Nedan är en minimal konfiguration som skapar en GS1CompositeBar‑streckkod som innehåller ett GTIN och ett serienummer, och den visar också hur du ställer in marginaler och bakgrundsfärger för optimal läsbarhet.
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);
Strängen "(01)03212345678906/(21)A1B2C3D4E5F6G7H8" följer GS1‑standarden:
(01)= GTIN (global produktidentifierare)03212345678906= faktiskt produktkod(21)= serienummeridentifierareA1B2C3D4E5F6G7H8= unik serie
Du kan ersätta detta med vilken text som helst för QR‑koder, Code128, DataMatrix osv. Över 60 streckkodstyper stöds — se GroupDocs‑dokumentationen för hela listan.
Hur placerar och anpassar du streckkoden?
Placering och stil styrs via samma BarcodeSignOptions‑objekt. Använd setTop, setLeft, setWidth och setHeight för att definiera exakta koordinater och dimensioner. Inställningen setAllPages(true) lägger till streckkoden på varje sida automatiskt, medan setPageNumber(1) riktar in sig på en specifik sida. Du kan också rotera streckkoden, lägga till en bakgrundsfärg eller justera marginaler för att säkerställa att streckkoden inte överlappar befintligt innehåll.
// Set position and apply to all pages
options.setTop(200); // Set vertical position
options.setAllPages(true);
För mer exakt layout kan du även ankra streckkoden till en specifik sida, rotera den eller lägga till en bakgrundsfärg:
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)
Visuell anpassning (förgrund-/bakgrundsfärger, marginaler, textetiketter) är tillgänglig via ytterligare egenskaper:
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
Hur signerar du dokumentet med en streckkod?
sign‑metoden på Signature‑instansen applicerar de konfigurerade alternativen och skriver det signerade dokumentet till disk. Den returnerar ett SignResult‑objekt som berättar hur många signaturer som applicerades och om några varningar inträffade. Denna metod hanterar all låg‑nivå PDF‑manipulation, så du behöver inte arbeta med PDF‑bibliotek direkt.
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();
}
}
Det omgivande try‑finally‑blocket garanterar att Signature‑objektet disponeras även om ett undantag uppstår, vilket förhindrar filhandtagsläckor.
if (signResult.getSucceeded().size() > 0) {
System.out.println("Successfully added " + signResult.getSucceeded().size() + " signature(s)");
}
Fullständigt fungerande exempel
Genom att sätta ihop allt får du en enda metod som laddar en PDF, lägger till en GS1CompositeBar‑streckkod och sparar den signerade filen:
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();
}
}
}
}
Denna metod är produktionsklar: den validerar indata, hanterar resurser och rapporterar resultatet.
Hur lägger du till både digitala och streckkodsignaturer?
För maximal säkerhet lägger du först till en kryptografisk digital signatur och lägger sedan streckkoden ovanpå. Den digitala signaturen garanterar dokumentets integritet, medan streckkoden ger snabb visuell verifiering och maskinläsbara data. Använd DigitalSignOptions‑klassen för första steget och applicera sedan BarcodeSignOptions som visas ovan.
// 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);
Den resulterande PDF‑filen är både juridiskt bindande (digital signatur) och omedelbart läsbar av vilken streckkodsläsare som helst.
Arbeta med olika streckkodstyper
Att byta streckkodformat är lika enkelt som att ändra ett enum‑värde. Nedan är ett exempel som byter GS1CompositeBar mot en QR‑kod:
// Define barcode sign options with sample text
BarcodeSignOptions options = new BarcodeSignOptions("Sample Text");
// Assign specific barcode type
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
Och här är samma förändring för en Code128‑linjär streckkod:
options.setEncodeType(BarcodeTypes.QR); // QR code
options.setEncodeType(BarcodeTypes.Code128); // Code 128
options.setEncodeType(BarcodeTypes.DataMatrix); // Data Matrix
Kom ihåg att varje streckkodstyp har sina egna begränsningar för datakapacitet — QR‑koder kan innehålla tusentals tecken, medan Code39 är begränsad till alfanumeriska tecken.
Verkliga användningsfall
Leveranskedjehantering
Att bädda in en GS1CompositeBar på fraktmanifest gör att lagerpersonal kan skanna ordernummer, destinationer och batchkoder utan att öppna PDF‑filen.
BarcodeSignOptions options = new BarcodeSignOptions(
"(01)" + gtin + "/(21)" + serialNumber + "/(10)" + batchNumber
);
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
Hälso‑dokumentation
QR‑koder på samtyckesformulär kan skannas för att automatiskt arkivera dokumentet under rätt patientjournal.
String patientData = "PATIENT_ID:" + patientId + "|DOC_TYPE:CONSENT|DATE:" + dateString;
BarcodeSignOptions options = new BarcodeSignOptions(patientData);
options.setEncodeType(BarcodeTypes.QR);
Finansiella tjänster
Transaktions‑ID:n kodade i en streckkod möjliggör för revisorer att verifiera efterlevnad med en enkel skanning.
String complianceData = "TXN:" + transactionId + "|AGENT:" + agentId + "|BRANCH:" + branchCode;
BarcodeSignOptions options = new BarcodeSignOptions(complianceData);
options.setEncodeType(BarcodeTypes.PDF417);
Tillverkningskvalitetskontroll
Inspektionsrapporter signerade med streckkoder som innehåller batchnummer och inspektörs‑ID gör rotorsaksanalyser omedelbara.
String qcData = "BATCH:" + batchNumber + "|INSPECTOR:" + inspectorId + "|RESULT:" + passFailStatus;
BarcodeSignOptions options = new BarcodeSignOptions(qcData);
options.setEncodeType(BarcodeTypes.DataMatrix);
Vanliga implementeringsproblem
Problem 1: “File is already in use”‑undantag
Svar: Filen förblir låst om en tidigare Signature‑instans inte disposerades. Wrappa alltid signeringskoden i ett try‑finally‑block och anropa signature.dispose().
Signature signature = null;
try {
signature = new Signature(filePath);
// ... your code ...
} finally {
if (signature != null) {
signature.dispose();
}
}
Problem 2: Streckkod visas inte i PDF
Svar: Verifiera att setTop/setLeft‑värdena ligger inom sidans gränser, öka streckkodens bredd/höjd och säkerställ att förgrunds‑/bakgrundsfärger kontrasterar mot sidans bakgrund.
// 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);
Problem 3: “Invalid Barcode Data”‑undantag
Svar: GS1‑streckkoder kräver strikt parentesnotation. Använd korrekta Application Identifiers (t.ex. (01), (21)) och undvik tecken som inte stöds.
// Correct:
"(01)03212345678906/(21)ABC123"
// Incorrect:
"03212345678906ABC123"
Problem 4: OutOfMemoryError med stora PDF‑filer
Svar: Öka JVM‑heapen (-Xmx4G) och överväg att signera sidor individuellt istället för att använda setAllPages(true) för mycket stora dokument.
java -Xmx2G -jar your-application.jar
Problem 5: Streckkodsskanning misslyckas
Svar: Säkerställ att streckkoden är minst 200 × 100 px, använder högkontrastfärger och inte förvrängs av PDF‑komprimering.
// 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));
Säkerhet och validering
Är streckkodsignaturer säkra?
En streckkod ensam är inte kryptografiskt skyddad, så vem som helst kan generera en ny. Kombinera den med en digital signatur för att garantera både äkthet och skannbarhet. Mönstret med dubbel signatur (digital först, streckkod sist) ger juridisk verkställbarhet samt operativ bekvämlighet.
Validera streckkodsdata
Efter skanning, verifiera att dokumentets digitala signatur fortfarande är giltig och att streckkodens payload matchar förväntade mönster. Använd GroupDocs search()‑API med BarcodeSearchOptions för att automatiskt extrahera och validera streckkodsinnehåll.
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);
}
Prestandaöverväganden
Resurshantering
Disposera alltid Signature‑objekt efter varje operation för att undvika minnesläckor:
signature.dispose();
När du bearbetar många filer, skapa och disponera ett nytt Signature‑objekt per dokument:
for (String filePath : documentPaths) {
Signature signature = null;
try {
signature = new Signature(filePath);
// ... signing logic ...
} finally {
if (signature != null) {
signature.dispose();
}
}
}
Batch‑behandling
För små batcher (< 100 filer) är sekventiell bearbetning enkel:
for (String path : paths) {
signDocument(path);
}
För större arbetsbelastningar kan parallell bearbetning snabba upp processen — men övervaka I/O‑trycket och begränsa antalet trådar till 4‑8:
paths.parallelStream().forEach(path -> signDocument(path));
Minnesoptimering för stora PDF‑filer
Öka heap‑storleken, bearbeta sidor individuellt och rensa referenser efter varje steg. Detta förhindrar OutOfMemoryError på dokument större än 50 MB.
Cacha streckkodsalternativ
Om du återanvänder samma streckkodskonfiguration i många filer, cacha BarcodeSignOptions‑instansen:
// 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;
}
Avancerade funktioner
Flera signaturer i ett dokument
Lägg till flera streckkoder (eller kombinera med digitala signaturer) genom att anropa sign flera gånger med olika alternativobjekt:
// 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);
Dynamiskt streckkodsinnehåll
Generera streckkodsinnehåll från dokumentmetadata, tidsstämplar eller databassökningar:
// 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);
Integration med Spring Boot
Exponera en REST‑endpoint som tar emot en PDF, lägger till en streckkod och returnerar den signerade filen:
@Service
public class DocumentSigningService {
public void signWithBarcode(MultipartFile file, String barcodeData) {
// ... implementation ...
}
}
REST‑API‑exempel
En minimal controller som delegaterar till signeringstjänsten:
@PostMapping("/sign-document")
public ResponseEntity<byte[]> signDocument(
@RequestParam("file") MultipartFile file,
@RequestParam("barcode") String barcodeData
) {
// Sign document and return as byte array
}
Vanliga frågor
Q: What is a GS1CompositeBar barcode?
A: A GS1CompositeBar combines linear and 2D components to store product IDs, serial numbers, and other data in a single scannable symbol, widely used in retail and logistics.
Q: Can I use other barcode types besides GS1CompositeBar?
A: Yes—GroupDocs.Signature supports over 60 types, including QR, Code128, DataMatrix, PDF417, and Aztec. Switch the setEncodeType() value to change the format.
Q: Do I need a license for production use?
A: A valid GroupDocs license is required for production deployments. A free trial is available for development and testing.
Q: Will barcode scanners read barcodes from signed PDFs?
A: Absolutely, provided the barcode is at least 200 × 100 px and has sufficient contrast. Smartphone scanning apps work on‑screen; hardware scanners work on printed copies.
Q: How do I handle errors during signing?
A: Wrap your code in try‑catch blocks, log full stack traces, and always call signature.dispose() in a finally block to release resources.
Q: Can I sign other document formats?
A: Yes—GroupDocs.Signature also supports DOCX, XLSX, PPTX, images, and many more. Just change the input file extension; the API remains the same.
Q: Are there file‑size limits?
A: No hard limit, but documents over 50 MB may require a larger JVM heap and page‑by‑page processing to stay memory‑efficient.
Q: How do I sign PDFs stored in cloud storage?
A: Download the file to a temporary local path, apply the signature, then upload it back to your cloud bucket. Clean up temporary files afterward.
Slutsats
Du har nu en komplett, produktionsklar guide för att skapa streckkodsignatur Java för PDF‑dokument. Genom att kombinera kryptografiska digitala signaturer med maskinläsbara streckkoder uppnår du både juridisk verkställbarhet och operativ effektivitet inom leveranskedja, sjukvård, finans och tillverkning. Experimentera med olika streckkodstyper, integrera koden i dina befintliga tjänster och utforska batch‑behandling för storskaliga distributioner.
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);