Jak utworzyć podpis kodu kreskowego w PDF przy użyciu Javy

W tym samouczku dowiesz się, jak utworzyć podpis kodu kreskowego w plikach PDF przy użyciu Javy i GroupDocs.Signature. Podpisy kodów kreskowych osadzają identyfikatory odczytywane maszynowo, które są jednocześnie odporne na manipulacje i łatwe do skanowania — idealne dla umów, certyfikatów, faktur i każdego dokumentu wymagającego niezawodnej weryfikacji.

Szybkie odpowiedzi

  • Czym jest podpis kodu kreskowego? Kod kreskowy osadzony w pliku PDF, który przechowuje dane strukturalne i może być odczytany przez skanery lub oprogramowanie.
  • Jaki typ kodu kreskowego jest zalecany? Code128, ponieważ obsługuje dane alfanumeryczne w sposób zwarty.
  • Czy potrzebna jest licencja? Darmowa wersja próbna działa do testów; pełna licencja jest wymagana w środowisku produkcyjnym.
  • Czy mogę umieścić kod kreskowy na dowolnym rozmiarze strony? Tak — użyj pozycjonowania opartego na procentach dla automatycznego skalowania.
  • Czy kod kreskowy jest wektorowy? Tak, dodaje jedynie kilka kilobajtów do PDF i pozostaje ostry przy każdej rozdzielczości.

Czym jest podpis kodu kreskowego?

Podpis kodu kreskowego to wektorowy kod kreskowy osadzony bezpośrednio na stronie PDF, działający zarówno jako element wizualny, jak i jako podpis kryptograficzny, który można później zweryfikować. Przechowuje dane strukturalne, takie jak identyfikatory czy znaczniki czasu, zapewnia integralność dokumentu i dostarcza odczytywalny maszynowo odnośnik.

Dlaczego podpisy kodów kreskowych mają znaczenie dla Twoich PDF‑ów

Podpisy kodów kreskowych nadają PDF‑om kompaktowy, odczytywalny maszynowo identyfikator, który można zeskanować natychmiast, eliminując ręczne wprowadzanie danych i zmniejszając liczbę błędów. Ponieważ są osadzone jako grafika wektorowa, pozostają ostre przy każdej rozdzielczości i dodają jedynie kilka kilobajtów do pliku. To połączenie czytelności, odporności na manipulacje i niewielkiego rozmiaru czyni je idealnymi dla umów, faktur, certyfikatów i każdego dokumentu wymagającego niezawodnej weryfikacji.

Oto wyzwanie, z którym prawdopodobnie się spotkałeś: musisz dodać unikalne identyfikatory do PDF‑ów, które są jednocześnie odczytywalne maszynowo i odporne na manipulacje. Być może pracujesz nad systemem zarządzania dokumentami, przetwarzaniem certyfikatów lub obsługą umów wymagających późniejszej weryfikacji.

Właśnie tutaj przydają się podpisy kodów kreskowych. W przeciwieństwie do prostych pieczątek tekstowych, kody kreskowe pozwalają osadzić strukturalne dane, które skanery (i Twoje oprogramowanie) mogą odczytać natychmiast. Dodatkowo, łącząc je z podpisywaniem PDF‑ów przy użyciu GroupDocs.Signature dla Javy, uzyskasz potężny sposób śledzenia i weryfikacji dokumentów bez konieczności tworzenia skomplikowanych zapytań do baz danych.

W tym przewodniku nauczysz się dokładnie, jak wdrożyć podpisy kodów kreskowych w swoich PDF‑ach Javy — od podstawowej konfiguracji po kod gotowy do produkcji z elastycznym pozycjonowaniem. Niezależnie od tego, czy budujesz system fakturowania, generator certyfikatów, czy platformę zarządzania umowami, po zakończeniu będziesz mieć wszystko, czego potrzebujesz.

Co opanujesz:

  • Szybkie skonfigurowanie GroupDocs.Signature dla Javy
  • Tworzenie podpisów kodu kreskowego Code128 (i dlaczego to często najlepszy wybór)
  • Pozycjonowanie kodów kreskowych przy użyciu układów procentowych działających na dowolnym rozmiarze PDF
  • Unikanie typowych pułapek, które potykają programistów
  • Poprawne testowanie implementacji

Jak utworzyć podpis kodu kreskowego w Javie

Tworzenie podpisu kodu kreskowego w Javie polega na załadowaniu docelowego PDF, skonfigurowaniu opcji kodu kreskowego, takich jak dane, typ, rozmiar i pozycja, a następnie zastosowaniu podpisu w celu wygenerowania nowego dokumentu. GroupDocs.Signature zajmuje się renderowaniem i powiązaniem kryptograficznym, więc musisz jedynie podać żądane parametry i zarządzać ścieżkami plików.

Wymagania wstępne i lista kontrolna środowiska

Zanim rozpoczniesz, upewnij się, że masz przygotowane następujące elementy:

  • Java Development Kit (JDK) 8 lub nowszy – wymagany dla wszystkich bibliotek GroupDocs Java.
  • Maven lub Gradle – do zarządzania zależnością GroupDocs.Signature.
  • IDE takie jak IntelliJ IDEA, Eclipse lub VS Code z rozszerzeniami Java.
  • GroupDocs.Signature dla Javy (zalecana wersja 23.12 lub nowsza).
  • Podstawowa znajomość Javy – powinieneś swobodnie tworzyć klasy, obsługiwać wyjątki i pracować z I/O plików.

Konfigurowanie GroupDocs.Signature w projekcie

Dodanie biblioteki do projektu jest proste. Wybierz narzędzie budowania:

Dla użytkowników Maven, dodaj tę zależność do swojego pom.xml:

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

Używasz Gradle? Dodaj tę linię do swojego build.gradle:

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

Preferujesz ręczną konfigurację? Pobierz JAR bezpośrednio z GroupDocs.Signature for Java releases i dodaj go do classpath.

Uzyskanie licencji

Zanim przejdziesz do pełnej produkcji, musisz zająć się licencjonowaniem:

  • Darmowa wersja próbna: Idealna do testów — pobierz ją ze strony GroupDocs, aby wypróbować podstawowe funkcje.
  • Tymczasowa licencja: Potrzebujesz więcej czasu na ocenę? Złóż wniosek o 30‑dniową licencję tymczasową.
  • Pełna licencja: Gotowy do produkcji? Kup licencję na nieograniczone użycie.

Oto szybki test, aby upewnić się, że wszystko działa:

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

Jeśli uruchomi się bez błędów, jesteś gotowy!

Jak utworzyć podpis kodu kreskowego w Javie

Teraz przychodzi najciekawsza część — podpiszmy PDF kodem kreskowym. Podzielimy to na małe kroki, abyś dokładnie rozumiał, co dzieje się na każdym etapie.

Krok 1: Inicjalizacja obiektu Signature

Definicja: Klasa Signature jest punktem wejścia GroupDocs.Signature do ładowania, modyfikacji i zapisywania dokumentów PDF.

Najpierw musisz wskazać GroupDocs, który PDF ma być przetwarzany:

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

Co się dzieje: Obiekt Signature ładuje Twój PDF do pamięci i przygotowuje go do modyfikacji. Upewnij się, że ścieżka do pliku jest prawidłowa — częstym błędem jest używanie pojedynczych backslashy w Windows bez ich escapowania (użyj \\ lub po prostu slashe /, które działają wieloplatformowo).

Krok 2: Konfiguracja opcji kodu kreskowego (Jak dodać kod kreskowy)

Definicja: BarcodeSignOptions kapsułkuje wszystkie ustawienia niezbędne do renderowania kodu kreskowego w PDF.

Teraz utwórzmy podpis kodu kreskowego z Twoimi danymi:

BarcodeSignOptions options = new BarcodeSignOptions("12345678");
options.setEncodeType(BarcodeEncodeType.Code128);
  • "12345678" to dane Twojego kodu kreskowego — może to być numer zamówienia, numer certyfikatu lub dowolny identyfikator, którego potrzebujesz.
  • Code128 to typ kodowania (więcej o wyborze odpowiedniego typu poniżej).

Wskazówka: Code128 obsługuje zarówno liczby, jak i litery, co czyni go wszechstronnym dla większości zastosowań. Jeśli potrzebujesz tylko cyfr, Code39 może być prostszy, ale Code128 daje większą elastyczność.

Krok 3: Pozycjonowanie kodu kreskowego (Jak podpisać PDF kodem kreskowym)

Definicja: SignatureOptions dostarcza właściwości układu, takie jak numer strony, rozmiar i wyrównanie.

Tutaj GroupDocs naprawdę błyszczy — pozycjonowanie procentowe sprawia, że kod wygląda dobrze na każdym rozmiarze PDF:

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

Dlaczego procenty mają znaczenie: Wyobraź sobie, że podpisujesz zarówno dokumenty A4, jak i formularze w formacie legal. Dzięki pozycjonowaniu procentowemu Twój kod automatycznie skaluje się, aby wyglądał spójnie w obu przypadkach. Użycie stałych wartości pikseli spowodowałoby, że kod będzie za mały w dużych dokumentach lub za duży w małych.

Przykład z życia: Na stronie A4 (595 × 842 punktów) kod o szerokości 30 % będzie miał około 180 punktów. Na stronie legal (612 × 1008 punktów) będzie miał około 184 punktów — automatycznie proporcjonalnie.

Krok 4: Podpisanie i zapisanie dokumentu (Jak dodać kod kreskowy do PDF)

Czas zastosować podpis i zapisać wynik:

signature.sign(outputPath, options);

Ważna uwaga: Katalog wyjściowy musi istnieć przed uruchomieniem tego kodu. GroupDocs nie tworzy zagnieżdżonych katalogów automatycznie, więc utwórz je wcześniej lub obsłuż to w swoim kodzie:

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

Co zrobić, gdy coś pójdzie nie tak? Owiń to w blok try‑catch:

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

Wybór odpowiedniego typu kodu kreskowego dla Twoich potrzeb (generowanie kodu128)

GroupDocs obsługuje wiele formatów kodów kreskowych, a wybór właściwego ma znaczenie. Oto praktyczne porównanie:

Code128 (Naszy domyślny wybór):

  • Najlepszy dla: Mieszanych danych alfanumerycznych (np. „INV2024-001”)
  • Pojemność: Do 128 znaków ASCII
  • Dlaczego wygrywa: Zwarty, szeroko wspierany, obsługuje litery i cyfry
  • Użyj, gdy: Potrzebujesz elastyczności i nie wiesz, jaki rodzaj danych będziesz kodować

Code39:

  • Najlepszy dla: Proste kody alfanumeryczne
  • Pojemność: 43 znaki (A‑Z, 0‑9 i niektóre symbole)
  • Dlaczego rozważyć: Starsze skanery często lepiej go obsługują
  • Użyj, gdy: Pracujesz z systemami legacy lub prostota jest ważniejsza niż gęstość danych

QR Code:

  • Najlepszy dla: Duże ilości danych (URL‑e, JSON)
  • Pojemność: Do 3 KB danych
  • Dlaczego potężny: Może przechowywać złożone struktury, wbudowana korekcja błędów
  • Użyj, gdy: Musisz osadzić strukturalne dane lub linki

EAN/UPC:

  • Najlepszy dla: Identyfikacji produktów
  • Pojemność: Stałej długości kody numeryczne (8‑13 cyfr)
  • Użyj, gdy: Działasz w handlu detalicznym lub systemach inwentaryzacji

Szybki przewodnik decyzyjny:

  • Potrzebujesz liter i cyfr? → Code128
  • Tylko cyfry, prosto? → Code39
  • Dużo danych lub URL‑e? → QR Code
  • Kody produktów? → EAN/UPC

Typowe pułapki i jak ich unikać (kod kreskowy odporny na manipulacje)

Oto najczęstsze problemy, z którymi spotykają się programiści (abyś ich nie doświadczał):

Problem 1: Pozycjonowanie kodu kreskowego wygląda niepoprawnie

Objaw: Kod pojawia się w nieoczekiwanych miejscach lub jest obcięty.

Typowe przyczyny:

  • Używanie wartości pikselowych przy różnych rozmiarach stron
  • Zapomnienie, że współrzędne PDF zaczynają się od lewego dolnego rogu, a nie od góry
  • Marginesy wypychające zawartość poza widoczną część

Rozwiązanie: Zawsze stosuj pozycjonowanie procentowe dla spójności:

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

Problem 2: Tekst kodu kreskowego jest nieczytelny

Objaw: Zakodowany tekst jest widoczny, ale skanery go nie odczytują.

Przyczyny:

  • Kod jest za mały w stosunku do ilości danych
  • Nieodpowiedni typ kodowania dla danych
  • Niska kontrastowość między paskami a tłem

Rozwiązanie: Dopasuj rozmiar kodu do długości danych. Dla Code128 z 10‑15 znakami celuj w co najmniej 8‑10 % szerokości strony.

Problem 3: Wyjątki związane ze ścieżkami plików

Objaw: FileNotFoundException lub podobne błędy.

Przyczyny:

  • Hardkodowane ścieżki Windows z pojedynczymi backslashami
  • Brak katalogu wyjściowego
  • Problemy z uprawnieniami

Rozwiązanie: Używaj slashy (/) (działają wszędzie) i najpierw twórz katalogi:

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

Problem 4: Problemy z pamięcią przy dużych PDF‑ach

Objaw: Błędy „Out of memory” przy przetwarzaniu dużych dokumentów.

Rozwiązanie: Zamykaj obiekt Signature, gdy nie jest już potrzebny, aby zwolnić zasoby:

signature.close();

Testowanie implementacji kodu kreskowego

Zanim wdrożysz rozwiązanie, upewnij się, że kody rzeczywiście działają. Oto praktyczna lista kontrolna:

1. Test wizualny

Otwórz podpisany PDF i sprawdź:

  • Czy kod jest widoczny i prawidłowo umieszczony?
  • Czy wygląda ostro (nie jest rozmyty ani pikselowany)?
  • Czy wokół niego jest wystarczająco dużo białej przestrzeni?

2. Test skanowania

Użyj aplikacji skanującej kod kreskowy na telefonie (np. „Barcode Scanner” lub „QR & Barcode Reader”), aby zweryfikować:

  • Czy skaner odczytuje kod?
  • Czy odkodowane dane zgadzają się z tymi, które wprowadziłeś?
  • Czy działa pod różnymi kątami i odległościami?

3. Test wieloplatformowy

Otwórz PDF na różnych urządzeniach:

  • Windows (Adobe Reader, Chrome)
  • Mac (Preview, Chrome)
  • Urządzenia mobilne (iOS, Android)

Upewnij się, że kod renderuje się poprawnie wszędzie.

4. Automatyczny kod testowy

Oto prosty test, który możesz uruchomić:

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

Praktyczne przypadki użycia podpisów kodów kreskowych

Spójrzmy, gdzie technika ta naprawdę błyszczy w systemach produkcyjnych:

1. Generowanie i weryfikacja certyfikatów

Scenariusz: Budujesz platformę szkoleniową, która wydaje certyfikaty ukończenia.
Implementacja: Generuj unikalny identyfikator certyfikatu (np. „CERT‑2024‑00123”) i osadź go jako kod Code128 w prawym dolnym rogu. Skanowanie kodu pozwala Twojemu API natychmiast pobrać szczegóły certyfikatu, eliminując ręczne wprowadzanie danych.

2. Systemy śledzenia faktur

Scenariusz: Firma przetwarza tysiące faktur miesięcznie.
Implementacja: Dodaj numer faktury i termin płatności jako kod QR umieszczony w miejscu łatwo dostępnym dla skanerów. Systemy automatycznego sortowania mogą kierować faktury bez udziału człowieka, skracając czas przetwarzania z godzin do minut.

3. Zarządzanie umowami prawnymi

Scenariusz: Kancelaria potrzebuje śledzić wersje i zmiany umów.
Implementacja: Każda wersja umowy otrzymuje unikalny kod kreskowy zawierający ID umowy, numer wersji i datę podpisu. Skanowanie podczas audytów automatycznie wyświetla pełną historię wersji.

4. Bezpieczeństwo rekordów medycznych

Scenariusz: Szpital chce zapobiec nieautoryzowanemu dostępowi do rekordów.
Implementacja: Osadź ID pacjenta i znacznik czasu utworzenia rekordu w kodzie kreskowym. Tylko autoryzowane urządzenia mogą odczytać i uzyskać dostęp do pełnego rekordu, a każde skanowanie tworzy log audytu dla zgodności.

Wskazówki dotyczące optymalizacji wydajności (bezpieczeństwo dokumentów java)

Podczas masowego podpisywania PDF‑ów wydajność ma znaczenie. Oto kilka rad, aby wszystko działało płynnie:

Strategia przetwarzania wsadowego

Zamiast podpisywać jeden dokument po drugim, przetwarzaj je w partiach:

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

Dlaczego to pomaga: Ponowne użycie obiektu opcji i prawidłowe zamykanie zasobów zapobiega wyciekom pamięci.

Zarządzanie pamięcią przy dużych PDF‑ach

Dla plików większych niż 50 MB:

  • Przetwarzaj je kolejno, a nie jednocześnie.
  • Używaj try‑with‑resources, aby zapewnić czyszczenie.
  • Monitoruj rozmiar sterty i w razie potrzeby dostosuj parametry JVM: -Xmx2g.

Buforowanie często używanych kodów kreskowych

Jeśli podpisujesz wiele dokumentów tym samym kodem, zbuforuj instancję BarcodeSignOptions:

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

Kiedy używać podpisów kodów kreskowych (i kiedy nie)

Idealne scenariusze:

  • Potrzebujesz maszynowo odczytywalnych identyfikatorów dokumentów.
  • Dokumenty będą skanowane lub przetwarzane automatycznie.
  • Chcesz śledzić zmiany bez cyfrowych certyfikatów.
  • Wymagana jest integracja z istniejącą infrastrukturą kodów kreskowych.

Nieodpowiednie, gdy:

  • Potrzebny jest prawnie wiążący podpis cyfrowy (użyj certyfikatów cyfrowych).
  • Dokumenty będą wyświetlane wyłącznie przez ludzi (wystarczy znak wodny).
  • Pracujesz z bardzo małymi dokumentami, w których kod zajmowałby zbyt dużą część strony.
  • Wymagania bezpieczeństwa nakazują szyfrowanie — kody kreskowe są widoczne i skanowalne przez każdego.

Czy można łączyć podejścia? Oczywiście! Wiele systemów używa zarówno podpisów kodów kreskowych do śledzenia, jak i podpisów cyfrowych dla ważności prawnej.

Najczęściej zadawane pytania

P: Czy mogę używać różnych typów kodów kreskowych w tym samym PDF?
O: Tak! Wywołaj signature.sign() wielokrotnie z różnymi BarcodeSignOptions dla każdego typu kodu. Upewnij się tylko, że się nie nakładają.

P: Jak obsłużyć kody kreskowe zawierające znaki specjalne?
O: Code128 radzi sobie z większością znaków ASCII. Dla Unicode lub złożonych danych przejdź na QR Code — obsługuje kodowanie UTF‑8.

P: Jaka jest maksymalna ilość danych, którą mogę przechować w kodzie Code128?
O: Technicznie do 128 znaków, ale czytelność znacznie spada powyżej 30‑40 znaków. Dla większych ładunków użyj QR Code.

P: Czy dodanie kodów kreskowych znacząco zwiększy rozmiar mojego PDF?
O: Nie zauważalnie — kody kreskowe są grafiką wektorową, zazwyczaj dodają tylko 5‑20 KB na kod, w zależności od rozmiaru i złożoności.

P: Czy mogę obracać kody kreskowe lub umieszczać je pionowo?
O: Tak! Użyj options.setRotationAngle(90), aby obrócić kod, co jest przydatne przy umieszczaniu go na marginesie.

P: Jak sprawić, by kody kreskowe pojawiały się na każdej stronie wielostronicowego PDF?
O: Iteruj po stronach i zastosuj podpis do każdej z nich. Sprawdź klasę PagesSetup w dokumentacji GroupDocs, aby kontrolować, które strony mają być podpisane.

P: Co zrobić, gdy mój skaner nie odczytuje wygenerowanego kodu?
O: Najpierw zweryfikuj, czy skaner obsługuje wybrany typ kodu. Następnie zwiększ rozmiar kodu — najczęstsze problemy wynikają z zbyt małych pasków. Celuj w co najmniej 1 cal (2,54 cm) szerokości dla pewnego odczytu.

Dodatkowe zasoby

Dokumentacja:

Pobieranie i licencjonowanie:

Społeczność i wsparcie:


Ostatnia aktualizacja: 2026-07-20
Testowane z: GroupDocs.Signature 23.12 (Java)
Autor: 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);

Powiązane samouczki