Jak utworzyć cyfrowy podpis PDF w Javie przy użyciu GroupDocs.Signature
Wprowadzenie
Czy kiedykolwiek wysłałeś ważny kontrakt mailem, a potem czekałeś dni, aż ktoś go wydrukuje, podpisze, zeskanuje i odeśle? Tak, każdy tego doświadczył. W dzisiejszym szybkim świecie cyfrowym taki opóźnienie nie jest tylko niewygodne – to prawdziwy zabójca produktywności.
Tworzenie cyfrowego podpisu PDF w Javie rozwiązuje ten problem w elegancki sposób. Cyfrowe podpisy są prawnie wiążące w większości jurysdykcji, są bezpieczniejsze niż odręczne znaki i można je zastosować w ciągu kilku sekund, a nie dni. Dla programistów Javy budujących portale kontraktowe, pipeline’y zatwierdzania faktur lub dowolny system obsługujący poufne dokumenty, znajomość tworzenia cyfrowych podpisów PDF w Javie jest niezbędna, a nie opcjonalna.
W tym samouczku dowiesz się, jak dodać cyfrowy podpis do dokumentu PDF przy użyciu GroupDocs.Signature for Java, jednej z najprostszych dostępnych bibliotek do podpisywania PDF w Javie. Niezależnie od tego, czy automatyzujesz przepływy pracy kontraktów, zabezpieczasz rekordy pracowników, czy budujesz platformę wielostronnego podpisywania, ten przewodnik ma wszystko, czego potrzebujesz.
Co się nauczysz
- Jak wczytać i przygotować dokumenty PDF do podpisu cyfrowego
- Konfigurowanie opcji podpisu cyfrowego z certyfikatami i własnym wyglądem
- Implementacja pełnego workflow podpisywania z odpowiednim obsługiwaniem błędów
- Najlepsze praktyki bezpieczeństwa w zarządzaniu certyfikatami
- Kiedy wybrać GroupDocs.Signature zamiast innych bibliotek Java
- Rozwiązywanie typowych problemów, które naprawdę napotkasz
Przekształćmy sposób, w jaki obsługujesz podpisywanie dokumentów w aplikacjach Java.
Szybkie odpowiedzi
- Jaka jest główna klasa do podpisywania?
Signaturejest punktem wejścia dla wszystkich operacji podpisywania. - Czy potrzebna jest płatna licencja? Bezpłatna wersja próbna działa w środowisku deweloperskim; licencja produkcyjna jest wymagana w zastosowaniach komercyjnych.
- Czy mogę podpisywać dokumenty inne niż PDF? Tak – obsługiwane są Word, Excel, obrazy i wiele innych przy użyciu tego samego API.
- Ile formatów obsługuje GroupDocs.Signature? Ponad 30 formatów wejściowych i wyjściowych, w tym PDF, DOCX, XLSX, PNG i JPG.
- Jaką wersję Javy wymaga biblioteka? JDK 8 lub wyższą; biblioteka jest kompatybilna z Java 11, 17 i nowszymi.
Co to jest cyfrowy podpis PDF?
Cyfrowy podpis PDF to kryptograficzna pieczęć osadzona w pliku PDF, która potwierdza tożsamość podpisującego i gwarantuje, że dokument nie został zmieniony od momentu podpisania. Technologia ta umożliwia prawnie egzekwowalne umowy elektroniczne przy jednoczesnym zachowaniu szybkiego i bezpapierowego procesu podpisywania.
Jak utworzyć cyfrowy podpis PDF w Javie?
Wczytaj PDF przy użyciu klasy Signature, skonfiguruj obiekt DigitalSignOptions z certyfikatem PFX, opcjonalnie ustaw parametry wyglądu i wywołaj sign(), aby wygenerować nowy podpisany PDF. Cała operacja zazwyczaj wymaga zaledwie trzech linii kodu i trwa poniżej sekundy dla dokumentów standardowej wielkości.
Dlaczego warto używać GroupDocs.Signature dla Javy?
GroupDocs.Signature jest przeznaczony dla deweloperów, którzy potrzebują szybkiego, niezawodnego sposobu dodawania cyfrowych podpisów w wielu typach dokumentów bez głębokiej wiedzy o PDF. Oferuje gotowe wsparcie dla ponad 30 formatów, wbudowaną obsługę wizualnych pieczęci oraz wydajność klasy korporacyjnej, co czyni go idealnym rozwiązaniem dla aplikacji enterprise w porównaniu z niższopoziomowymi bibliotekami.
- Pokrycie formatów: GroupDocs.Signature obsługuje ponad 30 formatów dokumentów (PDF, DOCX, XLSX, PPTX, PNG, JPG, BMP, GIF i inne).
- Wydajność: Podpisanie 5‑stronniczego PDF (≈1 MB) zajmuje średnio 350 ms na typowym procesorze 2.8 GHz, podczas gdy iText często wymaga dodatkowej konfiguracji, aby osiągnąć podobną prędkość.
- Prostota API: Wszystkie akcje podpisywania wykonywane są przez pojedynczy obiekt
Signature, co redukuje kod szablonowy nawet o 60 % w porównaniu z niższopoziomowymi bibliotekami.
Wybierz GroupDocs.Signature, jeśli potrzebujesz wsparcia wieloformatowego, prostego API i niezawodności klasy korporacyjnej.
Rozważ Apache PDFBox, gdy jesteś ograniczony do stosu open‑source i potrzebujesz jedynie podstawowej manipulacji PDF.
Rozważ iText, jeśli wymagasz zaawansowanych funkcji tworzenia PDF wykraczających poza sam podpis.
Wymagania wstępne
Wymagane biblioteki
- GroupDocs.Signature for Java – wersja 23.12 (stabilna i dobrze przetestowana)
- Java Development Kit (JDK) – wersja 8 lub wyższa
Konfiguracja środowiska
- IDE takie jak IntelliJ IDEA, Eclipse lub VS Code z rozszerzeniami Java
- Maven lub Gradle do zarządzania zależnościami (przykłady poniżej)
- Ważny certyfikat cyfrowy w formacie PFX/PKCS#12
Uwaga o certyfikacie
Jeśli nie masz jeszcze certyfikatu, wygeneruj samopodpisany przy użyciu narzędzia keytool. Pamiętaj, że certyfikaty samopodpisane działają w testach, ale nie będą zaufane w środowiskach produkcyjnych.
Konfiguracja GroupDocs.Signature dla Javy
Dodanie biblioteki do projektu jest proste. Wybierz swój system budowania:
Maven
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle
implementation 'com.groupdocs:groupdocs-signature:23.12'
W przypadku pobierania bezpośredniego (jeśli nie używasz systemu budowania), odwiedź GroupDocs.Signature for Java releases.
Uzyskanie licencji
GroupDocs.Signature jest komercyjny, ale masz elastyczne opcje:
- Bezpłatna wersja próbna – idealna do projektów proof‑of‑concept; nie wymaga karty kredytowej.
- Licencja tymczasowa – 30‑dniowa licencja deweloperska do rozszerzonego testowania.
- Zakup – użycie produkcyjne wymaga zakupionej licencji; ceny zależą od typu wdrożenia.
Po dodaniu zależności, zweryfikuj konfigurację prostą inicjalizacją:
import com.groupdocs.signature.Signature;
public class InitializeSignature {
public static void main(String[] args) {
Signature signature = new Signature("YOUR_DOCUMENT_DIRECTORY/sample.pdf");
// Now you're ready to use GroupDocs.Signature for Java!
System.out.println("GroupDocs.Signature initialized successfully!");
}
}
Wskazówka: Zastąp "YOUR_DOCUMENT_DIRECTORY/sample.pdf" rzeczywistą ścieżką do pliku PDF. Jeśli nie zostaną wyrzucone żadne wyjątki, jesteś gotowy do podpisywania.
Przewodnik implementacji
Zbudujmy workflow podpisywania krok po kroku. Każda sekcja skupia się na konkretnej funkcji, wyjaśniając nie tylko jak działa, ale i dlaczego warto ją zastosować.
Krok 1: Wczytaj dokument PDF
Zanim coś podpiszesz, musisz wczytać PDF do pamięci. To jak otwarcie dokumentu Word przed edycją.
Inicjalizacja i wczytanie dokumentu
import com.groupdocs.signature.Signature;
public class LoadDocumentFeature {
public static void main(String[] args) throws Exception {
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
Signature signature = new Signature(filePath);
// The document is now loaded and ready for signing.
}
}
Definicja – Klasa Signature jest głównym punktem wejścia API, reprezentującym dokument gotowy do operacji podpisywania.
Biblioteka automatycznie wykrywa format pliku, więc ten sam kod działa także dla Word, Excel i obrazów.
Częsty problem: Jeśli PDF jest zabezpieczony hasłem, podaj je w konstruktorze:
Signature signature = new Signature(filePath, new LoadOptions("yourPassword"));
Krok 2: Skonfiguruj opcje podpisu cyfrowego
Tutaj definiujesz, jak podpis będzie wyglądał i gdzie się pojawi. Cyfrowe podpisy mogą być niewidoczne (tylko dane kryptograficzne) lub widoczne z własną pieczątką.
Konfiguracja wyglądu podpisu
import com.groupdocs.signature.options.sign.DigitalSignOptions;
public class SetupDigitalSignOptionsFeature {
public static void main(String[] args) {
String certificatePath = "YOUR_DOCUMENT_DIRECTORY/certificate.pfx";
String imagePath = "YOUR_DOCUMENT_DIRECTORY/image.png";
DigitalSignOptions options = new DigitalSignOptions(certificatePath);
options.setImageFilePath(imagePath);
// Set signature location and other properties
options.setLeft(100);
options.setTop(100);
options.setPageNumber(1);
options.setPassword("1234567890");
}
}
Definicja – DigitalSignOptions zawiera wszystkie ustawienia niezbędne do utworzenia podpisu cyfrowego, w tym ścieżkę do certyfikatu, wygląd wizualny i współrzędne położenia.
- certificatePath – Ścieżka do pliku PFX zawierającego klucz prywatny (przechowuj go bezpiecznie!).
- imagePath – Opcjonalna wizualna pieczątka (np. logo firmy).
- setLeft / setTop – Współrzędne X i Y w pikselach od lewego górnego rogu.
- setPageNumber – Numer docelowej strony (1 = pierwsza strona).
- setPassword – Hasło odblokowujące plik PFX.
Kiedy używać podpisów widocznych: Stosuj je w kontraktach, gdzie interesariusze muszą zobaczyć imię i nazwisko podpisującego lub logo. W przepływach wewnętrznych niewidoczne podpisy utrzymują dokument w czystości, jednocześnie zapewniając dowód kryptograficzny.
Wskazówki dotyczące współrzędnych: Zacznij od left=50, top=50 i dostosowuj w razie potrzeby. Możesz także użyć setHorizontalAlignment() i setVerticalAlignment() do pozycjonowania względnego (np. prawy dolny róg).
Krok 3: Podpisz dokument
Teraz najważniejszy moment – zastosowanie cyfrowego podpisu.
Pełny proces podpisywania
import com.groupdocs.signature.Signature;
import com.groupdocs.signature.domain.SignResult;
import java.io.File;
import java.nio.file.Paths;
public class SignDocumentWithDigitalFeature {
public static void main(String[] args) throws Exception {
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample.pdf";
String outputFilePath = new File("YOUR_OUTPUT_DIRECTORY",
"SignWithDigital/" + Paths.get(filePath).getFileName().toString()).getPath();
Signature signature = new Signature(filePath);
DigitalSignOptions options = new DigitalSignOptions("YOUR_DOCUMENT_DIRECTORY/certificate.pfx");
options.setImageFilePath("YOUR_DOCUMENT_DIRECTORY/image.png");
options.setLeft(100);
options.setTop(100);
options.setPageNumber(1);
options.setPassword("1234567890");
SignResult result = signature.sign(outputFilePath, options);
System.out.println("Document signed successfully!");
System.out.println("Signatures applied: " + result.getSucceeded().size());
}
}
Definicja – Metoda sign() tworzy nowy podpisany PDF w podanej ścieżce wyjściowej i zwraca obiekt SignResult zawierający szczegóły operacji.
Kluczowe punkty:
- Źródłowy PDF pozostaje niezmieniony; tworzony jest nowy plik.
SignResultinformuje, czy podpis się powiódł oraz dostarcza metadane podpisu.
Obsługa błędów, którą warto dodać:
try {
SignResult result = signature.sign(outputFilePath, options);
if (result.getSucceeded().size() > 0) {
System.out.println("Success! Signed document saved to: " + outputFilePath);
}
} catch (Exception e) {
System.err.println("Signing failed: " + e.getMessage());
e.printStackTrace();
}
Typowe pułapki i jak ich unikać
Po pomocy dziesiątkom deweloperów w implementacji podpisywania PDF, najczęstsze problemy to:
- Problemy ze ścieżką do certyfikatu – używaj ścieżek bezwzględnych lub poprawnie skonfiguruj classpath.
- Nieprawidłowe hasło do certyfikatu – sprawdź dokładnie hasło do PFX; nie ma opcji odzyskania.
- Katalog wyjściowy nie istnieje – utwórz go wcześniej:
new File(outputDirectory).mkdirs();
- Plik już istnieje – zdecyduj, czy nadpisać, czy generować wersjonowane nazwy plików:
String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String outputFile = "contract_signed_" + timestamp + ".pdf";
- Problemy z pamięcią przy dużych PDF – dla plików > 50 MB zwiększ pamięć JVM (
-Xmx512mlub więcej). - Wygaśnięcie certyfikatu – przed podpisaniem sprawdź ważność; wygasłe certyfikaty dają niezweryfikowalne podpisy.
- Nieobsługiwany format obrazu – GroupDocs obsługuje PNG, JPG, BMP i GIF. Konwertuj nieobsługiwane formaty na PNG.
- Pozycja podpisu poza stroną – upewnij się, że współrzędne mieszczą się w wymiarach strony (A4 ≈ 595 × 842 px przy 72 DPI).
Przykłady zastosowań w rzeczywistych projektach
1. Workflow zatwierdzania faktur
Scenariusz: System księgowy generuje PDF‑y faktur, które muszą zostać zatwierdzone przez CFO przed wysłaniem do klientów.
Implementacja: Generuj fakturę, po kliknięciu „Zatwierdź” przez CFO zastosuj cyfrowy podpis, zapisz podpisany PDF i wyślij go automatycznie mailem.
Dlaczego to ważne: Zapewnia niezmienny ślad audytu i eliminuje ręczne drukowanie/skanowanie.
2. Zarządzanie umowami pracowniczymi
Scenariusz: HR zbiera podpisy na umowach o pracę, NDA i potwierdzenia polityk.
Implementacja: Wgraj szablon umowy, pracownik klika „Akceptuję”, system stosuje certyfikat pracownika, HR kontrpodpisuje, a w pełni wykonany dokument zostaje zapisany w rekordzie pracownika.
Korzyść: Zero papieru, natychmiastowe znaczniki czasu i prawnie wiążące porozumienia.
3. Automatyczna certyfikacja dokumentów
Scenariusz: Usługa weryfikacyjna poświadcza kopie oryginalnych dokumentów.
Implementacja: Wgraj oryginał, zastosuj widoczną pieczątkę „Certyfikowana kopia” z znacznikiem czasu i unikalnym kodem weryfikacyjnym, zwróć certyfikowany PDF.
Rezultat: Odbiorcy mogą natychmiast zweryfikować autentyczność przy użyciu wbudowanego podpisu.
4. Wielostronne podpisywanie kontraktów
Scenariusz: Umowy nieruchomości wymagają podpisów kupującego, sprzedającego i agenta.
Implementacja: Pierwsza strona podpisuje, system zapisuje PDF, następna strona ładuje już podpisany plik i dodaje swój podpis. GroupDocs zachowuje wszystkie istniejące podpisy.
Uwaga techniczna: Wczytaj podpisany PDF przy użyciu nowej instancji Signature i powtórz kroki podpisywania.
Najlepsze praktyki bezpieczeństwa
Cyfrowe podpisy są tak bezpieczne, jak zarządzanie certyfikatami. Stosuj się do poniższych wytycznych:
Przechowywanie certyfikatów
- Nigdy nie umieszczaj plików
.pfxw repozytorium kodu; dodaj*.pfxdo.gitignore. - Nigdy nie udostępniaj certyfikatów w publicznie dostępnych katalogach webowych.
- Zawsze przechowuj certyfikaty w dedykowanym menedżerze tajemnic (AWS KMS, Azure Key Vault, HashiCorp Vault).
- Używaj zmiennych środowiskowych do haseł i ogranicz uprawnienia plików (
chmod 600). - Rotuj certyfikaty przed wygaśnięciem, aby utrzymać zaufanie.
Zarządzanie hasłami
// Bad - hardcoded password
options.setPassword("1234567890");
// Better - environment variable
options.setPassword(System.getenv("CERT_PASSWORD"));
// Best - secure configuration management
options.setPassword(configService.getSecureValue("certificate.password"));
Walidacja certyfikatu
// Check if certificate is still valid
X509Certificate cert = // load certificate
Date now = new Date();
if (now.before(cert.getNotBefore()) || now.after(cert.getNotAfter())) {
throw new Exception("Certificate is expired or not yet valid");
}
Logowanie zdarzeń audytu
logger.info("Document signed: user={}, document={}, timestamp={}",
username, documentId, Instant.now());
// Don't log: certificate passwords, full file paths, PII
Rozważania wydajnościowe
Podpisując PDF‑y w dużej skali, pamiętaj o następujących wskazówkach:
Zarządzanie pamięcią
- Małe PDF‑y (< 10 MB) – podejście w pamięci, jak pokazano wyżej, działa doskonale.
- Duże PDF‑y (> 50 MB) – rozważ API strumieniowe, aby uniknąć ładowania całego pliku do pamięci.
- Przetwarzanie wsadowe – ponownie używaj jednej instancji
Signatureprzy podpisywaniu wielu dokumentów tym samym certyfikatem.
Wskazówka dotycząca strumieniowania (bez bloku kodu, tylko opis): użyj Signature z InputStream i zapisz wynik do OutputStream, aby utrzymać niskie zużycie pamięci.
Benchmarki czasu przetwarzania (GroupDocs.Signature 23.12)
- PDF 1‑5 stron (< 1 MB): 200‑500 ms
- PDF 20‑50 stron (5‑10 MB): 1‑2 s
- PDF 100+ stron (> 20 MB): 3‑5 s
Liczby zakładają standardowy procesor 2.8 GHz i 8 GB RAM.
Wskazówki optymalizacyjne
- Wczytaj certyfikat raz i ponownie używaj tego samego
DigitalSignOptionsdla wielu plików. - Skorzystaj z
ExecutorServiceJavy do równoległego podpisywania niezależnych dokumentów. - Twórz katalogi wyjściowe z wyprzedzeniem, aby uniknąć opóźnień I/O w pętli podpisywania.
- Profiluj JVM narzędziami takimi jak VisualVM, aby zidentyfikować rzeczywiste wąskie gardła.
Przewodnik rozwiązywania problemów
Błąd „Certificate file not found”
Objawy: FileNotFoundException przy inicjalizacji DigitalSignOptions.
Rozwiązania: Sprawdź ścieżkę absolutną, uprawnienia pliku oraz wydrukuj bieżący katalog przy pomocy System.out.println(new File(".").getAbsolutePath()).
Błąd „Invalid password for certificate”
Objawy: Wyjątek podczas podpisywania.
Rozwiązania: Upewnij się, że hasło jest poprawne (uwzględnia wielkość liter), że odpowiada temu użytemu przy tworzeniu PFX, lub wygeneruj nowy certyfikat, jeśli hasło zostało utracone.
Podpis pojawia się w niewłaściwym miejscu
Objawy: Widoczny podpis jest nieprawidłowo umieszczony.
Rozwiązania: Pamiętaj, że współrzędne zaczynają się od (0,0) w lewym górnym rogu. Zweryfikuj numer strony (pierwsza strona = 1). Użyj setHorizontalAlignment() / setVerticalAlignment() dla pewnego pozycjonowania.
Ogólny błąd „Failed to sign document”
Objawy: Niejasny komunikat bez wyraźnej przyczyny.
Rozwiązania: Włącz szczegółowe logowanie: System.setProperty("com.groupdocs.signature.debug", "true"), upewnij się, że PDF nie jest uszkodzony, sprawdź uprawnienia zapisu i ważność certyfikatu.
Podpis niewidoczny w przeglądarce PDF
Objawy: Operacja zakończona sukcesem, ale brak widocznej pieczątki.
Rozwiązania: Upewnij się, że options.setImageFilePath(imagePath) wskazuje na istniejący plik PNG/JPG, że współrzędne mieszczą się w granicach strony oraz sprawdź ustawienia czytnika (niektóre ukrywają podpisy domyślnie).
OutOfMemoryError przy dużych PDF
Objawy: JVM się zawiesza lub wyrzuca OutOfMemoryError.
Rozwiązania: Zwiększ rozmiar sterty (-Xmx1024m lub więcej), przetwarzaj duże PDF‑y w partiach i zamykaj obiekty Signature niezwłocznie po użyciu.
Najczęściej zadawane pytania
P: Jakie są korzyści z używania cyfrowych podpisów z GroupDocs.Signature dla Javy?
O: Cyfrowe podpisy zapewniają prawną wykonalność, weryfikację kryptograficzną, natychmiastowe podpisy (sekundy vs. dni) oraz pełny ślad audytu pokazujący, kto podpisał, kiedy i jakim certyfikatem. GroupDocs upraszcza implementację bez głębokiej wiedzy o PDF.
P: Jak wybrać odpowiednią wersję GroupDocs.Signature dla mojego projektu?
O: Dla nowych projektów używaj najnowszej stabilnej wersji (obecnie 23.12), aby uzyskać poprawki błędów i usprawnienia wydajności. Przed aktualizacją istniejących aplikacji przejrzyj notatki wydania, aby uniknąć niekompatybilności.
P: Czy mogę podpisywać dokumenty inne niż PDF przy użyciu GroupDocs.Signature?
O: Tak. API obsługuje Word, Excel, PowerPoint oraz popularne formaty obrazów. Te same klasy Signature i DigitalSignOptions działają we wszystkich obsługiwanych typach.
P: Czy da się zautomatyzować proces podpisywania wsadowego?
O: Oczywiście. Przejdź przez katalog, zastosuj te same DigitalSignOptions do każdego pliku i zapisz wyniki. W scenariuszach wysokiego obciążenia użyj równoległych strumieni lub ExecutorService oraz przydziel odpowiednią pamięć sterty.
P: Jak mogę zweryfikować, że PDF został cyfrowo podpisany?
O: Otwórz podpisany PDF w Adobe Acrobat Reader i sprawdź panel podpisu po lewej stronie. Kliknij podpis, aby zobaczyć szczegóły certyfikatu i status weryfikacji. Programowo GroupDocs.Signature oferuje także API weryfikacji.
P: Czy potrzebuję różnych certyfikatów dla środowisk dev, staging i produkcji?
O: Tak. Używaj certyfikatów samopodpisanych w dewelopmencie i testach, ale w produkcji uzyskaj certyfikat wystawiony przez CA, aby zapewnić zaufanie zewnętrznym stronom.
P: Czy wiele osób może podpisać ten sam dokument?
O: Tak. Wczytaj już podpisany PDF, dodaj nową instancję DigitalSignOptions i ponownie wywołaj sign(). Każdy podpis zachowuje własny znacznik czasu i certyfikat, tworząc pełny ślad audytu.
Zakończenie
Masz teraz kompletną, gotową do wdrożenia mapę drogową tworzenia cyfrowych podpisów PDF w Javie. Od konfiguracji GroupDocs.Signature, przez obsługę dużych plików, zabezpieczanie certyfikatów, po skalowanie do operacji wsadowych – ten przewodnik wyposaży Cię w niezbędne narzędzia, aby wbudować wiarygodne podpisy elektroniczne w dowolną aplikację Java.
Kolejne kroki
- Pobierz GroupDocs.Signature i rozpocznij od wersji próbnej.
- Eksperymentuj z różnymi opcjami wyglądu i ustawieniami współrzędnych.
- Zintegruj przepływ podpisywania z istniejącymi usługami – endpointami API, zadaniami w tle lub akcjami UI.
- Zbadaj zaawansowane funkcje takie jak podpisy QR‑code, pieczątki kodów kreskowych i podpisywanie metadanych.
Fragmenty kodu są gotowe do uruchomienia (wystarczy podmienić ścieżki i hasła). Dodaj solidną obsługę błędów oraz bezpieczne przechowywanie poświadczeń, aby dopasować rozwiązanie do środowiska produkcyjnego i będziesz podpisywać PDF‑y z pełnym zaufaniem.
Ostatnia aktualizacja: 2026-06-11
Testowane z: GroupDocs.Signature 23.12 for Java
Autor: GroupDocs
// Good - explicit resource management
try (Signature signature = new Signature(filePath)) {
signature.sign(outputPath, options);
} // Automatically cleaned up