Αναζήτηση Σελίδων με Barcode σε Έγγραφα Χρησιμοποιώντας Java

Εισαγωγή

Έχετε περάσει ώρες ελέγχοντας χειροκίνητα υπογραφές σε εκατοντάδες έγγραφα; Δεν είστε μόνοι. Είτε δημιουργείτε σύστημα διαχείρισης συμβάσεων, αυτοματοποιείτε την επεξεργασία τιμολογίων ή ασφαλίζετε ιατρικά αρχεία, η χειροκίνητη εντοπισμός και επικύρωση υπογραφών barcode είναι κουραστική και επιρρεπής σε σφάλματα. Σε αυτό το tutorial θα μάθετε πώς να αναζητήσετε σελίδες barcode με Java χρησιμοποιώντας το GroupDocs.Signature, ώστε να μπορείτε προγραμματιστικά να στοχεύετε μόνο τις σελίδες που έχουν σημασία, να παρακολουθείτε την πρόοδο σε πραγματικό χρόνο και να διαχειρίζεστε μια ποικιλία μορφών barcode με λίγες γραμμές κώδικα Java.

Τι θα μάθετε

  • Ρύθμιση του 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.

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

Το GroupDocs.Signature παρέχει ένα API υψηλού επιπέδου που αφαιρεί την ανάγκη για χαμηλού επιπέδου αποκωδικοποίηση barcode, απόδοση σελίδων και διαχείριση μορφών εγγράφων. Υποστηρίζει πάνω από 20 μορφές barcode και μπορεί να επεξεργαστεί έγγραφα με εκατοντάδες σελίδες χωρίς να φορτώνει ολόκληρο το αρχείο στη μνήμη, επιτρέποντάς σας να εστιάσετε στη λογική της επιχείρησης αντί για την ανάλυση του αρχείου.

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

  • 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.

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

  • Δωρεάν Δοκιμή – ξεκινήστε αμέσως, χωρίς δέσμευση
  • Προσωρινή Άδεια – πλήρη πρόσβαση σε λειτουργίες για αξιολόγηση
  • Πλήρης Άδεια – έτοιμη για παραγωγή, απεριόριστη χρήση

Επαληθεύστε την εγκατάσταση με ένα γρήγορο απόσπασμα αρχικοποίησης:

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

Barcodes ενσωματώνουν δεδομένα αναγνώσιμα από μηχανή μέσα σε ένα έγγραφο. Σε αντίθεση με τις χειρόγραφες υπογραφές, μπορούν να αποθηκεύουν IDs, χρονικές σφραγίδες, URLs ή φορτία JSON, καθιστώντας τα ιδανικά για αυτοματοποιημένη επαλήθευση.

Τύπος BarcodeΚαλύτερη Χρήση ΓιαΤυπικό Μήκος Δεδομένων
QR CodeΔεδομένα υψηλής πυκνότητας, URLs, κείμενο πολλαπλών γραμμώνUp to 4,296 characters
Code128Αλφαριθμητικοί αριθμοί παρακολούθησηςVariable
Code39Απλοί κώδικες κληρονομίαςUp to 43 characters
DataMatrixΜικρές ετικέτες, ιατρικά αρχείαUp to 2,335 characters
EAN/UPCΑναγνώριση προϊόντος, λιανική8‑13 digits

Θα χρησιμοποιείτε συχνά barcodes όταν χρειάζεστε γρήγορη μηχανική ανάγνωση, δομημένα δεδομένα ή υπογραφή ανίχνευσης παραποίησης.

Πώς να αναζητήσετε σελίδες barcode με Java;

Signature είναι η κύρια κλάση που αντιπροσωπεύει ένα έγγραφο προς επεξεργασία. Φορτώστε το έγγραφό σας με new Signature("file.pdf"), το BarcodeSearchOptions ορίζει τις παραμέτρους για την αναζήτηση υπογραφών barcode, και το διαμορφώστε ώστε να στοχεύει τις επιθυμητές σελίδες, και καλέστε signature.search(options). Η μέθοδος search εκτελεί την αναζήτηση χρησιμοποιώντας τις παρεχόμενες επιλογές. Η μηχανή επιστρέφει μια λίστα από αντικείμενα BarcodeSignature που περιέχουν αριθμούς σελίδων, αποκωδικοποιημένο κείμενο και γεωμετρικές συντεταγμένες—όλα σε μία κλήση. Αυτό το μοτίβο ενός βήματος εξαλείφει την ανάγκη για ξεχωριστή εξαγωγή εικόνας ή προσαρμοσμένη λογική αποκωδικοποίησης.

Τώρα που κατανοείτε τη γενική ροή, ας εμβαθύνουμε στα τρία βασικά χαρακτηριστικά που θα υλοποιήσετε.

Χαρακτηριστικό 1: Εγγραφή σε Γεγονότα Αναζήτησης Εγγράφου

Γιατί είναι σημαντικό

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

Αγκύρωση Ορισμού

Signature αντιπροσωπεύει το έγγραφο και παρέχει δυνατότητες εγγραφής σε γεγονότα.

Υλοποίηση

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 %.

Αγκύρωση Ορισμού

PagesSetup καθορίζει ποιες σελίδες περιλαμβάνονται στη λειτουργία αναζήτησης.

Υλοποίηση

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");
  • Match types σας επιτρέπουν να ρυθμίσετε λεπτομερώς την αναζήτηση κειμένου (Contains, Exact, StartsWith, EndsWith).
  • Ρυθμίστε το setAllPages και το PagesSetup ώστε να αναζητούνται μόνο συγκεκριμένες σελίδες barcode.

Χαρακτηριστικό 3: Εκτέλεση της Αναζήτησης και Επεξεργασία Αποτελεσμάτων

Γιατί αυτό το βήμα είναι σημαντικό

Η εύρεση barcodes είναι μόνο το ήμισυ· πρέπει να ενεργήσετε στα δεδομένα (π.χ., επικύρωση, αποθήκευση ή ενεργοποίηση ροών εργασίας).

Αγκύρωση Ορισμού

BarcodeSignature αντιπροσωπεύει ένα εντοπισμένο 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() – η σελίδα όπου βρίσκεται το barcode
  • getEncodeType() – QR, Code128, κλπ.
  • getText() – το αποκωδικοποιημένο φορτίο
  • Θέση (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 IDs αποστολών στις πρώτες/τελευταίες σελίδες των καταλόγων
Φόρμες συναίνεσης υγείαςΕξαγωγή DataMatrix IDs ασθενών από την τελική σελίδα συναίνεσης
Αυτοματοποίηση τιμολογίωνΕύρεση barcode με πρόθεμα “APPR‑” οπουδήποτε στο τιμολόγιο, έπειτα δρομολόγηση

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

Πρόβλημα 1 – Δεν υπάρχουν αποτελέσματα παρόλο που υπάρχουν ορατά barcodes

// Ensure you are not limiting pages too aggressively
options.setAllPages(true);

Εάν το barcode είναι ενσωματωμένο ως εικόνα raster, σκεφτείτε τη χρήση του GroupDocs.Image για ανίχνευση βάσει εικόνας.

Πρόβλημα 2 – Αργή απόδοση σε μεγάλα αρχεία

PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setLastPage(true);  // Most signatures are on the last page
pagesSetup.setFirstPage(true);
options.setPagesSetup(pagesSetup);

Οι στοχευμένες σελίδες μειώνουν δραματικά το χρόνο επεξεργασίας· ένα PDF 150 σελίδων μειώνεται από ~4 δευτερόλεπτα σε <1 δευτερόλεπτο όταν περιορίζετε την αναζήτηση σε δύο σελίδες.

Πρόβλημα 3 – TextMatchType δεν βρίσκει τα αναμενόμενα barcodes

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);
}

Αποθήκευση αποτελεσμάτων όταν τα έγγραφα είναι αμετάβλητα

Map<String, List<BarcodeSignature>> cache = new ConcurrentHashMap<>();

public List<BarcodeSignature> getCachedSignatures(String docId) {
    return cache.computeIfAbsent(docId, id -> performSearch(id));
}

Χρήση γεγονότων προόδου για ανατροφοδότηση UI

signature.SearchProgress.add(new ProcessProgressEventHandler() {
    public void invoke(Signature sender, ProcessProgressEventArgs args) {
        int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
        updateProgressBar(percent);
    }
});

Επικύρωση φορτίων 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
}

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

Q: Μπορώ να αναζητήσω πολλαπλές μορφές barcode σε μία κλήση;
A: Ναι. Το BarcodeSearchOptions αναζητά όλες τις υποστηριζόμενες μορφές από προεπιλογή. Φιλτράρετε τα αποτελέσματα με getEncodeType() αν χρειάζεστε μόνο συγκεκριμένους τύπους.

Q: Πώς διαχειρίζομαι έγγραφα που περιέχουν τόσο barcode όσο και υπογραφές εικόνας;
A: Εκτελέστε ξεχωριστές αναζητήσεις—χρησιμοποιήστε BarcodeSignature.class για barcodes και ImageSignature.class για υπογραφές εικόνας, στη συνέχεια συνδυάστε τα αποτελέσματα όπως απαιτείται.

Q: Ποιος είναι ο αντίκτυπος στην απόδοση όταν αναζητάτε όλες τις σελίδες σε σύγκριση με συγκεκριμένες σελίδες;
A: Η σάρωση κάθε σελίδας ενός PDF 50 σελίδων μπορεί να διαρκέσει 3–5 δευτερόλεπτα. Ο περιορισμός στις πρώτες + τελευταίες σελίδες συνήθως ολοκληρώνεται κάτω από 1 δευτερόλεπτο.

Q: Λειτουργεί αυτό με σαρωμένα PDFs (εικόνες raster);
A: Μόνο εάν το barcode προστέθηκε ως αντικείμενο ψηφιακής υπογραφής. Για barcodes μόνο raster, θα χρειαστείτε έναν αναγνωριστή barcode βάσει εικόνας (π.χ., GroupDocs.Barcode).

Q: Πώς μπορώ να επαληθεύσω ότι μια υπογραφή barcode δεν έχει παραποιηθεί;
A: Ενσωματώστε ένα hash ή ψηφιακή υπογραφή μέσα στο φορτίο του barcode, στη συνέχεια επαναϋπολογίστε το hash στα αρχικά δεδομένα και συγκρίνετε. Αυτό απαιτεί το αρχικό κλειδί υπογραφής ή το πιστοποιητικό.


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

Σχετικά Tutorials