Πώς να υπογράψετε PDF σε Java – Πλήρης Οδηγός Φόρτωσης Πιστοποιητικού και Υπογραφής Εγγράφου

Εισαγωγή

Ας το παραδεχτούμε—το 2025, αν εξακολουθείτε να στέλνετε έγγραφα με email για υγρές υπογραφές, πιθανότατα χάνετε χρόνο, χρήματα και ίσως ακόμη και πελάτες. Πώς να υπογράψετε PDF σε Java δεν είναι πια μια προαιρετική δεξιότητα· είναι μια βασική απαίτηση για ασφαλείς, αυτοματοποιημένες ροές εργασίας σε χρηματοοικονομικό, υγειονομικό, νομικό τομέα και σε κάθε βιομηχανία που εκτιμά την ταχύτητα και τη συμμόρφωση.

Η υλοποίηση ψηφιακών υπογραφών σε Java μπορεί να φαίνεται δύσκολη, αλλά με το GroupDocs.Signature μπορείτε να χωρίσετε το πρόβλημα σε δύο λογικά βήματα: φόρτωση πιστοποιητικών από keystore και υπογραφή του εγγράφου. Αυτό το tutorial σας οδηγεί και στα δύο βήματα, εξηγεί γιατί κάθε κομμάτι είναι σημαντικό και σας παρέχει κώδικα έτοιμο για παραγωγή που μπορείτε να ενσωματώσετε σε μια πραγματική εφαρμογή.

Θα ολοκληρώσετε αυτόν τον οδηγό με σαφή κατανόηση των:

  • Πώς να φορτώσετε ένα ψηφιακό πιστοποιητικό από ένα Java keystore ή το Windows Certificate Store.
  • Πώς να υπογράψετε ένα PDF (ή άλλες υποστηριζόμενες μορφές) προγραμματιστικά χρησιμοποιώντας το GroupDocs.Signature.
  • Καλών πρακτικών ασφαλείας, κοινών παγίδων και συμβουλών αντιμετώπισης προβλημάτων.

Ας υπογράψουμε τα έγγραφά σας με ασφάλεια!

Γρήγορες Απαντήσεις

  • Ποια βιβλιοθήκη χειρίζεται την υπογραφή PDF; GroupDocs.Signature for Java.
  • Ποια έκδοση Java απαιτείται; JDK 8 ή νεότερη· προτείνεται JDK 11+ για καλύτερη απόδοση.
  • Μπορώ επίσης να υπογράψω DOCX και XLSX; Ναι – το ίδιο API λειτουργεί για πάνω από 50 τύπους αρχείων.
  • Χρειάζομαι άδεια για παραγωγή; Απαιτείται έγκυρη άδεια GroupDocs.Signature για χρήση σε παραγωγή.
  • Υποστηρίζεται streaming για μεγάλα PDF; Ναι – ενεργοποιήστε τη λειτουργία streaming για υπογραφή αρχείων πολλαπλών εκατοντάδων σελίδων χωρίς φόρτωση ολόκληρου του αρχείου στη μνήμη.

Τι είναι η ψηφιακή υπογραφή σε Java;

Η έννοια DigitalSignature αντιπροσωπεύει μια κρυπτογραφική απόδειξη ότι ένα έγγραφο δημιουργήθηκε ή εγκρίθηκε από συγκεκριμένο οντότητα. Στη Java, μια ψηφιακή υπογραφή συνδυάζει ένα ιδιωτικό κλειδί (διατηρείται μυστικό) με ένα δημόσιο πιστοποιητικό (κοινόχρηστο) για να εξασφαλίσει αυθεντικότητα, ακεραιότητα και μη αποποίηση του υπογεγραμμένου αρχείου.

Γιατί να χρησιμοποιήσετε το GroupDocs.Signature για Java;

Το GroupDocs.Signature υποστηρίζει πάνω από 50 μορφές εισόδου και εξόδου (PDF, DOCX, XLSX, PPTX, HTML, εικόνες κ.λπ.) και μπορεί να επεξεργαστεί έγγραφα έως 200 MB σε λειτουργία streaming, διατηρώντας τη χρήση μνήμης κάτω από 50 MB. Η βιβλιοθήκη παρέχει επίσης ενσωματωμένη χρονοσήμανση, οπτική απόδοση υπογραφής και συμμόρφωση με τα πρότυπα PAdES, XAdES, και CAdES—κάτι που την καθιστά πλήρη λύση υπογραφής επιχειρησιακού επιπέδου.

Προαπαιτούμενα

  • Java Development Kit 8 ή νεότερο (συνιστάται JDK 11+).
  • GroupDocs.Signature for Java έκδοση 23.12 ή νεότερη.
  • Ένα ψηφιακό πιστοποιητικό σε μορφή .pfx/.p12 ή πρόσβαση στο Windows Certificate Store.
  • Ένα IDE όπως IntelliJ IDEA, Eclipse ή VS Code με επεκτάσεις Java.
  • Βασική εξοικείωση με Java I/O και έννοιες PKI.

Ρύθμιση του GroupDocs.Signature για Java

Χρήση Maven

Προσθέστε την ακόλουθη εξάρτηση στο αρχείο pom.xml:

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

Το Maven θα κατεβάσει αυτόματα τη βιβλιοθήκη και όλες τις εξαρτήσεις της.

Χρήση Gradle

Αν προτιμάτε Gradle, συμπεριλάβετε αυτό το απόσπασμα στο build.gradle:

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

Άμεση Λήψη

Μπορείτε επίσης να κατεβάσετε το JAR απευθείας από τις GroupDocs.Signature for Java releases και να το προσθέσετε χειροκίνητα στο classpath. Θυμηθείτε να διατηρείτε το JAR ενημερωμένο για να επωφελείστε από τις διορθώσεις ασφαλείας.

Βήματα Απόκτησης Άδειας

  • Δωρεάν Δοκιμή: Πλήρης λειτουργικότητα με περιορισμούς αξιολόγησης (υδατογραφήματα).
  • Προσωρινή Άδεια: Επεκτείνει την περίοδο δοκιμής χωρίς περιορισμούς.
  • Αγορά: Απαιτείται για παραγωγή· οι άδειες διατίθενται ανά προγραμματιστή, ανά χώρο ή OEM.

Βασική Αρχικοποίηση και Ρύθμιση

Η κλάση Signature είναι το κύριο σημείο εισόδου του GroupDocs.Signature για όλες τις λειτουργίες υπογραφής. Δημιουργείτε μια παρουσία, περνάτε το αρχείο προέλευσης και κατόπιν καλείτε τη μέθοδο sign.

import com.groupdocs.signature.Signature;

// Initialize Signature object with your document path
Signature signature = new Signature("path/to/your/document.pdf");

Σημαντική σημείωση: Χρησιμοποιείτε πάντα ένα μπλοκ try‑with‑resources ή κλείστε ρητά το αντικείμενο Signature για να απελευθερώσετε τους χειριστές αρχείων και να αποφύγετε διαρροές μνήμης.

try (Signature signature = new Signature("path/to/your/document.pdf")) {
    // Your signing code here
} // Auto-closes and releases resources

Δυνατότητα 1: Φόρτωση Ψηφιακών Υπογραφών από το Κατάστημα Πιστοποιητικών

Πώς να φορτώσετε το keystore σε Java;

Το KeyStore είναι ένα API ασφαλείας της Java που αποθηκεύει κρυπτογραφικά κλειδιά και πιστοποιητικά. Φορτώστε το πιστοποιητικό σας από ένα Java keystore (.jks, .p12, .pfx) δημιουργώντας μια παρουσία KeyStore, φορτώνοντας το αρχείο με τον κωδικό του και ανακτώντας την καταχώρηση του ιδιωτικού κλειδιού. Αυτή η προσέγγιση λειτουργεί σε οποιοδήποτε OS και σας δίνει πλήρη έλεγχο του κύκλου ζωής του πιστοποιητικού.

KeyStore ks = KeyStore.getInstance("PKCS12");
try (FileInputStream fis = new FileInputStream("mycert.p12")) {
    ks.load(fis, "password".toCharArray());
}

Το παραπάνω απόσπασμα δείχνει τα βασικά βήματα: δημιουργία του keystore, φόρτωση του ρεύματος αρχείου και παροχή του κωδικού. Μετά τη φόρτωση, μπορείτε να εξάγετε ένα PrivateKey και την αντίστοιχη αλυσίδα πιστοποιητικών για υπογραφή.

Εισαγωγή Απαιτούμενων Κλάσεων

Πρώτα, εισάγετε τις κλάσεις που απαιτούνται για αλληλεπίδραση με το Windows Certificate Store και το GroupDocs.Signature:

import com.groupdocs.signature.domain.signatures.DigitalSignature;
import java.util.ArrayList;
import java.util.List;

Δημιουργία της Κλάσης LoadDigitalSignatures

Η κλάση LoadDigitalSignatures περιλαμβάνει τη λογική για σάρωση του Windows Certificate Store και επιστροφή έτοιμων προς χρήση πιστοποιητικών.

public class LoadDigitalSignatures {
    public List<DigitalSignature> run() {
        List<DigitalSignature> signatures = new ArrayList<>();
        try {
            // Load digital signatures from 'My' certificate store.
            List<DigitalSignature> signaturesFromStore = DigitalSignature.loadDigitalSignatures(StoreName.My);
            signatures.addAll(signaturesFromStore);
        } catch (Exception e) {
            System.out.println("Error loading certificates: " + e.getMessage());
        }
        return signatures;
    }
}

Τι συμβαίνει στην πραγματικότητα;

  • StoreName.My λέει στο Windows να ψάξει στο Personal store, όπου βρίσκονται τα πιστοποιητικά χρήστη με ιδιωτικά κλειδιά.
  • Η loadDigitalSignatures() διατρέχει κάθε καταχώρηση, ελέγχει αν υπάρχει ιδιωτικό κλειδί και τυλίγει το αποτέλεσμα σε ένα αντικείμενο DigitalSignature που μπορεί να καταναλώσει το GroupDocs.Signature.
  • Η μέθοδος επιστρέφει μια List<DigitalSignature> που περιέχει κάθε χρησιμοποιήσιμο πιστοποιητικό.

Πότε να χρησιμοποιήσετε αυτήν την προσέγγιση;
Ιδανική για εφαρμογές desktop ή intranet σε Windows όπου τα πιστοποιητικά διαχειρίζονται κεντρικά μέσω Active Directory. Για υπηρεσίες πολλαπλών πλατφορμών, προτιμήστε τη φόρτωση από αρχείο .pfx (δείτε το παράδειγμα keystore παραπάνω).

Συμβουλή: Πάντα ελέγχετε ότι η επιστρεφόμενη λίστα δεν είναι κενή· μια κενή λίστα συνήθως σημαίνει ότι ο χρήστης δεν διαθέτει πιστοποιητικό υπογραφής ή η εφαρμογή δεν έχει δικαίωμα ανάγνωσης του καταστήματος.

Δυνατότητα 2: Υπογραφή Εγγράφου με Ψηφιακή Υπογραφή

Πώς να υπογράψετε PDF χρησιμοποιώντας το GroupDocs.Signature;

Δημιουργήστε μια παρουσία Signature για το πηγαίο PDF, συνδέστε το φορτωμένο DigitalSignature, ρυθμίστε προαιρετική οπτική εμφάνιση και καλέστε sign. Η μέθοδος γράφει ένα νέο υπογεγραμμένο αρχείο διατηρώντας το αρχικό περιεχόμενο. Η προκύπτουσα υπογραφή συμμορφώνεται με τα πρότυπα PAdES, εξασφαλίζοντας νομική αποδεκτικότητα και ανίχνευση παραποίησης σε όλους τους PDF viewers.

Signature signature = new Signature("sample.pdf");
DigitalSignature sign = loadSignatures.get(0); // choose the first available certificate
SignOptions options = new SignOptions();
options.setSignature(sign);
options.setLeft(100);
options.setTop(100);
options.setWidth(200);
options.setHeight(50);
signature.sign("signed_output.pdf", options);

Εισαγωγή Απαιτούμενων Κλάσεων

Πρόσθετες εισαγωγές απαιτούνται για επιλογές υπογραφής και διαχείριση του αρχείου εξόδου:

import com.groupdocs.signature.Signature;
import com.groupdocs.signature.domain.signatures.DigitalSignature;
import com.groupdocs.signature.options.sign.DigitalSignOptions;
import java.io.File;
import java.security.KeyStore;

Δημιουργία της Κλάσης SignDocumentWithDigital

Αυτή η κλάση συνδέει τη φόρτωση πιστοποιητικών με την υπογραφή εγγράφων, επαναλαμβάνοντας τη διαδικασία για όλα τα διαθέσιμα πιστοποιητικά ώστε να δείξει υπογραφή σε batch.

public class SignDocumentWithDigital {
    public void run(String documentPath) {
        // Load digital signatures from the certificate store
        List<DigitalSignature> signatures = new LoadDigitalSignatures().run();
        
        // Counter to create unique output files for each certificate
        int signatureNumber = 0;
        
        for (DigitalSignature digitalSignature : signatures) {
            signatureNumber++;
            String outputFilePath = new File("YOUR_OUTPUT_DIRECTORY", 
                "signed_document_" + signatureNumber + ".pdf").getPath();
            
            try (Signature signature = new Signature(documentPath)) {
                // Configure signing options
                DigitalSignOptions options = new DigitalSignOptions();
                options.setSignature(digitalSignature);
                
                // Optional: Add visible signature appearance
                options.setLeft(100);
                options.setTop(100);
                options.setWidth(200);
                options.setHeight(100);
                
                // Sign the document
                signature.sign(outputFilePath, options);
                System.out.println("Document signed successfully: " + outputFilePath);
                
            } catch (Exception e) {
                System.err.println("Error signing with certificate " + 
                    signatureNumber + ": " + e.getMessage());
            }
        }
    }
}

Κατανόηση της Ροής Κώδικα

  1. Φόρτωση Πιστοποιητικών: Καλεί το LoadDigitalSignatures για ανάκτηση όλων των χρησιμοποιήσιμων πιστοποιητικών.
  2. Επανάληψη πάνω στα Πιστοποιητικά: Χρήσιμο για δοκιμές ή προσφορά επιλογής υπογραφής στον χρήστη.
  3. Διαχείριση Εξόδου: Δημιουργεί μοναδικό όνομα αρχείου για κάθε υπογεγραμμένο έγγραφο ώστε να μην αντικαθιστά υπάρχοντα αρχεία.
  4. Διαμόρφωση Υπογραφής: Ορίζει το ψηφιακό πιστοποιητικό και προαιρετικές οπτικές παραμέτρους.
  5. Εκτέλεση Υπογραφής: Η κλήση sign() δημιουργεί ένα νέο PDF με ενσωματωμένη κρυπτογραφική υπογραφή.

Πότε να χρησιμοποιήσετε αυτό το μοτίβο;
Τέλειο για batch processing (π.χ. υπογραφή χιλιάδων τιμολογίων κατά τη νύχτα) ή εργασίες πολλαπλών υπογραφών όπου διάφορα μέρη πρέπει να προσθέσουν την ψηφιακή τους υπογραφή στο ίδιο έγγραφο.

Κοινά Προβλήματα και Λύσεις

Πρόβλημα 1: «Το Κατάστημα Πιστοποιητικών δεν Βρέθηκε» ή Κενή Λίστα Πιστοποιητικών

Άμεση απάντηση: Επαληθεύστε ότι υπάρχει ένα πιστοποιητικό υπογραφής με ιδιωτικό κλειδί στο Windows Personal store, βεβαιωθείτε ότι η εφαρμογή εκτελείται υπό λογαριασμό χρήστη με δικαίωμα ανάγνωσης, και μεταβείτε στη φόρτωση από keystore σε μη‑Windows πλατφόρμες.

Εξήγηση: Η μέθοδος loadDigitalSignatures() επιστρέφει κενή λίστα όταν δεν βρεθούν κατάλληλα πιστοποιητικά. Ανοίξτε το certmgr.msc για να επιβεβαιώσετε την παρουσία πιστοποιητικού με εικονίδιο κλειδιού και ελέγξτε την τοποθεσία του καταστήματος (CurrentUser vs. LocalMachine). Σε Linux/macOS, αντικαταστήστε την κλήση καταστήματος με φόρτωση keystore όπως φαίνεται παραπάνω.

Πρόβλημα 2: «Απαγορεύεται η Πρόσβαση στο Ιδιωτικό Κλειδί»

Άμεση απάντηση: Εγκαταστήστε το πιστοποιητικό στο κατάστημα CurrentUser, χορηγήστε στον χρήστη δικαιώματα ανάγνωσης/εγγραφής στο ιδιωτικό κλειδί μέσω του Certificate Manager, και αποφύγετε τη χρήση μη εξαγώγιμων κλειδιών για δοκιμές.

Εξήγηση: Τα σφάλματα πρόσβασης στο ιδιωτικό κλειδί προέρχονται συχνά από το ότι το κλειδί έχει χαρακτηριστεί ως μη εξαγώγιμο ή το πιστοποιητικό βρίσκεται στο LocalMachine store όπου η διαδικασία δεν έχει τα απαραίτητα δικαιώματα. Επανεισαγάγετε το πιστοποιητικό με τα κατάλληλα δικαιώματα ή χρησιμοποιήστε αρχείο .pfx όπου ελέγχετε τον κωδικό.

Πρόβλημα 3: Το Έξοδος Έγγραφο Είναι Κατεστραμμένο ή Δεν Ανοίγει

Άμεση απάντηση: Βεβαιωθείτε ότι ο φάκελος εξόδου υπάρχει, περιέχει μόνο έγκυρους χαρακτήρες αρχείου, και ότι κανή διεργασία δεν κλειδώνει το αρχείο κατά την υπογραφή.

Εξήγηση: Η κατεστραμμένη έξοδος μπορεί να προκύψει αν η διαδρομή περιέχει μη έγκυρους χαρακτήρες, ο δίσκος είναι γεμάτος ή το πηγαίο αρχείο είναι ανοιχτό σε άλλη διεργασία. Χρησιμοποιήστε File.getParentFile().mkdirs() πριν τη υπογραφή και κλείστε τυχόν αναγνώστες που κρατούν το αρχείο.

Πρόβλημα 4: Προβλήματα Απόδοσης με Μεγάλα Έγγραφα

Άμεση απάντηση: Ενεργοποιήστε τη λειτουργία streaming (Signature.setStreaming(true)) και επεξεργαστείτε τα έγγραφα σε παράλληλα batch μόνο αφού διασφαλίσετε την ασφαλή πρόσβαση στο κατάστημα πιστοποιητικών.

Εξήγηση: Η φόρτωση ενός ολόκληρου PDF 200 σελίδων στη μνήμη μπορεί να εξαντλήσει το heap. Το streaming διαβάζει και γράφει τμήματα του αρχείου, κρατώντας τη μνήμη χαμηλή. Η παράλληλη επεξεργασία επιταχύνει τα batch jobs αλλά απαιτεί προσεκτικό χειρισμό κοινόχρηστων πόρων.

Καλές Πρακτικές Ασφαλείας

  1. Προστασία Ιδιωτικών Κλειδιών – Αποθηκεύστε τα σε Hardware Security Module (HSM) ή χρησιμοποιήστε το Windows Credential Manager. Ποτέ μην ενσωματώνετε κωδικούς στο πηγαίο κώδικα.
  2. Επαλήθευση Πιστοποιητικών – Ελέγξτε ημερομηνίες λήξης, αλυσίδα εμπιστοσύνης, κατάσταση ανάκλησης και επεκτάσεις χρήσης κλειδιού πριν την υπογραφή.
  3. Χρήση Ισχυρών Αλγορίθμων – Προτιμήστε SHA‑256 με RSA 2048‑bit ή ECDSA 256‑bit κλειδιά· αποφύγετε MD5 ή SHA‑1.
  4. Ασφαλής Μετάδοση – Μεταφέρετε έγγραφα μέσω HTTPS και επιβάλετε έλεγχο πρόσβασης βάσει ρόλων στα υπογεγραμμένα αρχεία.
  5. Καταγραφή Συμβάντων – Καταγράψτε τα γεγονότα υπογραφής με χρονική σήμανση, αναγνωριστικό χρήστη και αποτύπωμα πιστοποιητικού για συμμόρφωση.
  6. Διαχείριση Κωδικών – Δέχετε κωδικούς μέσω ασφαλούς εισόδου (π.χ. Console.readPassword()), εκκαθαρίζετε τους πίνακες χαρακτήρων μετά τη χρήση και ποτέ μην τους καταγράφετε.

Πότε να Χρησιμοποιήσετε αυτήν την Προσέγγιση

Ιδανικά Σενάρια

  • Διαχείριση Εγγράφων Επιχειρήσεων – Αυτοματοποιήστε την υπογραφή συμβάσεων, τιμολογίων και αναφορών συμμόρφωσης.
  • Υγειονομική Περίθαλψη – Υπογράψτε ηλεκτρονικά αρχεία υγείας (EHR) για να πληροίτε τις απαιτήσεις HIPAA.
  • Νομική Τεχνολογία – Παρέχετε νομικά δεσμευτικές υπογραφές για έγγραφα που υποβάλλονται στο δικαστήριο.
  • Χρηματοοικονομικές Υπηρεσίες – Ασφαλίστε συμβάσεις δανείων, φόρμες KYC και αρχεία συναλλαγών.

Καταστάσεις όπου μια άλλη λύση μπορεί να ταιριάζει καλύτερα

  • Απλές χειρόγραφες υπογραφές – Χρησιμοποιήστε υπογραφές βασισμένες σε εικόνα αντί για κρυπτογραφικές.
  • Πραγματικός‑χρόνος πολλαπλών μερών – Εξετάστε SaaS πλατφόρμες e‑signature όπως DocuSign για ορχήστρωση ροής εργασίας.
  • Υπογραφές με αγκίστρωση blockchain – Χρησιμοποιήστε εξειδικευμένες βιβλιοθήκες αν χρειάζεστε αμετάβλητη απόδειξη στο blockchain.
  • Mobile‑first UX – Τα εγγενή SDK για iOS/Android μπορεί να προσφέρουν πιο ομαλή εμπειρία χρήστη.

Συχνές Ερωτήσεις

Ε: Μπορώ να επαληθεύσω μια ψηφιακή υπογραφή μετά την υπογραφή;
Α: Ναι – χρησιμοποιήστε Signature.verify("signed_output.pdf") που επιστρέφει ένα VerificationResult με ένδειξη εγκυρότητας, λεπτομέρειες πιστοποιητικού υπογράφοντα και τυχόν παραβιάσεις.

Ε: Υποστηρίζει το GroupDocs.Signature χρονοσήμανση;
Α: Απόλυτα. Μπορείτε να προσθέσετε URL TSA (Time‑Stamp Authority) μέσω options.setTimestampServerUrl("https://tsa.example.com") για δημιουργία αξιόπιστης χρονοσήμανσης.

Ε: Ποια αρχεία μπορώ να υπογράψω εκτός του PDF;
Α: Πάνω από 50 μορφές, συμπεριλαμβανομένων DOCX, XLSX, PPTX, HTML, PNG, JPEG, TIFF κ.λπ. Απλώς αλλάξτε την επέκταση αρχείου στις διαδρομές εισόδου και εξόδου.

Ε: Πώς υπογράφω ένα έγγραφο αόρατα;
Α: Παραλείψτε τις μεθόδους οπτικής τοποθέτησης (setLeft, setTop, setWidth, setHeight). Η υπογραφή θα είναι μόνο κρυπτογραφική και δεν θα εμφανίζεται στη σελίδα.

Ε: Υπάρχει όριο μεγέθους εγγράφου;
Α: Με ενεργοποιημένο streaming, μπορείτε να υπογράψετε αρχεία μεγαλύτερα από 500 MB· η κατανάλωση μνήμης παραμένει κάτω από 100 MB.

Συμπέρασμα

Έχετε πλέον έναν πλήρη, έτοιμο για παραγωγή χάρτη για την υλοποίηση του πώς να υπογράψετε PDF έγγραφα σε Java χρησιμοποιώντας το GroupDocs.Signature. Από τη φόρτωση πιστοποιητικών—είτε από το Windows Certificate Store είτε από ένα cross‑platform keystore—μέχρι την εφαρμογή ορατών και αόρατων ψηφιακών υπογραφών, τα αποσπάσματα κώδικα και οι οδηγίες βέλτιστων πρακτικών καλύπτουν όλα όσα χρειάζεστε για την κατασκευή ασφαλών, συμμορφωμένων ροών εργασίας υπογραφής.

Επόμενα βήματα; Δοκιμάστε την υπογραφή μίας παρτίδας πραγματικών τιμολογίων, ενσωματώστε χρονοσήμανση για νομική βεβαιότητα και εξερευνήστε το εκτεταμένο API για προσαρμοσμένες εμφανίσεις υπογραφής. Καλή προγραμματιστική δουλειά, και απολαύστε την ηρεμία που προσφέρει η κρυπτογραφικά προστατευμένη τεκμηρίωση!


Τελευταία Ενημέρωση: 2026-06-06
Δοκιμασμένο Με: GroupDocs.Signature for Java 23.12 (τελευταία έκδοση τη στιγμή της συγγραφής)
Συγγραφέας: GroupDocs

Documentation | API Reference | Download Latest Version | Purchase License | Free Trial | Support Forum | Temporary License

{< blocks/products/products-backtop-button >} {< /blocks/products/pf/main-wrap-class >} {< /blocks/products/pf/main-container >} {< /blocks/products/pf/tutorial-page-section >}

Σχετικά Μαθήματα