Hogyan hozzunk létre vonalkód aláírást PDF-ben Java-val

Ebben az oktatóanyagban megtanulja, hogyan hozzon létre vonalkód aláírást PDF-fájlokban Java és a GroupDocs.Signature segítségével. A vonalkód aláírások géppel olvasható azonosítókat ágyaznak be, amelyek egyszerre hamisíthatatlanok és könnyen beolvashatóak — tökéletesek szerződésekhez, bizonyítványokhoz, számlákhoz és bármely dokumentumhoz, amely megbízható ellenőrzést igényel.

Gyors válaszok

  • Mi az a vonalkód aláírás? Egy PDF-be ágyazott vonalkód, amely strukturált adatokat tárol, és szkennerek vagy szoftverek által olvasható.
  • Melyik vonalkódtípust ajánljuk? Code128, mivel kompakt módon kezeli az alfanumerikus adatokat.
  • Szükségem van licencre? Egy ingyenes próba megfelelő a teszteléshez; a teljes licenc a termeléshez kötelező.
  • Bármelyik oldalméretre elhelyezhető a vonalkód? Igen — használjon százalékos elhelyezést az automatikus méretezéshez.
  • Vektoros a vonalkód? Igen, csak néhány kilobájtot ad a PDF-hez, és bármilyen felbontáson éles marad.

Mi az a vonalkód aláírás?

A vonalkód aláírás egy vektoros vonalkód, amely közvetlenül egy PDF-oldalba van beágyazva, és egyszerre vizuális elemként és kriptográfiai aláírásként működik, amely később ellenőrizhető. Strukturált adatokat tárol, például azonosítókat vagy időbélyegeket, és biztosítja a dokumentum integritását, miközben géppel olvasható hivatkozást nyújt.

Miért fontosak a vonalkód aláírások a PDF-jeiben

A vonalkód aláírások kompakt, géppel olvasható azonosítót adnak a PDF-eknek, amely azonnal beolvasható, kiküszöbölve a kézi adatbevitel szükségességét és csökkentve a hibákat. Mivel vektoros grafikaként vannak beágyazva, bármilyen felbontáson élesek maradnak, és csak néhány kilobájtot adnak a fájlhoz. Ez az olvashatóság, a hamisíthatatlanság és a minimális méret kombinációja teszi őket ideálissá szerződésekhez, számlákhoz, bizonyítványokhoz és bármely dokumentumhoz, amely megbízható ellenőrzést igényel.

Valószínűleg már találkozott ezzel a kihívással: egyedi azonosítókat kell PDF-ekhez adni, amelyek géppel olvashatóak és hamisíthatatlanok. Lehet, hogy egy dokumentumkezelő rendszeren, tanúsítványok feldolgozásán vagy szerződések nyomon követésén dolgozik.

Itt jönnek képbe a vonalkód aláírások. Az egyszerű szöveges pecsétek helyett a vonalkódok strukturált adatot ágyaznak be, amelyet a szkennerek (és a szoftvere) azonnal olvasnak. Ráadásul, ha a GroupDocs.Signature for Java PDF-aláírással kombinálja, erőteljes módot kap a dokumentumok nyomon követésére és ellenőrzésére anélkül, hogy bonyolult adatbázis-kereséseket kellene végezni.

Ebben az útmutatóban pontosan megtanulja, hogyan valósítsa meg a vonalkód aláírásokat Java PDF-jeiben — az egyszerű beállítástól a termelésre kész kódig, rugalmas elhelyezéssel. Akár számlarendszert, bizonyítványgenerátort vagy szerződéskezelő platformot épít, a végére mindent megkap, amire szüksége van.

Amit elsajátít:

  • A GroupDocs.Signature for Java beállítása percek alatt
  • Code128 vonalkód aláírások létrehozása (és miért gyakran a legjobb választás)
  • Vonalkódok elhelyezése százalékos elrendezéssel, amely bármilyen PDF-méreten működik
  • Gyakori hibák elkerülése, amelyek fejlesztőket akadályozzák
  • A megvalósítás megfelelő tesztelése

Hogyan hozzunk létre vonalkód aláírást Java-ban

A vonalkód aláírás létrehozása Java-ban magában foglalja a cél PDF betöltését, a vonalkód beállításainak (adat, típus, méret, pozíció) konfigurálását, majd az aláírás alkalmazását egy új dokumentum generálásához. A GroupDocs.Signature kezeli a renderelést és a kriptográfiai kötést, így csak a kívánt paramétereket kell megadnia, és a fájlutakat kell kezelnie.

Előfeltételek és környezeti ellenőrzőlista

Mielőtt belevágna, ellenőrizze, hogy a következő elemek rendelkezésre állnak:

  • Java Development Kit (JDK) 8 vagy újabb – kötelező minden GroupDocs Java könyvtárhoz.
  • Maven vagy Gradle – a GroupDocs.Signature függőség kezeléséhez.
  • IDE, például IntelliJ IDEA, Eclipse vagy VS Code Java kiegészítőkkel.
  • GroupDocs.Signature for Java (ajánlott verzió 23.12 vagy újabb).
  • Alapvető Java ismeretek – képesnek kell lennie osztályok létrehozására, kivételek kezelésére és fájl‑I/O-val való munkára.

A GroupDocs.Signature beállítása a projektben

A könyvtár beillesztése a projektbe egyszerű. Válassza ki a build‑eszközt:

Maven felhasználóknak, adja hozzá ezt a függőséget a pom.xml‑hez:

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

Gradle‑t használ? Adja hozzá ezt a sort a build.gradle‑hez:

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

Kézi beállítás előnyben részesítése? Töltse le a JAR‑t közvetlenül a GroupDocs.Signature for Java releases oldalról, és adja hozzá az osztályútvonalhoz.

Licenc beszerzése

Mielőtt teljes termelésbe lépne, rendezze a licencet:

  • Ingyenes próba: Tökéletes teszteléshez — szerezze be a GroupDocs weboldaláról a fő funkciókat.
  • Ideiglenes licenc: Több időre van szüksége a kiértékeléshez? Kérjen 30‑napos ideiglenes licencet.
  • Teljes licenc: Termeléshez? Vásároljon korlátlan használatú licencet.

Egy gyors ellenőrzés, hogy minden működik:

Signature signature = new Signature("sample.pdf");
System.out.println("Signature object created successfully.");

Ha hiba nélkül lefut, minden rendben van!

Hogyan hozzunk létre vonalkód aláírást Java-ban

Most jön a szórakoztató rész — aláírunk egy PDF-et vonalkóddal. A folyamatot kisebb lépésekre bontjuk, hogy pontosan megértse, mi történik minden egyes szakaszban.

1. lépés: A Signature objektum inicializálása

Definíció horgony: A Signature osztály a GroupDocs.Signature belépési pontja PDF-dokumentumok betöltéséhez, módosításához és mentéséhez.

Először meg kell adnia, melyik PDF‑et dolgozza fel a GroupDocs:

Signature signature = new Signature("input.pdf");

Mi történik: A Signature objektum betölti a PDF‑et a memóriába, és előkészíti a módosításokat. Ügyeljen arra, hogy a fájlútvonal helyes legyen — gyakori hiba a Windows‑on a visszafelé perjelek (\) helytelen használata (használjon \\ vagy egyszerűen előre perjeleket, amelyek platformfüggetlenek).

2. lépés: A vonalkód beállításainak konfigurálása (Hogyan adjunk hozzá vonalkódot)

Definíció horgony: A BarcodeSignOptions tartalmazza a PDF‑be ágyazandó vonalkód összes beállítását.

Most hozzuk létre a vonalkód aláírást a kívánt adatokkal:

BarcodeSignOptions options = new BarcodeSignOptions("12345678");
options.setEncodeType(BarcodeEncodeType.Code128);
  • "12345678" a vonalkód adat — ez lehet rendelés‑azonosító, bizonyítvány‑szám vagy bármilyen szükséges azonosító.
  • Code128 a kódolási típus (további információ a megfelelő típus kiválasztásáról alább).

Pro tipp: A Code128 képes számok és betűk egyidejű kezelésére, így sokféle felhasználási esethez alkalmas. Ha csak számokra van szükség, a Code39 egyszerűbb lehet, de a Code128 nagyobb rugalmasságot biztosít.

3. lépés: A vonalkód elhelyezése (Hogyan írjuk alá a PDF‑et vonalkóddal)

Definíció horgony: A SignatureOptions biztosítja az elrendezési tulajdonságokat, például az oldalszámot, méretet és igazítást.

Itt jön a GroupDocs erőssége — a százalékos elhelyezés azt jelenti, hogy a vonalkód minden PDF‑méreten jól néz ki:

options.setLeft(10);   // 10% from the left edge
options.setTop(90);    // 90% from the bottom edge (near the footer)
options.setWidth(30);  // 30% of page width
options.setHeight(10); // 10% of page height
options.setPageNumber(1);

Miért fontosak a százalékok: Képzelje el, hogy A4‑es és jogi méretű dokumentumokat is aláír. A százalékos pozicionálással a vonalkód automatikusan arányosan méreteződik mindkét esetben. A fix pixel értékek túl kicsi vonalkódot eredményeznek nagy dokumentumoknál, vagy túl nagyot kis dokumentumoknál.

Valós példák: Egy A4 oldal (595 × 842 pont) 30 % szélességű vonalkódja kb. 180 pont széles lesz. Egy jogi oldal (612 × 1008 pont) esetén ez körülbelül 184 pont, azaz automatikusan arányos.

4. lépés: Aláírás és a dokumentum mentése (Hogyan adjunk hozzá vonalkód‑pdf‑et)

Most alkalmazzuk az aláírást és mentsük el a változtatásokat:

signature.sign(outputPath, options);

Fontos megjegyzés: A kimeneti könyvtárnak léteznie kell, mielőtt a kódot futtatná. A GroupDocs nem hoz létre beágyazott könyvtárakat, ezért előbb hozza létre őket, vagy kezelje ezt a kódban:

new File("output").mkdirs();

Mi történik hiba esetén? Tegye a kódot try‑catch blokkba:

try {
    signature.sign("signed.pdf", options);
} catch (Exception e) {
    e.printStackTrace();
}

A megfelelő vonalkódtípus kiválasztása (code128 vonalkód generálása)

A GroupDocs több vonalkódformát támogat, és a helyes választás fontos. Íme egy gyakorlati összehasonlítás:

Code128 (Alapértelmezett választásunk):

  • Legjobb: Vegyes alfanumerikus adatok (pl. „INV2024-001”)
  • Kapacitás: Legfeljebb 128 ASCII karakter
  • Miért nyer: Kompakt, széles körben támogatott, betűket és számokat egyaránt kezel
  • Mikor használja: Rugalmas adatkezelésre, ha nem tudja előre, milyen típusú adatot kódol

Code39:

  • Legjobb: Egyszerű alfanumerikus kódok
  • Kapacitás: 43 karakter (A‑Z, 0‑9 és néhány szimbólum)
  • Miért érdemes: Régebbi szkennerek gyakran jobban támogatják
  • Mikor használja: Örökölt rendszerek vagy egyszerűség fontosabb, mint az adat sűrűsége

QR Code:

  • Legjobb: Nagy mennyiségű adat (URL‑ek, JSON)
  • Kapacitás: Akár 3 KB adat
  • Miért erős: Komplex adatstruktúrák tárolása, beépített hibajavítás
  • Mikor használja: Strukturált adatok vagy URL‑ek beágyazása szükséges

EAN/UPC:

  • Legjobb: Termékazonosítás
  • Kapacitás: Fix hosszúságú numerikus kódok (8‑13 számjegy)
  • Mikor használja: Kiskereskedelmi vagy készletkezelő rendszerek

Gyors döntési útmutató:

  • Betűk és számok? → Code128
  • Csak számok, egyszerűség? → Code39
  • Sok adat vagy URL? → QR Code
  • Kiskereskedelmi termékkódok? → EAN/UPC

Gyakori hibák és elkerülésük (tamper evident barcode)

Az alábbiakban a fejlesztők leggyakrabban tapasztalt problémákat és megoldásaikat soroljuk fel:

Probléma 1: A vonalkód pozíciója helytelen

Tünet: A vonalkód váratlan helyen jelenik meg vagy levágódik.

Gyakori okok:

  • Pixel‑értékek használata különböző oldalméreteken
  • A PDF koordinátái a bal‑alsó sarokból indulnak, nem a felső‑balról
  • Margók, amelyek a tartalmat a látható területből ki tolják

Megoldás: Mindig használjon százalékos elhelyezést a konzisztencia érdekében:

options.setLeft(5);
options.setTop(95);
options.setWidth(40);
options.setHeight(12);

Probléma 2: A vonalkód szövege olvashatatlan

Tünet: A kódolt szöveg megjelenik, de a szkennerek nem tudják beolvasni.

Okok:

  • A vonalkód túl kicsi a megadott adat mennyiségéhez
  • Rossz kódolási típus a data‑hoz
  • Alacsony kontraszt a vonalak és a háttér között

Megoldás: Igazítsa a vonalkód méretét az adat hosszához. Code128 esetén 10‑15 karakteres adatnál legalább 8‑10 % oldalszélességet célozzon meg.

Probléma 3: Fájlútvonal‑kivétel

Tünet: FileNotFoundException vagy hasonló hiba.

Okok:

  • Hardcoded Windows‑útvonalak egyetlen visszaperjellel
  • A kimeneti könyvtár nem létezik
  • Fájl‑jogosultsági problémák

Megoldás: Használjon előre perjeleket (minden platformon működnek) és hozza létre a könyvtárakat előre:

Path output = Paths.get("output/signed.pdf");
Files.createDirectories(output.getParent());

Probléma 4: Memória‑problémák nagy PDF‑ekkel

Tünet: Memóriahiány hiba nagy dokumentumok feldolgozásakor.

Megoldás: Zárja le a Signature objektumot a munka befejezése után, hogy felszabaduljanak az erőforrások:

signature.close();

A vonalkód megvalósítás tesztelése

A telepítés előtt ellenőrizze, hogy a vonalkódok valóban működnek. Íme egy gyakorlati tesztlista:

1. Vizuális ellenőrzés

Nyissa meg az aláírt PDF‑et, és ellenőrizze:

  • Látható-e a vonalkód és megfelelően helyezkedik‑e el?
  • Éles‑e (nem homályos vagy pixelált)?
  • Van‑e elegendő fehér tér körülötte?

2. Szkennelési teszt

Használjon telefonos vonalkód‑olvasó alkalmazást (pl. „Barcode Scanner” vagy „QR & Barcode Reader”) a következőkre:

  • A szkenner be tudja‑olvasni a vonalkódot
  • A dekódolt adat megegyezik a kódoltal
  • Különböző szögekből és távolságokból is működik

3. Kereszt‑platform teszt

Nyissa meg a PDF‑et különböző eszközökön:

  • Windows (Adobe Reader, Chrome)
  • Mac (Preview, Chrome)
  • Mobil (iOS, Android)

Győződjön meg róla, hogy a vonalkód mindenhol helyesen jelenik meg.

4. Automatizált tesztkód

Egy egyszerű teszt, amelyet futtathat:

Signature testSignature = new Signature("signed.pdf");
List<BarcodeSignature> signatures = testSignature.search(BarcodeSignature.class);
if (signatures.size() > 0) {
    System.out.println("Barcode found: " + signatures.get(0).getText());
}

Valós példák a vonalkód aláírásokra

Nézzük meg, hol ragyog ez a technika a termelési rendszerekben:

1. Tanúsítvány generálás és ellenőrzés

Szituáció: Egy képzési platform kiad befejezési tanúsítványokat.
Megvalósítás: Egyedi tanúsítvány‑azonosítót (pl. „CERT‑2024‑00123”) generál, és Code128 vonalkódként ágyaz be a jobb‑alsó sarokba. A vonalkód beolvasása az API‑nak azonnal visszaadja a tanúsítvány részleteit, kiküszöbölve a kézi adatbevitelt.

2. Számlakövető rendszerek

Szituáció: Egy vállalat havonta több ezer számlát dolgoz fel.
Megvalósítás: A számlaszámot és a fizetési határidőt QR‑kódként helyezi el, ahol a szkennelő berendezések könnyen olvashatják. Az automatizált rendező rendszerek emberi beavatkozás nélkül irányítják a számlákat, csökkentve a feldolgozási időt órákról percekre.

3. Jogi szerződéskezelés

Szituáció: Egy ügyvédi iroda nyomon követi a szerződés‑verziókat és módosításokat.
Megvalósítás: Minden szerződés‑verzió egyedi vonalkód‑azonosítót kap, amely tartalmazza a szerződés‑azonosítót, verziószámot és aláírási dátumot. Az audit során a beolvasás azonnal megjeleníti a teljes verziótörténetet.

4. Egészségügyi nyilvántartások biztonsága

Szituáció: Egy kórház meg akarja akadályozni a jogosulatlan hozzáférést a betegek adataihoz.
Megvalósítás: A beteg‑azonosítót és a rekord‑létrehozási időbélyeget vonalkódként ágyazza be. Csak hitelesített eszközök tudják dekódolni és hozzáférni a teljes rekordhoz, minden beolvasás audit‑naplót hoz létre a megfelelőség érdekében.

Teljesítményoptimalizálási tippek (java document security)

Sok PDF aláírása esetén a teljesítmény számít. Íme néhány tipp a zökkenőmentes működéshez:

Kötetes feldolgozási stratégia

Egy dokumentum helyett kötegelt feldolgozást alkalmazzon:

for (String filePath : pdfList) {
    Signature batchSignature = new Signature(filePath);
    batchSignature.sign(outputPath, options);
    batchSignature.close();
}

Miért segít: Az opcióobjektum újrahasználata és a források megfelelő lezárása megakadályozza a memória‑szivárgásokat.

Memóriakezelés nagy PDF‑eknél

50 MB‑nál nagyobb PDF‑ek esetén:

  • Sorozatos feldolgozás, ne töltse be egyszerre több fájlt.
  • Használjon try‑with‑resources‑t a tiszta lezáráshoz.
  • Figyelje a heap‑méretet, és szükség esetén állítsa be a JVM paramétereket: -Xmx2g.

Gyakran használt vonalkódok gyorsítótárazása

Ha sok dokumentum ugyanazzal a vonalkóddal kap aláírást, gyorsítótárazza a BarcodeSignOptions példányt:

BarcodeSignOptions cachedOptions = new BarcodeSignOptions("STATIC_ID");
cachedOptions.setEncodeType(BarcodeEncodeType.Code128);

Mikor használjunk vonalkód aláírást (és mikor ne)

Ideális esetek:

  • Géppel olvasható dokumentumazonosítókra van szükség.
  • A dokumentumokat automatikusan szkennelik vagy dolgozzák fel.
  • Hamisíthatatlan nyomon követés digitális tanúsítványok nélkül.
  • Már meglévő vonalkód‑infrastruktúrával való integráció szükséges.

Nem ideális, ha:

  • Jogi kötelező erejű digitális aláírásra van szükség (használjon digitális tanúsítványt).
  • A dokumentumokat csak emberek nézik (egyszerű szöveges vízjel is elegendő).
  • Rendkívül kis dokumentumokról van szó, ahol a vonalkód elnyomná a tartalmat.
  • Titkosításra van szükség — a vonalkódok láthatóak és bárki által beolvashatóak.

Kombinálható megközelítések? Természetesen! Sok rendszer egyszerre használ vonalkód aláírásokat a nyomon követéshez és digitális aláírásokat a jogi érvényességhez.

Gyakran ismételt kérdések

K: Használhatok különböző vonalkódtípusokat egy PDF‑ben?
A: Igen! Hívja meg többször a signature.sign()‑t különböző BarcodeSignOptions‑okkal minden vonalkódtípushoz. Ügyeljen arra, hogy ne fedjék egymást.

K: Hogyan kezeljem a speciális karaktereket tartalmazó vonalkódokat?
A: A Code128 a legtöbb ASCII karaktert támogatja. Unicode vagy összetett adatok esetén válasszon QR‑kódot, amely UTF‑8 kódolást is támogat.

K: Mi a maximális adatméret egy Code128 vonalkódban?
A: Technikai korlát 128 karakter, de a olvashatóság jelentősen romlik a 30‑40 karakter felett. Nagyobb mennyiségű adat esetén használjon QR‑kódot.

K: Jelentősen megnő a PDF fájlmérete a vonalkódok hozzáadása miatt?
A: Nem számottevően — a vonalkódok vektoros grafikák, általában csak 5‑20 KB‑ot adnak hozzá egy vonalkód méretétől függően.

K: Forgathatom vagy függőlegesen elhelyezhetem a vonalkódot?
A: Igen! Használja az options.setRotationAngle(90)‑t a vonalkód forgatásához, ami hasznos a margó‑elhelyezésnél.

K: Hogyan jeleníthetem meg a vonalkódot minden oldalon egy többoldalas PDF‑ben?
A: Iteráljon az oldalakon, és alkalmazza az aláírást mindegyikre. Tekintse meg a PagesSetup osztályt a GroupDocs dokumentációban a kívánt oldalak vezérléséhez.

K: Mi a teendő, ha a vonalkód‑olvasóm nem tudja beolvasni a generált vonalkódot?
A: Először ellenőrizze, hogy az olvasó támogatja‑e a kiválasztott típusú vonalkódot. Ezután növelje a vonalkód méretét — a legtöbb olvasási probléma a túl kicsi vonalakból adódik. Legalább 1 inch (2,54 cm) szélességet célozzon meg a megbízható beolvasáshoz.

További források

Dokumentáció:

Letöltések és licencelés:

Közösség és támogatás:


Utoljára frissítve: 2026-07-20
Tesztelve a következővel: GroupDocs.Signature 23.12 (Java)
Szerző: GroupDocs

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>
implementation 'com.groupdocs:groupdocs-signature:23.12'
import com.groupdocs.signature.Signature;

public class QuickTest {
    public static void main(String[] args) {
        try {
            Signature signature = new Signature("test-document.pdf");
            System.out.println("GroupDocs.Signature is ready to go!");
        } catch (Exception e) {
            System.err.println("Setup issue: " + e.getMessage());
        }
    }
}
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
Signature signature = new Signature(filePath);
import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;

BarcodeSignOptions options = new BarcodeSignOptions("12345678");
options.setEncodeType(BarcodeTypes.Code128);
import com.groupdocs.signature.domain.enums.MeasureType;
import com.groupdocs.signature.domain.Padding;

// Use percentages instead of fixed pixels
options.setLocationMeasureType(MeasureType.Percents);
options.setLeft(5);  // 5% from the left edge
options.setTop(5);   // 5% from the top

// Size it proportionally too
options.setSizeMeasureType(MeasureType.Percents);
options.setWidth(10);  // 10% of page width
options.setHeight(5);  // 5% of page height

// Add some breathing room with margins
Padding margins = new Padding();
margins.setLeft(1);
margins.setTop(1);
margins.setRight(1);
options.setMargin(margins);
String outputFilePath = "YOUR_OUTPUT_DIRECTORY/SignWithPercents/sample_signed.pdf";
signature.sign(outputFilePath, options);
Path outputPath = Paths.get(outputFilePath);
Files.createDirectories(outputPath.getParent());
signature.sign(outputFilePath, options);
try {
    signature.sign(outputFilePath, options);
    System.out.println("PDF signed successfully at: " + outputFilePath);
} catch (Exception e) {
    System.err.println("Signing failed: " + e.getMessage());
    e.printStackTrace();
}
options.setLocationMeasureType(MeasureType.Percents);
options.setLeft(5);  // 5% from left works on any page width
options.setWidth(10);  // Give it room to breathe
options.setHeight(5);  // Maintain proper aspect ratio
String filePath = "documents/sample.pdf";  // Works on Windows, Mac, Linux
Files.createDirectories(Paths.get("output/signed"));
try (Signature signature = new Signature(filePath)) {
    signature.sign(outputFilePath, options);
} // Automatically closes and releases memory
import org.junit.Test;
import static org.junit.Assert.*;

public class BarcodeSignatureTest {
    
    @Test
    public void testBarcodeSigning() {
        String testPdf = "test-data/sample.pdf";
        String output = "test-output/signed.pdf";
        
        try (Signature signature = new Signature(testPdf)) {
            BarcodeSignOptions options = new BarcodeSignOptions("TEST123");
            options.setEncodeType(BarcodeTypes.Code128);
            
            signature.sign(output, options);
            
            // Verify output file exists
            assertTrue(new File(output).exists());
            
            // Verify file size increased (signature was added)
            long originalSize = new File(testPdf).length();
            long signedSize = new File(output).length();
            assertTrue(signedSize > originalSize);
            
        } catch (Exception e) {
            fail("Signing should not throw exception: " + e.getMessage());
        }
    }
}
List<String> pdfFiles = Arrays.asList("doc1.pdf", "doc2.pdf", "doc3.pdf");

for (String pdfFile : pdfFiles) {
    try (Signature signature = new Signature(pdfFile)) {
        BarcodeSignOptions options = createBarcodeOptions(); // Reuse options
        signature.sign(getOutputPath(pdfFile), options);
    }
}
// Create options once, reuse many times
BarcodeSignOptions templateOptions = createStandardBarcodeOptions();

// For each document, clone and customize
BarcodeSignOptions documentOptions = templateOptions.clone();
documentOptions.setText(uniqueDocumentId);

Kapcsolódó oktatóanyagok