Αναζήτηση Συγκεκριμένων Σελίδων Barcode σε Έγγραφα με Java
Εισαγωγή
Πέρασες ώρες ελέγχοντας χειροκίνητα υπογραφές σε εκατοντάδες έγγραφα; Δεν είσαι μόνος. Είτε δημιουργείς σύστημα διαχείρισης συμβάσεων, αυτοματοποιείς την επεξεργασία τιμολογίων, είτε ασφαλίζεις ιατρικά αρχεία, η χειροκίνητη εντόπιση και επικύρωση υπογραφών barcode είναι κουραστική και επιρρεπής σε σφάλματα.
Σε αυτόν τον οδηγό θα σου δείξουμε πώς να αναζητήσεις συγκεκριμένες σελίδες barcode στα έγγραφά σου προγραμματιστικά με Java και GroupDocs.Signature. Στο τέλος, θα μπορείς να εντοπίσεις υπογραφές σε επιλεγμένες σελίδες, να παρακολουθείς την πρόοδο της αναζήτησης σε πραγματικό χρόνο και να διαχειρίζεσαι μια ποικιλία μορφών barcode—όλα με καθαρό, συντηρήσιμο κώδικα.
Τι θα μάθεις
- Ρύθμιση του GroupDocs.Signature σε έργο Java (≈5 λεπτά)
- Εγγραφή σε γεγονότα αναζήτησης για παρακολούθηση προόδου σε πραγματικό χρόνο
- Διαμόρφωση έξυπνων επιλογών αναζήτησης για στοχευμένες σελίδες
- Εκτέλεση της αναζήτησης και επεξεργασία αποτελεσμάτων αποδοτικά
Γρήγορες Απαντήσεις
- Ποια βιβλιοθήκη βοηθά στην αναζήτηση συγκεκριμένων σελίδων barcode; GroupDocs.Signature for Java
- Τυπικός χρόνος ρύθμισης; Περίπου 5 λεπτά για προσθήκη της εξάρτησης Maven/Gradle και άδεια
- Μπορώ να περιορίσω την αναζήτηση στις πρώτες και τελευταίες σελίδες; Ναι – χρησιμοποίησε
PagesSetupγια να ορίσεις ακριβείς σελίδες - Ποιες μορφές barcode υποστηρίζονται; QR Code, Code128, Code39, DataMatrix, EAN/UPC, και άλλες
- Χρειάζομαι πληρωμένη άδεια για παραγωγή; Απαιτείται πλήρης άδεια για παραγωγή· μια δοκιμαστική λειτουργεί για αξιολόγηση
Τι είναι η “αναζήτηση συγκεκριμένων σελίδων barcode”?
Η αναζήτηση συγκεκριμένων σελίδων barcode σημαίνει να ζητήσεις από τη μηχανή υπογραφών να ψάξει για υπογραφές barcode μόνο στις σελίδες που σε ενδιαφέρουν—π.χ. την πρώτη, την τελευταία ή οποιοδήποτε προσαρμοσμένο εύρος. Αυτή η εστιασμένη προσέγγιση επιταχύνει την επεξεργασία, μειώνει τη χρήση μνήμης και σου επιτρέπει να δημιουργήσεις ανταποκρινόμενο UI feedback.
Γιατί να χρησιμοποιήσεις το GroupDocs.Signature για αυτήν την εργασία;
Το GroupDocs.Signature παρέχει ένα υψηλού επιπέδου API που αφαιρεί την ανάγκη για χαμηλού επιπέδου αποκωδικοποίηση barcode, απόδοση σελίδων και διαχείριση μορφών εγγράφων. Λειτουργεί με PDF, DOCX, XLSX και πολλές άλλες μορφές έτοιμες «από το κουτί», επιτρέποντάς σου να εστιάσεις στη λογική της επιχείρησης αντί στην ανάλυση αρχείων.
Προαπαιτούμενα
- JDK 8+ εγκατεστημένο
- Maven ή Gradle για διαχείριση εξαρτήσεων
- Βασική εξοικείωση με κλάσεις Java, μεθόδους και διαχείριση εξαιρέσεων
- Πρόσβαση σε άδεια GroupDocs.Signature (δοκιμαστική ή πλήρης)
Ρύθμιση του GroupDocs.Signature για Java
Ρύθμιση 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'
Προτιμάς χειροκίνητες λήψεις; Μπορείς να κατεβάσεις την πιο πρόσφατη έκδοση απευθείας από τη σελίδα λήψης του GroupDocs.
Λήψη της Άδειας
- Δωρεάν Δοκιμή – ξεκίνα αμέσως, χωρίς δεσμεύσεις
- Προσωρινή Άδεια – πλήρη πρόσβαση σε λειτουργίες για αξιολόγηση
- Πλήρης Άδεια – έτοιμη για παραγωγή, απεριόριστη χρήση
Επικύρωσε την εγκατάσταση με ένα γρήγορο snippet αρχικοποίησης:
import com.groupdocs.signature.Signature;
public class SignatureSetup {
public static void main(String[] args) {
// Initialize the Signature instance with the document path
Signature signature = new Signature("YOUR_DOCUMENT_PATH");
System.out.println("GroupDocs.Signature for Java initialized successfully.");
}
}
Συμβουλή επαγγελματία: Αντικατέστησε το
"YOUR_DOCUMENT_PATH"με ένα πραγματικό αρχείο PDF, DOCX ή XLSX. Αν η κονσόλα εμφανίσει το μήνυμα επιτυχίας, είσαι έτοιμος να ξεκινήσεις.
Κατανόηση των Τύπων Υπογραφής Barcode
Τα barcode ενσωματώνουν μηχανικά αναγνώσιμα δεδομένα μέσα σε ένα έγγραφο. Σε αντίθεση με τις χειρόγραφες υπογραφές, μπορούν να αποθηκεύσουν IDs, χρονικές σφραγίδες, URLs ή JSON payloads, καθιστώντας τα ιδανικά για αυτοματοποιημένη επαλήθευση.
| Τύπος Barcode | Καλύτερη Χρήση | Τυπικό Μήκος Δεδομένων |
|---|---|---|
| QR Code | Δεδομένα υψηλής πυκνότητας, URLs, κείμενο πολλαπλών γραμμών | Έως 4 296 χαρακτήρες |
| Code128 | Αλφαριθμητικοί αριθμοί παρακολούθησης | Μεταβλητό |
| Code39 | Απλοί κώδικες κληρονομίας | Έως 43 χαρακτήρες |
| DataMatrix | Μικρές ετικέτες, ιατρικά αρχεία | Έως 2 335 χαρακτήρες |
| EAN/UPC | Αναγνώριση προϊόντων, λιανική | 8‑13 ψηφία |
Συχνά χρησιμοποιείς barcode όταν χρειάζεσαι γρήγορη μηχανική ανάγνωση, δομημένα δεδομένα ή υπογραφή ανθεκτική σε παραποίηση.
Πώς να Αναζητήσεις Συγκεκριμένες Σελίδες Barcode
Θα χωρίσουμε την υλοποίηση σε τρία εστιασμένα χαρακτηριστικά.
Χαρακτηριστικό 1: Εγγραφή σε Γεγονότα Αναζήτησης Εγγράφου
Γιατί είναι σημαντικό
Κατά την επεξεργασία μεγάλων παρτίδων, η ανάδραση σε πραγματικό χρόνο (π.χ. γραμμές προόδου) βελτιώνει την εμπειρία χρήστη και βοηθά στον εντοπισμό καθυστερήσεων νωρίς.
Υλοποίηση
Signature signature = new Signature("YOUR_DOCUMENT_PATH");
signature.SearchStarted.add(new ProcessStartEventHandler() {
public void invoke(Signature sender, ProcessStartEventArgs args) {
System.out.println("Search process started at " + args.getStarted()
+ " with " + args.getTotalSignatures() + " total signatures to be put in document");
}
});
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
System.out.println("Search progress. Processed " + args.getProcessedSignatures()
+ " signatures. Time spent " + args.getTicks() + " mlsec");
}
});
signature.SearchCompleted.add(new ProcessCompleteEventHandler() {
public void invoke(Signature sender, ProcessCompleteEventArgs args) {
System.out.println("Search process completed at " + args.getCompleted()
+ " with " + args.getTotalSignatures() + " total signatures. Process took "
+ args.getTicks() + " mlsec");
}
});
Αυτοί οι τρεις χειριστές σου δίνουν χρόνο έναρξης, ζωντανή πρόοδο και τελικές στατιστικές—τέλεια για καταγραφή ή ενημερώσεις UI.
Χαρακτηριστικό 2: Διαμόρφωση Επιλογών Αναζήτησης Barcode για Συγκεκριμένες Σελίδες
Γιατί η λεπτομερής έλεγχος είναι σημαντικός
Η σάρωση κάθε σελίδας ενός συμβολαίου 200 σελίδων σπαταλά κύκλους CPU. Στοχεύοντας μόνο την πρώτη και την τελευταία σελίδα μπορείς να μειώσεις το χρόνο εκτέλεσης κατά 80 %.
Υλοποίηση
import com.groupdocs.signature.domain.enums.TextMatchType;
import com.groupdocs.signature.options.search.BarcodeSearchOptions;
BarcodeSearchOptions options = new BarcodeSearchOptions();
options.setAllPages(false); // Opt‑in selective page searching
options.setPageNumber(1); // Starting page (optional)
import com.groupdocs.signature.options.PagesSetup;
PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setFirstPage(true); // Include first page
pagesSetup.setLastPage(true); // Include last page
pagesSetup.setOddPages(false); // Skip odd pages
pagesSetup.setEvenPages(false); // Skip even pages
options.setPagesSetup(pagesSetup);
options.setMatchType(TextMatchType.Contains);
options.setText("12345");
- Τύποι αντιστοίχισης σου επιτρέπουν να ρυθμίσεις την αναζήτηση κειμένου (
Contains,Exact,StartsWith,EndsWith). - Ρύθμισε το
setAllPagesκαι τοPagesSetupώστε να αναζητούνται μόνο συγκεκριμένες σελίδες barcode.
Χαρακτηριστικό 3: Εκτέλεση της Αναζήτησης και Επεξεργασία Αποτελεσμάτων
Γιατί είναι σημαντικό αυτό το βήμα
Η εύρεση barcode είναι μόνο το ήμισυ—πρέπει να ενεργήσεις πάνω στα δεδομένα (π.χ. επικύρωση, αποθήκευση ή ενεργοποίηση ροών εργασίας).
Υλοποίηση
import java.util.List;
import com.groupdocs.signature.domain.signatures.BarcodeSignature;
try {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
System.out.println("Source document contains following signatures.");
for (BarcodeSignature barcodeSignature : signatures) {
System.out.println("Barcode signature found at page " + barcodeSignature.getPageNumber()
+ " with type " + barcodeSignature.getEncodeType() + " and text " + barcodeSignature.getText());
}
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
Τώρα έχεις μια λίστα αντικειμένων BarcodeSignature, το καθένα εκθέτει:
getPageNumber()– η σελίδα όπου βρίσκεται το barcodegetEncodeType()– QR, Code128 κ.λπ.getText()– αποκωδικοποιημένο payload- Θέση (
getLeft(),getTop()) και μέγεθος (getWidth(),getHeight())
Παράδειγμα: Επεξεργασία μόνο QR codes στην τελευταία σελίδα
for (BarcodeSignature barcodeSignature : signatures) {
if (barcodeSignature.getPageNumber() == lastPageNumber
&& barcodeSignature.getEncodeType().equals("QRCode")) {
// Process only QR codes from the final page
processApprovalCode(barcodeSignature.getText());
}
}
Πραγματικές Εφαρμογές
| Σενάριο | Πώς η αναζήτηση barcode‑συγκεκριμένων‑σελίδων βοηθά |
|---|---|
| Επαλήθευση νομικών συμβάσεων | Αυτόματη επικύρωση QR‑κωδικοποιημένων κατακερματισμών πιστοποιητικών στη σελίδα υπογραφής |
| Παρακολούθηση εφοδιαστικής αλυσίδας | Εντοπισμός κωδικών Code128 αποστολών στις πρώτες/τελευταίες σελίδες των φορμών |
| Φόρμες συναίνεσης υγείας | Εξαγωγή DataMatrix IDs ασθενών από την τελική σελίδα συναίνεσης |
| Αυτοματοποίηση τιμολογίων | Εύρεση barcode με πρόθεμα “APPR‑” οπουδήποτε στο τιμολόγιο, έπειτα δρομολόγηση |
Συχνά Προβλήματα και Λύσεις
Πρόβλημα 1 – Δεν υπάρχουν αποτελέσματα παρόλο που τα barcode είναι ορατά
// Ensure you are not limiting pages too aggressively
options.setAllPages(true);
Αν το barcode είναι ενσωματωμένο ως ραστερ εικόνας, σκέψου τη χρήση του GroupDocs.Image για ανίχνευση βάσει εικόνας.
Πρόβλημα 2 – Αργή απόδοση σε μεγάλα αρχεία
PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setLastPage(true); // Most signatures are on the last page
pagesSetup.setFirstPage(true);
options.setPagesSetup(pagesSetup);
Οι στοχευμένες σελίδες μειώνουν δραστικά το χρόνο επεξεργασίας.
Πρόβλημα 3 – Το TextMatchType δεν βρίσκει τα αναμενόμενα barcode
String searchText = "12345".trim().toLowerCase();
options.setText(searchText);
options.setMatchType(TextMatchType.StartsWith); // Try a more permissive mode
Πρόβλημα 4 – Διαρροές μνήμης σε βρόχους μεγάλης διάρκειας
try (Signature signature = new Signature("document.pdf")) {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
// Process signatures
}
Το μπλοκ try‑with‑resources απελευθερώνει αυτόματα το αντικείμενο Signature.
Καλές Πρακτικές για Παραγωγή
Ανθεκτική διαχείριση σφαλμάτων
try {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
} catch (com.groupdocs.signature.exception.GroupDocsSignatureException e) {
logger.error("GroupDocs error: " + e.getMessage());
} catch (Exception e) {
logger.error("Unexpected error: " + e.getMessage(), e);
}
Cache αποτελεσμάτων όταν τα έγγραφα είναι αμετάβλητα
Map<String, List<BarcodeSignature>> cache = new ConcurrentHashMap<>();
public List<BarcodeSignature> getCachedSignatures(String docId) {
return cache.computeIfAbsent(docId, id -> performSearch(id));
}
Χρήση γεγονότων προόδου για UI feedback
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
updateProgressBar(percent);
}
});
Επικύρωση payloads barcode
for (BarcodeSignature barcodeSignature : signatures) {
String text = barcodeSignature.getText();
if (!text.matches("APPR-\\d{4}-\\d{3}")) {
logger.warn("Invalid format: " + text);
continue;
}
if (!validateChecksum(text)) {
logger.error("Checksum failed for: " + text);
flagForManualReview(document);
}
}
Βελτιστοποίηση επιλογής σελίδων ανά τύπο εγγράφου
PagesSetup contractsSetup = new PagesSetup();
contractsSetup.setLastPage(true); // Contracts usually signed on last page
options.setPagesSetup(contractsSetup);
Φιλτράρισμα ανά τύπο barcode μετά την αναζήτηση (αν χρειάζεσαι μόνο QR codes)
for (BarcodeSignature sig : signatures) {
if ("QRCode".equals(sig.getEncodeType())) {
// Process QR code
}
}
Εξαγωγή διαστάσεων εικόνας barcode (αν χρειάζεται για απόδοση)
for (BarcodeSignature sig : signatures) {
int width = sig.getWidth();
int height = sig.getHeight();
// Use dimensions for overlay or thumbnail generation
}
Συχνές Ερωτήσεις
Ε: Μπορώ να αναζητήσω πολλαπλές μορφές barcode σε μία κλήση;
Α: Ναι. Το BarcodeSearchOptions αναζητά όλα τα υποστηριζόμενα φορμά εξ ορισμού. Φίλτραρε τα αποτελέσματα με getEncodeType() αν χρειάζεσαι μόνο συγκεκριμένους τύπους.
Ε: Πώς διαχειρίζομαι έγγραφα που περιέχουν τόσο barcode όσο και εικόνες υπογραφής;
Α: Εκτέλεσε ξεχωριστές αναζητήσεις—χρησιμοποίησε BarcodeSignature.class για barcode και ImageSignature.class για εικόνες, έπειτα συνδύασε τα αποτελέσματα όπως απαιτείται.
Ε: Ποιος είναι ο αντίκτυπος στην απόδοση όταν σαρώνεις όλες τις σελίδες έναντι συγκεκριμένων σελίδων;
Α: Η σάρωση κάθε σελίδας ενός PDF 50 σελίδων μπορεί να διαρκέσει 3–5 δευτερόλεπτα. Ο περιορισμός στις πρώτες + τελευταίες σελίδες συνήθως ολοκληρώνεται κάτω από 1 δευτερόλεπτο.
Ε: Λειτουργεί αυτό με σαρωμένα PDFs (εικόνες raster);
Α: Μόνο αν το barcode προστέθηκε ως ψηφιακό αντικείμενο υπογραφής. Για barcode που είναι μόνο raster, θα χρειαστείς αναγνωριστικό barcode βάσει εικόνας (π.χ. GroupDocs.Barcode).
Ε: Πώς μπορώ να επαληθεύσω ότι μια υπογραφή barcode δεν έχει παραποιηθεί;
Α: Ενσωμάτωσε ένα hash ή ψηφιακή υπογραφή μέσα στο payload του barcode, στη συνέχεια επανυπολόγισε το hash στα αρχικά δεδομένα και σύγκρινε. Αυτό απαιτεί το αρχικό κλειδί υπογραφής ή το πιστοποιητικό.
Τελευταία ενημέρωση: 2026-01-29
Δοκιμασμένο με: GroupDocs.Signature 23.12 for Java
Συγγραφέας: GroupDocs