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.Code128to 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:
- Support Forum - Aktywna społeczność z inżynierami GroupDocs
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);