Блог

Векторний чи растровий barcode у PDF: невидимий chargeback

Barcode, ідеальний в Acrobat, може провалитися на складському сканері. Чому це коштує грошей і як перевірити PDF за три хвилини.

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.