Fiziksel ürün gönderiyorsanız, sonunda gerçek depo ışığında ve gerçek mesafede okunacak bir GS1-128 barkod basmanız gerekir. Küçük bir etiket ayrıntısı gibi görünür, ama PDF üretiminde en gürültülü hata kaynaklarından biridir.
Bu yazı GS1-128 için “0,1 mm hassasiyet” ne demektir, HTML/CSS tabanlı renderer’lar bunu neden zor tutar ve DHL, FedEx, USPS veya Amazon inbound scanner akışlarında hangi kurallar rejection oranını düşürür, bunları anlatır.
Barkod hassasiyeti ne demektir
GS1-128 (eski adıyla UCC/EAN-128) veriyi bar ve boşluk genişlikleri ile kodlar. Temel birim X-dimension değeridir: en dar bar veya boşluk genişliği. Diğer genişlikler X’in katlarıdır.
Scanner görüntüye değil, göreli genişliklere bakar. Production’da en yaygın iki sorun:
- Sembol içinde tutarsız X-dimension: renderer komşu barlarda farklı sub-pixel rounding yapar.
- Yanlış toplam uzunluk veya scaling: sembol render edilir, sonra ölçeklenir ve X-dimension GS1 minimumunun altına iner; 1,0× için genelde 0,495 mm.
Tek örnek okunabilir, ama üretim batch’inde 30 etiketten biri reddedilir. Development scanner çoğu zaman depo scanner’ından daha toleranslıdır.
0,1 mm kuralı
Buradaki hassasiyet barkodun toplam uzunluğunun spec hedefinden 0,1 mm tolerans içinde kalmasıdır. Her bar 0,1 mm demek değildir; barlar genellikle 0,495 mm veya daha geniştir.
18 rakam taşıyan tipik bir GS1-128 için:
- Sembol yaklaşık 120 bar ve boşluk içerir
- 1,0× büyütmede toplam uzunluk yaklaşık 58 mm’dir
- 0,1 mm toplam tolerans ~0,17% doğruluk demektir
- Bar başına bütçe yaklaşık 0,001 mm’ye iner
Bu yüzden 7,4 px olması gereken bir barın 7 px çizilmesi bile ölümcül olabilir. Sub-pixel rounding sembol boyunca birikir.
HTML/CSS neden zorlanır
Yaygın yol: GS1-128 verisinden SVG üretmek, HTML içine gömmek, sonra Puppeteer veya Prince ile PDF almak. Her aşama geometriyi kaydırabilir.
1. Browser rasterizasyon sırasında yuvarlar
HTML içindeki SVG bile browser painter’dan geçer. shape-rendering="crispEdges", integer pixel boundary ve DPI-bar width uyumu gerekir. Bunlardan biri kolayca bozulur.
2. CSS sessizce ölçekleyebilir
Başka bir layout sorununu düzeltmek için eklenmiş transform: scale(0.95) sayfadaki tüm barkodları bozar. PDF iyi görünür; scanner farklı ölçer.
3. PDF emitter koordinatları quantize eder
Bazı motorlar PDF yazarken koordinatları internal grid’e snap eder. Sonuç neredeyse doğru görünür, ama hata birikir.
4. Code 128 font kullanmak daha riskli
Font vector olabilir, fakat font hinting küçük boyutlarda insan gözü için genişlikleri değiştirir. Scanner için gereken şey bunun tersidir.
Structured rendering yaklaşımı
gPdf, GS1-128 specification’dan bar/gap pattern hesaplar ve doğrudan PDF vector primitives yazar: HTML yok, SVG translation yok, font hinting yok.
{
"pages": [{
"size": "label_100_150",
"elements": [
{
"type": "barcode",
"format": "gs1128",
"content": "(00)123456789012345678",
"x": 4,
"y": 8,
"width": 58.0,
"height": 18.0,
"barcode_text": { "enabled": true, "position": "bottom" }
}
]
}]
}
barcode element’inde width, mm cinsinden sembolün toplam uzunluğudur; basılı etikette kumpasla ölçebileceğiniz değer budur. width: 58.0 şu anlama gelir:
- Renderer hedef uzunluk ve bar count’tan X-dimension hesaplar.
- Her bar aynı X-dimension ile çizilir.
- Genişlikler PDF’e floating-point coordinates olarak yazılır.
- CSS pixel rounding, layout scaling ve font hinting yoktur.
Printer kendi scaling’ini eklemezse toplam uzunluk hedefin 0,1 mm içinde kalır.
Ne basılmalı
Kural 1: toplam uzunluğu belirtin
width doğru ayardır çünkü ölçülebilir. Sadece X-dimension belirtmek, symbol length’i encoded data’ya bağımlı yapar.
- 4×6 in shipping label: 100 mm genişlik; GS1-128 genelde ~58–72 mm
- 4×4 in compliance label: ~45–58 mm
- 2×1 in carton label (Amazon UPC): GS1-128 alanı değil; UPC-A kullanın
Kural 2: quiet zone her zaman
GS1-128 her iki tarafta ≥ 10X quiet zones ister. 1,0× için (X = 0,495 mm), bu en az 4,95 mm temiz beyaz alan demektir. Barkodu x: 0 konumuna itmek scanner’ın başlangıcı bulmasını engelleyebilir. gPdf bunu otomatik ayırır.
Kural 3: hedef scanner ile test edin
Telefon kamerası Honeywell veya Zebra endüstriyel scanner’dan daha toleranslıdır. Production printer’da 50 label basın, gerçek hızda gerçek scanner ile okutun. Read rate 99% altındaysa X-dimension tutarlılığını inceleyin.
Multi-format gerçekliği
Etiketinizde çoğu zaman sadece GS1-128 yoktur:
| Symbol | Kullanım | Spec source |
|---|---|---|
| GS1-128 | Logistics units, GTIN + serial + lot | GS1 General Specifications |
| QR with FNC1 | Mobile-scannable ecommerce | ISO/IEC 18004 |
| Data Matrix | Pharmaceutical (DSCSA / EU FMD) | ISO/IEC 16022 |
| PDF417 | Drivers’ licences, boarding passes | ISO/IEC 15438 |
| Aztec | Transport tickets | ISO/IEC 24778 |
| MaxiCode | UPS specifically | ISO/IEC 16023 |
Sadece GS1-128 destekleyen renderer sonunda ikinci bir tool gerektirir. Logistics workflows genelde en az iki format ister.
Production scanner rejection teşhisi
- Failed label örneklerini alın.
- Kumpasla ölçün: toplam uzunluk ve X-dimension.
- Human-readable text’i kontrol edin.
- Quiet zones ölçün.
- Başka scanner model deneyin.
- Known-good reference label ile karşılaştırın.
TL;DR
GS1-128 hassasiyeti ince bar basmak değil; tüm sembolde X-dimension’ı tutarlı tutmaktır. HTML/CSS rendering zinciri birden fazla noktada sub-pixel drift üretir. Doğrudan PDF vector primitives yazan structured renderer bu kaynakları atlar.
Mevcut PDF stack’inizde 1–5% scanner rejection varsa güçlü işaret budur. Playground içinde width değerini label spec’e ayarlayıp GS1-128 örneğini render edin, basın ve kumpasla ölçün.