Java Kullanarak Belgelerde Barkod Belirli Sayfaları Arama
Giriş
Yüzlerce belge üzerinde imzaları manuel olarak saatlerce doğrulamak zorunda kaldınız mı? Yalnız değilsiniz. İster bir sözleşme yönetim sistemi geliştiriyor olun, ister fatura işleme otomasyonu yapıyor olun ya da sağlık kayıtlarını güvence altına alıyor olun, barkod imzalarını manuel olarak izlemek ve doğrulamak zahmetli ve hata yapmaya açıktır. Bu öğreticide GroupDocs.Signature ile java’da barkod sayfalarını nasıl arayacağınızı öğreneceksiniz, böylece yalnızca önemli sayfalara programlı olarak odaklanabilir, ilerlemeyi gerçek zamanlı izleyebilir ve sadece birkaç satır Java kodu ile çeşitli barkod formatlarını işleyebilirsiniz.
Öğrenecekleriniz
- Java projesinde GroupDocs.Signature kurulumunu yapmak (≈5 dakika)
- Gerçek zamanlı ilerleme takibi için arama olaylarına abone olmak
- Belirli sayfaları hedeflemek için akıllı arama seçeneklerini yapılandırmak
- Aramayı yürütmek ve sonuçları verimli bir şekilde işlemek
Hızlı Yanıtlar
- Barkod belirli sayfalarını aramanıza yardımcı olan kütüphane hangisidir? GroupDocs.Signature for Java
- Tipik kurulum süresi? Maven/Gradle bağımlılığını ve bir lisansı eklemek yaklaşık 5 dakika
- Aramayı ilk ve son sayfalara sınırlayabilir miyim? Evet – kesin sayfaları belirtmek için
PagesSetupkullanın - Hangi barkod formatları destekleniyor? QR Code, Code128, Code39, DataMatrix, EAN/UPC ve daha fazlası
- Üretim için ücretli lisansa ihtiyacım var mı? Üretim için tam lisans gereklidir; değerlendirme için bir deneme sürümü çalışır
“Barkod belirli sayfaları arama” nedir?
Barkod belirli sayfaları aramak, imza motoruna yalnızca ilgilendiğiniz sayfalarda barkod imzalarını aramasını söylemek anlamına gelir—örneğin, ilk sayfa, son sayfa veya herhangi bir özel aralık. Bu odaklanmış yaklaşım işleme süresini hızlandırır, bellek kullanımını azaltır ve duyarlı bir UI geri bildirimi oluşturmanıza olanak tanır.
Bu görev için GroupDocs.Signature neden kullanılmalı?
GroupDocs.Signature, düşük seviyeli barkod çözümlemesi, sayfa renderleme ve belge formatı işleme detaylarını soyutlayan yüksek seviyeli bir API sunar. 20’den fazla barkod formatını destekler ve tüm dosyayı belleğe yüklemeden çok yüz sayfalı belgeleri işleyebilir, böylece dosya ayrıştırması yerine iş mantığına odaklanabilirsiniz.
Ön Koşullar
- JDK 8+ yüklü
- Maven veya Gradle bağımlılık yönetimi için
- Java sınıfları, metodları ve istisna yönetimi konusunda temel bilgi
- GroupDocs.Signature lisansına erişim (deneme veya tam)
Java için GroupDocs.Signature Kurulumu
Maven Kurulumu
Bağımlılığı pom.xml dosyanıza ekleyin:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle Kurulumu
Ya da build.gradle dosyanıza ekleyin:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Manuel indirmeleri tercih mi ediyorsunuz? En son sürümü doğrudan GroupDocs indirme sayfasından alabilirsiniz.
Lisansınızı Almak
- Free Trial – hemen başlayın, taahhüt yok
- Temporary License – değerlendirme için tam özellik erişimi
- Full License – üretim hazır, sınırsız kullanım
Kurulumu hızlı bir başlatma kodu ile doğrulayın:
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.");
}
}
Pro tip:
"YOUR_DOCUMENT_PATH"ifadesini gerçek bir PDF, DOCX veya XLSX dosyasıyla değiştirin. Konsol başarı mesajını yazdırıyorsa, hazırsınız.
Barkod İmza Türlerini Anlamak
Barkodlar, bir belge içinde makine tarafından okunabilir veri gömer. El yazısı imzaların aksine, kimlikler, zaman damgaları, URL’ler veya JSON yükleri depolayabilirler ve bu da onları otomatik doğrulama için ideal kılar.
| Barkod Türü | En İyi Kullanım Alanı | Tipik Veri Uzunluğu |
|---|---|---|
| QR Code | Yüksek yoğunluklu veri, URL’ler, çok satırlı metin | Maksimum 4.296 karakter |
| Code128 | Alfanümerik izleme numaraları | Değişken |
| Code39 | Basit eski kodlar | Maksimum 43 karakter |
| DataMatrix | Küçük etiketler, sağlık kayıtları | Maksimum 2.335 karakter |
| EAN/UPC | Ürün tanımlama, perakende | 8‑13 rakam |
Bar kodları, hızlı makine okuması, yapılandırılmış veri veya müdahale tespitli imzalama gerektiğinde sıkça kullanırsınız.
Java’da barkod sayfalarını nasıl ararsınız?
Signature işlenecek belgeyi temsil eden birincil sınıftır. Belgenizi new Signature("file.pdf") ile yükleyin, BarcodeSearchOptions barkod imzalarını aramak için parametreleri tanımlar ve istediğiniz sayfalara hedeflemek için yapılandırın, ardından signature.search(options) çağırın. search metodu verilen seçeneklerle arama işlemini yürütür. Motor, sayfa numaraları, çözülen metin ve geometrik koordinatları içeren BarcodeSignature nesnelerinin bir listesini döndürür—hepsi tek bir çağrıda. Bu tek‑adım deseni, ayrı görüntü çıkarma veya özel çözümleme mantığı ihtiyacını ortadan kaldırır.
Şimdi genel akışı anladığınıza göre, uygulayacağınız üç temel özelliğe dalalım.
Özellik 1: Belge Arama Olaylarına Abone Olma
Bunun önemi
Büyük partileri işlerken, gerçek zamanlı geri bildirim (ör. ilerleme çubukları) kullanıcı deneyimini iyileştirir ve tıkanmaları erken tespit etmenize yardımcı olur.
Tanım referansı
Signature belgeyi temsil eder ve olay abonelik yetenekleri sağlar.
Implementation
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");
}
});
Bu üç işleyici, başlangıç zamanını, canlı ilerlemeyi ve son istatistikleri sağlar—günlük kaydı veya UI güncellemeleri için mükemmeldir.
Özellik 2: Belirli Sayfalar İçin Barkod Arama Seçeneklerini Yapılandırma
Ayrıntılı kontrolün önemi
200 sayfalık bir sözleşmenin her sayfasını taramak CPU döngülerini boşa harcar. Yalnızca ilk ve son sayfaları hedeflemek, çalışma süresini %80’e kadar azaltabilir.
Tanım referansı
PagesSetup, arama işlemi içinde hangi sayfaların dahil edileceğini belirtir.
Implementation
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 metin aramasını ince ayarlamanızı sağlar (
Contains,Exact,StartsWith,EndsWith). setAllPagesvePagesSetupayarlarını yalnızca barkod belirli sayfaları aramak için değiştirin.
Özellik 3: Aramayı Yürütme ve Sonuçları İşleme
Bu adımın önemi
Barkodları bulmak sadece hikayenin yarısıdır—veri üzerinde bir şeyler yapmanız gerekir (ör. doğrulama, depolama veya iş akışlarını tetikleme).
Tanım referansı
BarcodeSignature, tespit edilen bir barkodu temsil eder ve sayfa numarası ve çözülen metin gibi özelliklerini içerir.
Implementation
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);
}
Artık bir BarcodeSignature nesnesi listesine sahipsiniz, her biri şunları sunar:
getPageNumber()– barkodun bulunduğu sayfagetEncodeType()– QR, Code128 vb.getText()– çözülen yük- Pozisyon (
getLeft(),getTop()) ve boyut (getWidth(),getHeight())
Örnek: Son sayfada yalnızca QR kodlarını işleme
for (BarcodeSignature barcodeSignature : signatures) {
if (barcodeSignature.getPageNumber() == lastPageNumber
&& barcodeSignature.getEncodeType().equals("QRCode")) {
// Process only QR codes from the final page
processApprovalCode(barcodeSignature.getText());
}
}
Gerçek Dünya Uygulamaları
| Senaryo | Barkod‑belirli‑sayfa araması nasıl yardımcı olur |
|---|---|
| Hukuki sözleşme doğrulama | İmza sayfasındaki QR‑kodlu sertifika hashlerini otomatik doğrulama |
| Tedarik zinciri takibi | Manifestlerin ilk/son sayfalarında Code128 gönderi kimliklerini bulma |
| Sağlık onay formları | Son onay sayfasından DataMatrix hasta kimliklerini çıkarma |
| Fatura otomasyonu | Faturada herhangi bir yerde “APPR‑” önekli barkodları bulma ve yönlendirme |
Yaygın Sorunlar ve Çözümler
Sorun 1 – Görünür barkodlara rağmen sonuç yok
// Ensure you are not limiting pages too aggressively
options.setAllPages(true);
Eğer barkod raster görüntü olarak gömülmüşse, görüntü‑tabanlı algılama için GroupDocs.Image kullanmayı düşünün.
Sorun 2 – Büyük dosyalarda yavaş performans
PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setLastPage(true); // Most signatures are on the last page
pagesSetup.setFirstPage(true);
options.setPagesSetup(pagesSetup);
Hedeflenen sayfalar işlem süresini büyük ölçüde azaltır; iki sayfaya sınırladığınızda 150 sayfalık bir PDF ~4 saniyeden <1 saniyeye düşer.
Sorun 3 – TextMatchType beklenen barkodları bulamıyor
String searchText = "12345".trim().toLowerCase();
options.setText(searchText);
options.setMatchType(TextMatchType.StartsWith); // Try a more permissive mode
Sorun 4 – Uzun süren döngülerde bellek sızıntıları
try‑with‑resources bloğu Signature örneğini otomatik olarak serbest bırakır.
try (Signature signature = new Signature("document.pdf")) {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
// Process signatures
}
Üretim İçin En İyi Uygulamalar
Sağlam hata yönetimi
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);
}
Belgeler değişmez olduğunda sonuçları önbelleğe al
Map<String, List<BarcodeSignature>> cache = new ConcurrentHashMap<>();
public List<BarcodeSignature> getCachedSignatures(String docId) {
return cache.computeIfAbsent(docId, id -> performSearch(id));
}
UI geri bildirimi için ilerleme olaylarını kullan
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
updateProgressBar(percent);
}
});
Barkod yüklerini doğrula
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);
}
}
Belge türüne göre sayfa seçimini optimize et
PagesSetup contractsSetup = new PagesSetup();
contractsSetup.setLastPage(true); // Contracts usually signed on last page
options.setPagesSetup(contractsSetup);
Aramadan sonra barkod tipine göre filtrele (yalnızca QR kodları gerekiyorsa)
for (BarcodeSignature sig : signatures) {
if ("QRCode".equals(sig.getEncodeType())) {
// Process QR code
}
}
Barkod görüntü boyutlarını çıkar (renderleme için gerekliyse)
for (BarcodeSignature sig : signatures) {
int width = sig.getWidth();
int height = sig.getHeight();
// Use dimensions for overlay or thumbnail generation
}
Sık Sorulan Sorular
S: Bir çağrıda birden fazla barkod formatını arayabilir miyim?
C: Evet. BarcodeSearchOptions varsayılan olarak tüm desteklenen formatları arar. Yalnızca belirli tipleri istiyorsanız sonuçları getEncodeType() ile filtreleyin.
S: Hem barkod hem de görüntü imzaları içeren belgeler nasıl işlenir?
C: Ayrı aramalar yapın—barkodlar için BarcodeSignature.class ve görüntü imzaları için ImageSignature.class kullanın, ardından gerektiği gibi sonuçları birleştirin.
S: Tüm sayfaları aramanın, belirli sayfaları aramaya göre performans etkisi nedir?
C: 50 sayfalık bir PDF’nin her sayfasını taramak 3–5 saniye sürebilir. İlk + son sayfalara sınırlamak genellikle 1 saniyenin altında biter.
S: Bu, taranmış PDF’lerde (raster görüntüler) çalışır mı?
C: Yalnızca barkod dijital imza nesnesi olarak eklenmişse çalışır. Sadece raster barkodlar için görüntü‑tabanlı barkod tanıyıcı gerekir (ör. GroupDocs.Barcode).
S: Bir barkod imzasının değiştirilmediğini nasıl doğrularım?
C: Barkod yüküne bir hash veya dijital imza gömün, ardından orijinal veride hash’i yeniden hesaplayıp karşılaştırın. Bunun için orijinal imzalama anahtarı veya sertifikası gerekir.
Son Güncelleme: 2026-06-21
Test Edilen Versiyon: GroupDocs.Signature 23.12 for Java
Yazar: GroupDocs