Πώς να δημιουργήσετε υπογραφή barcode σε PDF χρησιμοποιώντας Java
Σε αυτό το tutorial, θα μάθετε πώς να δημιουργήσετε υπογραφή barcode σε αρχεία PDF χρησιμοποιώντας Java και GroupDocs.Signature. Οι υπογραφές barcode ενσωματώνουν μηχανικά αναγνώσιμα αναγνωριστικά που είναι τόσο ανιχνεύσιμα από αλλοίωση όσο και εύκολα στην σάρωση — ιδανικά για συμβάσεις, πιστοποιητικά, τιμολόγια και οποιοδήποτε έγγραφο που χρειάζεται αξιόπιστη επαλήθευση.
Γρήγορες Απαντήσεις
- Τι είναι μια υπογραφή barcode; Ένα barcode ενσωματωμένο σε PDF που αποθηκεύει δομημένα δεδομένα και μπορεί να διαβαστεί από σαρωτές ή λογισμικό.
- Ποιος τύπος barcode συνιστάται; Code128, επειδή διαχειρίζεται αλφαριθμητικά δεδομένα συμπαγώς.
- Χρειάζομαι άδεια; Μια δωρεάν δοκιμή λειτουργεί για δοκιμές· απαιτείται πλήρης άδεια για παραγωγή.
- Μπορώ να τοποθετήσω το barcode σε οποιοδήποτε μέγεθος σελίδας; Ναι—χρησιμοποιήστε τοποθέτηση βάσει ποσοστών για αυτόματη κλιμάκωση.
- Είναι το barcode βασισμένο σε διανύσματα; Ναι, προσθέτει μόνο λίγα kilobytes στο PDF και παραμένει καθαρό σε οποιαδήποτε ανάλυση.
Τι είναι μια υπογραφή barcode;
Μια υπογραφή barcode είναι ένα barcode βασισμένο σε διανύσματα ενσωματωμένο άμεσα σε μια σελίδα PDF, λειτουργώντας τόσο ως οπτικό στοιχείο όσο και ως κρυπτογραφική υπογραφή που μπορεί να επικυρωθεί αργότερα. Αποθηκεύει δομημένα δεδομένα, όπως IDs ή χρονικές σφραγίδες, και εξασφαλίζει την ακεραιότητα του εγγράφου παρέχοντας μια μηχανικά αναγνώσιμη αναφορά.
Γιατί οι υπογραφές barcode είναι σημαντικές για τα PDF σας
Οι υπογραφές barcode δίνουν στα PDF ένα συμπαγές, μηχανικά αναγνώσιμο αναγνωριστικό που μπορεί να σαρωθεί άμεσα, εξαλείφοντας την χειροκίνητη εισαγωγή δεδομένων και μειώνοντας τα σφάλματα. Επειδή ενσωματώνονται ως διανυσματικά γραφικά, παραμένουν οξυγόνα σε οποιαδήποτε ανάλυση και προσθέτουν μόνο λίγα kilobytes στο αρχείο. Αυτός ο συνδυασμός αναγνωσιμότητας, ανιχνευσιμότητας από αλλοίωση και μικρού μεγέθους τα καθιστά ιδανικά για συμβάσεις, τιμολόγια, πιστοποιητικά και οποιοδήποτε έγγραφο που απαιτεί αξιόπιστη επαλήθευση.
Εδώ είναι μια πρόκληση που πιθανώς έχετε αντιμετωπίσει: χρειάζεται να προσθέσετε μοναδικά αναγνωριστικά σε PDF που είναι τόσο μηχανικά αναγνώσιμα όσο και ανιχνεύσιμα από αλλοίωση. Ίσως εργάζεστε σε σύστημα διαχείρισης εγγράφων, επεξεργάζεστε πιστοποιητικά ή διαχειρίζεστε συμβάσεις που χρειάζονται επαλήθευση στο μέλλον.
Ακριβώς εδώ έρχονται οι υπογραφές barcode. Σε αντίθεση με απλά κείμενα σφραγίδας, τα barcode σας επιτρέπουν να ενσωματώσετε δομημένα δεδομένα που οι σαρωτές (και το λογισμικό σας) μπορούν να διαβάσουν άμεσα. Επιπλέον, όταν τα συνδυάσετε με υπογραφή PDF μέσω του GroupDocs.Signature for Java, αποκτάτε έναν ισχυρό τρόπο να παρακολουθείτε και να επαληθεύετε έγγραφα χωρίς να προσθέτετε πολύπλοκες αναζητήσεις βάσεων δεδομένων.
Σε αυτόν τον οδηγό, θα μάθετε ακριβώς πώς να υλοποιήσετε υπογραφές barcode στα Java PDF — από τη βασική ρύθμιση μέχρι κώδικα έτοιμο για παραγωγή με ευέλικτη τοποθέτηση. Είτε δημιουργείτε σύστημα τιμολόγησης, γεννήτρια πιστοποιητικών ή πλατφόρμα διαχείρισης συμβάσεων, θα έχετε όλα όσα χρειάζεστε στο τέλος.
Τι Θα Μάθετε:
- Ρύθμιση του GroupDocs.Signature για Java σε λίγα λεπτά
- Δημιουργία υπογραφών barcode Code128 (και γιατί είναι συχνά η καλύτερη επιλογή)
- Τοποθέτηση barcode χρησιμοποιώντας διατάξεις βάσει ποσοστών που λειτουργούν σε οποιοδήποτε μέγεθος PDF
- Αποφυγή κοινών παγίδων που παρενοχλούν τους προγραμματιστές
- Κατάλληλη δοκιμή της υλοποίησής σας
Πώς να δημιουργήσετε υπογραφή barcode σε Java
Η δημιουργία υπογραφής barcode σε Java περιλαμβάνει τη φόρτωση του στοχευόμενου PDF, τη διαμόρφωση των επιλογών barcode όπως δεδομένα, τύπος, μέγεθος και θέση, και στη συνέχεια την εφαρμογή της υπογραφής για τη δημιουργία ενός νέου εγγράφου. Το GroupDocs.Signature διαχειρίζεται την απόδοση και τη κρυπτογραφική σύνδεση, οπότε χρειάζεται μόνο να παρέχετε τις επιθυμητές παραμέτρους και να διαχειριστείτε τις διαδρομές αρχείων.
Προαπαιτούμενα και λίστα ελέγχου περιβάλλοντος
Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε τα παρακάτω στοιχεία έτοιμα:
- Java Development Kit (JDK) 8 ή νεότερο – απαιτείται για όλες τις βιβλιοθήκες GroupDocs Java.
- Maven ή Gradle – για τη διαχείριση της εξάρτησης GroupDocs.Signature.
- Ένα IDE όπως IntelliJ IDEA, Eclipse ή VS Code με επεκτάσεις Java.
- GroupDocs.Signature for Java (συνιστάται η έκδοση 23.12 ή νεότερη).
- Βασικές γνώσεις Java – πρέπει να είστε άνετοι με τη δημιουργία κλάσεων, τη διαχείριση εξαιρέσεων και την εργασία με I/O αρχείων.
Ρύθμιση του GroupDocs.Signature στο έργο σας
Η προσθήκη της βιβλιοθήκης στο έργο σας είναι απλή. Επιλέξτε το εργαλείο κατασκευής σας:
Για χρήστες Maven, προσθέστε αυτήν την εξάρτηση στο pom.xml σας:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Χρησιμοποιείτε Gradle; Προσθέστε αυτή τη γραμμή στο build.gradle σας:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Προτιμάτε χειροκίνητη εγκατάσταση; Κατεβάστε το JAR απευθείας από GroupDocs.Signature for Java releases και προσθέστε το στο classpath σας.
Λήψη της άδειας σας
Πριν προχωρήσετε στην πλήρη παραγωγή, θα χρειαστεί να διαχειριστείτε την άδεια:
- Free Trial: Ιδανική για δοκιμές — λάβετε την από τον ιστότοπο GroupDocs για να εξερευνήσετε τις βασικές λειτουργίες.
- Temporary License: Χρειάζεστε περισσότερο χρόνο για αξιολόγηση; Αιτηθείτε άδεια 30 ημερών.
- Full License: Έτοιμοι για παραγωγή; Αγοράστε άδεια για απεριόριστη χρήση.
Εδώ είναι ένας γρήγορος έλεγχος για να βεβαιωθείτε ότι όλα λειτουργούν:
Signature signature = new Signature("sample.pdf");
System.out.println("Signature object created successfully.");
Αν εκτελεστεί χωρίς σφάλματα, είστε έτοιμοι!
Πώς να δημιουργήσετε υπογραφή barcode σε Java
Τώρα έρχεται το διασκεδαστικό μέρος — ας υπογράψουμε ένα PDF με barcode. Θα το χωρίσουμε σε μικρά βήματα ώστε να καταλάβετε ακριβώς τι συμβαίνει σε κάθε στάδιο.
Βήμα 1: Αρχικοποίηση του αντικειμένου Signature
Definition anchor: Η κλάση Signature είναι το σημείο εισόδου του GroupDocs.Signature για φόρτωση, τροποποίηση και αποθήκευση εγγράφων PDF.
Πρώτα, πρέπει να πείτε στο GroupDocs ποιο PDF επεξεργάζεστε:
Signature signature = new Signature("input.pdf");
What’s happening here: Το αντικείμενο Signature φορτώνει το PDF στη μνήμη και το προετοιμάζει για τροποποιήσεις. Βεβαιωθείτε ότι η διαδρομή του αρχείου είναι σωστή — ένα κοινό πρόβλημα είναι η χρήση backslashes στα Windows χωρίς διαφυγή (χρησιμοποιήστε \\ ή απλώς forward slashes, που λειτουργούν δια-πλατφόρμα).
Βήμα 2: Διαμόρφωση των επιλογών barcode (Πώς να προσθέσετε barcode)
Definition anchor: Η κλάση BarcodeSignOptions περιλαμβάνει όλες τις ρυθμίσεις που απαιτούνται για την απόδοση ενός barcode μέσα σε PDF.
Τώρα ας δημιουργήσουμε την υπογραφή barcode με τα δεδομένα σας:
BarcodeSignOptions options = new BarcodeSignOptions("12345678");
options.setEncodeType(BarcodeEncodeType.Code128);
"12345678"είναι τα δεδομένα του barcode — μπορεί να είναι αριθμός παραγγελίας, αριθμός πιστοποιητικού ή οποιοδήποτε αναγνωριστικό χρειάζεστε.Code128είναι ο τύπος κωδικοποίησης (περισσότερα για την επιλογή του σωστού τύπου παρακάτω).
Pro tip: Το Code128 μπορεί να διαχειριστεί τόσο αριθμούς όσο και γράμματα, καθιστώντας το ευέλικτο για τις περισσότερες περιπτώσεις χρήσης. Αν χρειάζεστε μόνο αριθμούς, το Code39 μπορεί να είναι πιο απλό, αλλά το Code128 προσφέρει μεγαλύτερη ευελιξία.
Βήμα 3: Τοποθέτηση του barcode (Πώς να υπογράψετε PDF με barcode)
Definition anchor: Η κλάση SignatureOptions παρέχει ιδιότητες διάταξης όπως αριθμός σελίδας, μέγεθος και στοίχιση.
Εδώ το GroupDocs ξεχωρίζει — η τοποθέτηση βάσει ποσοστών σημαίνει ότι το barcode φαίνεται σωστά σε οποιοδήποτε μέγεθος 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);
Why percentages matter: Φανταστείτε ότι υπογράφετε τόσο έγγραφα A4 όσο και νομικού μεγέθους. Με τοποθέτηση σε ποσοστά, το barcode κλιμακώνεται αυτόματα ώστε να φαίνεται ομοιόμορφο και στα δύο. Η χρήση σταθερών pixel θα έκανε το barcode πολύ μικρό σε μεγάλα έγγραφα ή πολύ μεγάλο σε μικρά.
Real‑world example: Σε σελίδα A4 (595 × 842 points), ένα barcode πλάτους 30 % θα είναι περίπου 180 points. Σε σελίδα νομικού μεγέθους (612 × 1008 points), θα είναι περίπου 184 points — αυτόματα ανάλογο.
Βήμα 4: Υπογραφή και αποθήκευση του εγγράφου (Πώς να προσθέσετε barcode pdf)
Ώρα να εφαρμόσουμε την υπογραφή και να αποθηκεύσουμε το αποτέλεσμα:
signature.sign(outputPath, options);
Important note: Ο φάκελος εξόδου πρέπει να υπάρχει πριν τρέξετε αυτόν τον κώδικα. Το GroupDocs δεν δημιουργεί αυτόματα nested directories, οπότε δημιουργήστε τους πρώτα ή διαχειριστείτε το στο πρόγραμμα σας:
new File("output").mkdirs();
What if something goes wrong? Τυλίξτε τον κώδικα σε block try‑catch:
try {
signature.sign("signed.pdf", options);
} catch (Exception e) {
e.printStackTrace();
}
Επιλογή του κατάλληλου τύπου barcode για τις ανάγκες σας (δημιουργία code128 barcode)
Το GroupDocs υποστηρίζει πολλαπλές μορφές barcode, και η σωστή επιλογή είναι κρίσιμη. Ακολουθεί μια πρακτική σύγκριση:
Code128 (Our Default Choice):
- Best for: Μικτά αλφαριθμητικά δεδομένα (IDs όπως “INV2024-001”)
- Capacity: Μέχρι 128 χαρακτήρες ASCII
- Why it wins: Συμπαγές, ευρέως υποστηριζόμενο, διαχειρίζεται τόσο γράμματα όσο και αριθμούς
- Use when: Χρειάζεστε ευελιξία και δεν γνωρίζετε τι είδους δεδομένα θα κωδικοποιήσετε
Code39:
- Best for: Απλοί αλφαριθμητικοί κώδικες
- Capacity: 43 χαρακτήρες (A‑Z, 0‑9, και κάποια σύμβολα)
- Why consider it: Παλαιότεροι σαρωτές το υποστηρίζουν καλύτερα
- Use when: Εργάζεστε με παλαιά συστήματα ή η απλότητα είναι πιο σημαντική από την πυκνότητα δεδομένων
QR Code:
- Best for: Μεγάλη ποσότητα δεδομένων (URLs, JSON)
- Capacity: Έως 3 KB δεδομένων
- Why it’s powerful: Μπορεί να αποθηκεύσει σύνθετες δομές, ενσωματώνει διόρθωση σφαλμάτων
- Use when: Χρειάζεστε ενσωμάτωση δομημένων δεδομένων ή URLs
EAN/UPC:
- Best for: Αναγνώριση προϊόντων
- Capacity: Σταθερού μήκους αριθμητικοί κώδικες (8‑13 ψηφία)
- Use when: Εργάζεστε σε λιανική ή συστήματα αποθεμάτων
Quick decision guide:
- Χρειάζεστε γράμματα και αριθμούς; → Code128
- Μόνο αριθμοί, απλότητα; → Code39
- Πολλά δεδομένα ή URLs; → QR Code
- Κωδικοί προϊόντων; → EAN/UPC
Συνηθισμένα προβλήματα και πώς να τα αποφύγετε (tamper evident barcode)
Αυτά είναι τα ζητήματα που αντιμετωπίζουν συχνά οι προγραμματιστές (ώστε να μην τα αντιμετωπίσετε εσείς):
Πρόβλημα 1: Η τοποθέτηση του barcode φαίνεται λανθασμένη
Symptom: Το barcode εμφανίζεται σε απροσδόκητες θέσεις ή κόβεται.
Common causes:
- Χρήση pixel τιμών σε διαφορετικά μεγέθη σελίδας
- Παράλειψη ότι οι συντεταγμένες PDF ξεκινούν από το κάτω‑αριστερό, όχι από το πάνω‑αριστερό
- Περιθώρια που σπρώχνουν το περιεχόμενο εκτός ορατής περιοχής
Solution: Χρησιμοποιείτε πάντα τοποθέτηση βάσει ποσοστών για συνέπεια:
options.setLeft(5);
options.setTop(95);
options.setWidth(40);
options.setHeight(12);
Πρόβλημα 2: Το κείμενο του barcode είναι αδιάβαστο
Symptom: Το κωδικοποιημένο κείμενο εμφανίζεται αλλά οι σαρωτές δεν μπορούν να το διαβάσουν.
Causes:
- Barcode πολύ μικρό για το μήκος των δεδομένων
- Λάθος τύπος κωδικοποίησης για τα δεδομένα σας
- Χαμηλή αντίθεση μεταξύ γραμμών και φόντου
Solution: Προσαρμόστε το μέγεθος του barcode στο μήκος των δεδομένων. Για Code128 με 10‑15 χαρακτήρες, στοχεύστε τουλάχιστον 8‑10 % του πλάτους της σελίδας.
Πρόβλημα 3: Εξαιρέσεις διαδρομής αρχείου
Symptom: FileNotFoundException ή παρόμοια σφάλματα.
Causes:
- Σκληροκωδικοποιημένες διαδρομές Windows με μονά backslashes
- Ο φάκελος εξόδου δεν υπάρχει
- Προβλήματα δικαιωμάτων αρχείου
Solution: Χρησιμοποιήστε forward slashes (λειτουργούν παντού) και δημιουργήστε τους φακέλους πρώτα:
Path output = Paths.get("output/signed.pdf");
Files.createDirectories(output.getParent());
Πρόβλημα 4: Προβλήματα μνήμης με μεγάλα PDF
Symptom: Σφάλματα out of memory κατά την επεξεργασία μεγάλων εγγράφων.
Solution: Κλείστε το αντικείμενο Signature όταν τελειώσετε για να ελευθερώσετε πόρους:
signature.close();
Δοκιμή της υλοποίησης του barcode
Πριν το αναπτύξετε, βεβαιωθείτε ότι τα barcode λειτουργούν πραγματικά. Ακολουθεί μια πρακτική λίστα ελέγχου:
1. Δοκιμή οπτικής επιθεώρησης
Ανοίξτε το υπογεγραμμένο PDF και ελέγξτε:
- Είναι το barcode ορατό και σωστά τοποθετημένο;
- Φαίνεται καθαρό (όχι θολό ή pixelated);
- Υπάρχει επαρκής λευκός χώρος γύρω του;
2. Δοκιμή σάρωσης
Χρησιμοποιήστε μια εφαρμογή σάρωσης barcode στο τηλέφωνό σας (π.χ. “Barcode Scanner” ή “QR & Barcode Reader”) για να επαληθεύσετε:
- Ο σαρωτής μπορεί να διαβάσει το barcode
- Τα αποκωδικοποιημένα δεδομένα ταιριάζουν με αυτά που κωδικοποιήσατε
- Λειτουργεί από διαφορετικές γωνίες και αποστάσεις
3. Δοκιμή δια‑πλατφόρμας
Ανοίξτε το PDF σε διαφορετικές συσκευές:
- Windows (Adobe Reader, Chrome)
- Mac (Preview, Chrome)
- Κινητές συσκευές (iOS, Android)
Βεβαιωθείτε ότι το barcode αποδίδεται σωστά παντού.
4. Αυτόματος κώδικας δοκιμής
Ένα απλό τεστ που μπορείτε να εκτελέσετε:
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());
}
Πραγματικές περιπτώσεις χρήσης για υπογραφές barcode
Ας δούμε πού αυτή η τεχνική ξεχωρίζει πραγματικά σε παραγωγικά συστήματα:
1. Δημιουργία και επαλήθευση πιστοποιητικών
Scenario: Δημιουργείτε μια εκπαιδευτική πλατφόρμα που εκδίδει πιστοποιητικά ολοκλήρωσης.
Implementation: Δημιουργήστε ένα μοναδικό ID πιστοποιητικού (π.χ. “CERT‑2024‑00123”) και ενσωματώστε το ως barcode Code128 στην κάτω‑δεξιά γωνία. Η σάρωση του barcode επιτρέπει στο API σας να ανακτήσει άμεσα τις λεπτομέρειες του πιστοποιητικού, εξαλείφοντας την χειροκίνητη εισαγωγή δεδομένων.
2. Συστήματα παρακολούθησης τιμολογίων
Scenario: Η εταιρεία σας επεξεργάζεται χιλιάδες τιμολόγια μηνιαίως.
Implementation: Προσθέστε τον αριθμό τιμολογίου και την ημερομηνία λήξης ως QR code τοποθετημένο σε θέση εύκολης ανάγνωσης από εξοπλισμό σάρωσης. Τα αυτοματοποιημένα συστήματα ταξινόμησης μπορούν να δρομολογούν τα τιμολόγια χωρίς ανθρώπινη παρέμβαση, μειώνοντας τον χρόνο επεξεργασίας από ώρες σε λεπτά.
3. Διαχείριση νομικών συμβάσεων
Scenario: Ένα δικηγορικό γραφείο χρειάζεται να παρακολουθεί εκδόσεις και τροποποιήσεις συμβάσεων.
Implementation: Κάθε έκδοση σύμβασης λαμβάνει ένα μοναδικό barcode που περιλαμβάνει ID σύμβασης, αριθμό έκδοσης και ημερομηνία υπογραφής. Η σάρωση κατά τους ελέγχους φέρνει αυτόματα το πλήρες ιστορικό εκδόσεων.
4. Ασφάλεια ιατρικών αρχείων
Scenario: Ένα νοσοκομείο θέλει να αποτρέψει μη εξουσιοδοτημένη πρόσβαση στα αρχεία.
Implementation: Ενσωματώστε το ID ασθενούς και τη χρονική σφραγίδα δημιουργίας του αρχείου σε barcode. Μόνο εξουσιοδοτημένες συσκευές μπορούν να αποκωδικοποιήσουν και να έχουν πρόσβαση στο πλήρες αρχείο, ενώ κάθε σάρωση δημιουργεί αρχείο ελέγχου για συμμόρφωση.
Συμβουλές βελτιστοποίησης απόδοσης (java document security)
Όταν υπογράφετε πολλά PDF, η απόδοση είναι σημαντική. Ακολουθούν μερικές συμβουλές για ομαλή λειτουργία:
Στρατηγική επεξεργασίας σε παρτίδες
Αντί να υπογράφετε ένα έγγραφο τη φορά, επεξεργαστείτε τα σε παρτίδες:
for (String filePath : pdfList) {
Signature batchSignature = new Signature(filePath);
batchSignature.sign(outputPath, options);
batchSignature.close();
}
Why this helps: Η επαναχρησιμοποίηση του αντικειμένου options και το σωστό κλείσιμο πόρων αποτρέπει διαρροές μνήμης.
Διαχείριση μνήμης για μεγάλα PDF
Για PDF μεγαλύτερα από 50 MB:
- Επεξεργαστείτε τα διαδοχικά αντί να φορτώνετε πολλά ταυτόχρονα.
- Χρησιμοποιήστε try‑with‑resources για να εξασφαλίσετε καθαρισμό.
- Παρακολουθείτε το μέγεθος heap και προσαρμόστε τις παραμέτρους JVM αν χρειαστεί:
-Xmx2g.
Caching συχνά χρησιμοποιούμενων barcode
Αν υπογράφετε πολλά έγγραφα με το ίδιο barcode, αποθηκεύστε στην cache το αντικείμενο BarcodeSignOptions:
BarcodeSignOptions cachedOptions = new BarcodeSignOptions("STATIC_ID");
cachedOptions.setEncodeType(BarcodeEncodeType.Code128);
Πότε να χρησιμοποιήσετε υπογραφές barcode (και πότε όχι)
Perfect scenarios:
- Χρειάζεστε μηχανικά αναγνώσιμα αναγνωριστικά εγγράφων.
- Τα έγγραφα θα σαρώνονται ή θα επεξεργάζονται αυτόματα.
- Θέλετε ανιχνευσιμότητα από αλλοίωση χωρίς ψηφιακές πιστοποιήσεις.
- Απαιτείται ενσωμάτωση με υπάρχουσα υποδομή barcode.
Not ideal when:
- Χρειάζεστε νομικά δεσμευτικές ψηφιακές υπογραφές (χρησιμοποιήστε ψηφιακά πιστοποιητικά).
- Τα έγγραφα θα προβληθούν μόνο από ανθρώπους (μια απλή υδατογράφημα κειμένου μπορεί να αρκεί).
- Εργάζεστε με εξαιρετικά μικρά έγγραφα όπου το barcode θα κυριαρχεί στη σελίδα.
- Οι απαιτήσεις ασφαλείας απαιτούν κρυπτογράφηση—τα barcode είναι ορατά και μπορούν να σαρωθούν από οποιονδήποτε.
Can you combine approaches? Απόλυτα! Πολλά συστήματα χρησιμοποιούν τόσο barcode υπογραφές για παρακολούθηση όσο και ψηφιακές υπογραφές για νομική ισχύ.
Συχνές Ερωτήσεις
Q: Μπορώ να χρησιμοποιήσω διαφορετικούς τύπους barcode στο ίδιο PDF;
A: Ναι! Καλέστε signature.sign() πολλές φορές με διαφορετικές BarcodeSignOptions για κάθε τύπο barcode. Απλώς βεβαιωθείτε ότι δεν επικαλύπτονται.
Q: Πώς να διαχειριστώ barcode που περιέχουν ειδικούς χαρακτήρες;
A: Το Code128 διαχειρίζεται τα περισσότερα ASCII χαρακτήρες. Για Unicode ή σύνθετα δεδομένα, μεταβείτε σε QR codes—υποστηρίζουν κωδικοποίηση UTF‑8.
Q: Ποιο είναι το μέγιστο μέγεθος δεδομένων που μπορώ να αποθηκεύσω σε Code128 barcode;
A: Θεωρητικά έως 128 χαρακτήρες, αλλά η αναγνωσιμότητα μειώνεται σημαντικά πάνω από 30‑40 χαρακτήρες. Για μεγαλύτερα payloads, χρησιμοποιήστε QR codes.
Q: Θα αυξήσει η προσθήκη barcode σημαντικά το μέγεθος του PDF;
A: Όχι αισθητά—τα barcode είναι διανυσματικά γραφικά, συνήθως προσθέτουν μόνο 5‑20 KB ανά barcode ανάλογα με το μέγεθος και την πολυπλοκότητα.
Q: Μπορώ να περιστρέψω barcode ή να τα τοποθετήσω κάθετα;
A: Ναι! Χρησιμοποιήστε options.setRotationAngle(90) για να περιστρέψετε το barcode, χρήσιμο για τοποθέτηση στο περιθώριο.
Q: Πώς να κάνω τα barcode να εμφανίζονται σε κάθε σελίδα ενός πολυ‑σελιδικού PDF;
A: Επανάληψη μέσω των σελίδων και εφαρμογή της υπογραφής σε κάθε μία. Ελέγξτε την κλάση PagesSetup στην τεκμηρίωση GroupDocs για να ελέγξετε ποιες σελίδες θα υπογραφούν.
Q: Τι κάνω αν ο σαρωτής barcode δεν μπορεί να διαβάσει το παραγόμενο barcode;
A: Πρώτα, βεβαιωθείτε ότι ο σαρωτής υποστηρίζει τον επιλεγμένο τύπο barcode. Στη συνέχεια, αυξήστε το μέγεθος του barcode—τα περισσότερα προβλήματα προέρχονται από πολύ μικρές γραμμές. Στοχεύστε τουλάχιστον 1 inch (2.54 cm) πλάτος για αξιόπιστη ανάγνωση.
Πρόσθετοι Πόροι
Documentation:
Downloads and Licensing:
Community and Support:
- Support Forum - Active community with GroupDocs engineers
Τελευταία ενημέρωση: 2026-07-20
Δοκιμάστηκε με: GroupDocs.Signature 23.12 (Java)
Συγγραφέας: 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);