Barcode, який чітко друкується в офісі, може не читатися на thermal printer у 3PL за 5,000 miles. CI мовчить, Acrobat виглядає ідеально, але рахунок приходить як 0.25 per unit** relabel в Amazon FBA inbound, **5–10 per non-compliant carton у Walmart або затримані pallets на прийманні.
Типова причина: PDF містить зображення barcode, а не інструкції його малювання. Коли це зображення resize у print pipeline, ширини штрихів втрачають точність, потрібну scanner.
В одній таблиці
| Питання | Barcode як drawing instructions (vector) | Barcode як picture (raster PNG) |
|---|---|---|
| Розмір PDF | ~1 KB | ~50–300 KB |
| Витримує resizing | Так, printer перемальовує математично | Ні, кожен resize губить різкість |
| ISO 15416 print-quality grade | Лишається A | Падає з A до C/D |
| Ризик Walmart SSCC-18 | Низький | Високий |
| Amazon FBA $0.25-per-unit relabel | Рідко | Типово для bad templates |
| Вартість переходу | Renderer, що emit paths | Engineering project |
Ключове питання для scan PDF: це drawing instructions чи picture?
Для бізнесу: що реально відбувається і скільки це коштує
Історія 1 — палета Walmart, яку ніхто не зміг прочитати
У Walmart label виглядає добре в Acrobat. На dock команда сканує SSCC-18 pallet. Якщо 3 із 50 не читаються, receiving lead звіряє з EDI 856 ASN, WMS бачить discrepancy, може піти EDI 824 application advice, далі ручне введення, затримка slot і labelling violation chargeback. У 2026 це часто $5–10 per non-compliant carton. Повторення загрожує buyer review status.
Історія 2 — Amazon FBA shipment із повільним chargeback
В Amazon FBA shipment на 50,000 units із 2–5 % unreadable FNSKU може піти на manual relabel. При 0.25 per unit** 5% дає **625 за shipment; щомісяця це $7,500/year.
Історія 3 — exception line у UPS / FedEx
В UPS / FedEx tracking barcode, який не читається, веде parcel на exception-handling line. Людина вводить номер, виникає 12–24 hour delay. Вартість видно в support tickets, NPS і account audits.
Спільний мотив у всіх трьох
Усі ці випадки мають одне: barcode дійшов до printer як image, не як drawing instructions.
Чому це так часто трапляється
Складність не в тому, щоб окремо згенерувати векторний barcode: сучасні barcode-бібліотеки можуть віддавати точний SVG. Складність у тому, щоб вбудувати цей вектор у PDF як native PDF path operators, а не як embedded image. Для цього PDF-генератор і barcode engine мають бути спроєктовані разом. Значно простіший шлях — викликати barcode-бібліотеку, взяти PNG і вставити його як Image XObject. Більшість PDF-стеків саме так і робить, а склад бачить цей архітектурний shortcut уже на термопринтері.
QA та operations: чому падає grade
Стандарти, які вже використовує ваш складський сканер
Два стандарти задають якість:
- ISO/IEC 15416 для 1D: Code 128, GS1-128, ITF-14, EAN, UPC.
- ISO/IEC 15415 для 2D: QR, DataMatrix, PDF417, Aztec.
Verifier міряє сім parameters і дає grade від A (4.0) до F (0.0). Retailers і carriers зазвичай вимагають grade C or better.
| Parameter | Що перевіряє | Як шкодить raster PNG |
|---|---|---|
| Decodability | Ширини в tolerance | Resampling зміщує ширини |
| Edge contrast | Гострі краї | Antialiasing створює сірі pixels |
| Modulation | Рівномірний contrast | Dithering робить dots |
| Defects | Specks або voids | Artefacts стають чорнилом |
| Min reflectance | Bars достатньо темні | Resize залишає voids |
| Symbol contrast | Загальний contrast | Lossy compression згладжує |
| Quiet zone | Біле поле | Auto-crop може обрізати |
Vector не має source pixel grid для resampling. Raster втрачає grade на кількох етапах і доходить до C/D.
Друкарський пайплайн погіршує проблему
PNG проходить viewer растеризація, print driver растеризація, color conversion, “fit to printable area”, PDF/A flattening і thermal head smear. Vector path operators обходять багато resampling stages, бо printer рахує bars із geometry на native DPI.
Для QA: орендуйте ISO 15416 verifier (Cognex, Keyence, REA VeriCube, часто $1–2K/week) і виміряйте 50 labels із найбільшого retail flow. Середнє нижче B — підозрюйте raster barcode.
Для інженерів: що всередині PDF
Два способи розмістити barcode на сторінці
Два типи visible object:
- Path: operators
re,f,m/l,Sу floating-point coordinates. - Image XObject: embedded PNG / JPEG / raw bitmap, який треба resample.
Vector Code 128 — це десятки re/f і менше 1 KB. Raster Code 128 — /Im0 Do на PNG приблизно 270 KB.
% Vector — what the renderer should produce
0 0 0.40 22 re f % bar 1: 0.40mm wide, 22mm tall
0.99 0 0.40 22 re f % bar 2 ...
1.97 0 0.40 22 re f % ~60 lines like this, ~1 KB total
% Raster — what most stacks actually produce
348 0 0 84 0 0 cm % scale a 348×84 pixel image to 92mm × 22mm
/Im0 Do % insert the embedded PNG (~270 KB)
Перевірка PDF за 3 хвилини
1. Zoom 800 %. Vector лишається чітким; raster показує pixels.
2. Список embedded images:
$ pdfimages -list shipping-label.pdf
page num type width height color comp bpc enc object x-ppi size
─────────────────────────────────────────────────────────────────────────────
1 0 image 348 84 gray 1 1 ccitt 8 0 300 270K
Якщо є image з пропорціями barcode, це raster. Vector barcode тут не з’явиться.
3. Content stream:
$ qpdf --qdf shipping-label.pdf - | grep -A2 -B2 ' re$'
Vector Code 128 дає щільний блок re/f. Один /Im0 Do без rectangle поруч означає image.
Що робить gPdf
gPdf використовує xBarcode, власний Rust engine тієї ж команди, не wrapper. xBarcode рахує pattern, а gPdf пише його в PDF content stream як re/f rectangle operators. Без PNG, source DPI чи raster surface.
- Публічно перевіряється. xBarcode працює як безкоштовний tool на xbarcode.ai. Вставте payload, завантажте SVG / PNG / EPS і перевірте path output.
- Вимірювана performance. xBarcode генерує standard 1D code за ~4 µs single core (v1.5.4), 6× швидше за
fast_qrі 30× швидше заrxing. Через gPdf на Cloudflare Workers: ~30 ms p50 worldwide.
GS1 layer також є: 750+ Application Identifiers, strict / lenient validation, automatic FNC1 separator insertion, per-AI length / charset checks. (01)09504000059101(17)260315 валідиться до encoding.
PDF/A-1b through 4 compatible; та сама DocumentRequest дає deterministic content streams.
Коли raster ще можливий
Два випадки: internal-only documents без reliable scan або marketing artwork, де barcode зафіксований у зображенні. Друге — свідомий technical debt.
Для shipping labels, FNSKU labels, payslips, invoice line-item barcodes, voucher PDFs, ticket QR codes, retail trade-item labels і pharmaceutical serialisation default має бути vector.
Висновок
Для PDF stack, який піде в scan workflow, не достатньо питати про підтримку QR / Code 128 / GS1-128. Питайте:
Коли я прошу barcode, результат — drawing instructions чи embedded picture?
Якщо picture, scan failure rate матиме нижню межу. Дешевий перший крок: запустіть pdfimages -list на останніх 100 outbound label PDFs і порахуйте barcode-shaped image objects.
Дивіться також
- xBarcode — the engine, on its own — barcode-рендеринг gPdf працює на xBarcode, спорідненому Rust-рушії, який доступний як незалежний безкоштовний tool. Вставте payload, завантажте SVG і перевірте path. Той самий engine і той самий output потрапляють у ваші PDF від gPdf.
- GS1-128 з точністю 0,1 mm у JSON — історія X-dimension після усунення raster failure mode.
- PDF для shipping labels у carrier-grade масштабі — конкретна форма request для Code 128 carrier-tracking label на термальному форматі 4×6.
- Повний barcode reference — усі підтримувані symbology, sizing fields і блок
barcode_textдля human-readable interpretation line.