Use cases · Logistique et expédition

PDF d'étiquettes d'expédition à l'échelle transporteur

Générez des étiquettes thermiques 4×6 avec codes-barres vectoriels GS1-128, ITF-14 et SSCC-18. Le rendu à l'edge maintient le p99 sous 15 ms, même pendant les pics Black Friday.

Job to be done

Générer des étiquettes d'expédition thermiques 4×6 prêtes pour les transporteurs, avec codes-barres vectoriels GS1-128, ITF-14 et SSCC-18, directement depuis le JSON de commande, sans lancer un navigateur headless par requête. La sortie doit rester scannable à 203 dpi sur imprimantes Zebra/SATO/Honeywell et rester sous 15 ms de p99 pendant les pics de distribution.

Why gPdf for this

  • Code 128, QR, DataMatrix, PDF417 et GS1-128 / ITF-14 / SSCC-18 vectoriels : précision sous-pixel à 203 dpi, 300 dpi et 600 dpi.
  • Précision des coordonnées à 0,1 mm : respecte les tolérances de longueur totale imposées par les transporteurs pour les lignes lisibles par l'humain.
  • Le format de page `label_4_6_in`, ainsi que `label_4_8_in` et `label_a6`, est préconfiguré pour les formats dominants d'imprimantes thermiques.
  • Déterminisme : le même JSON de commande produit un PDF identique octet pour octet, afin que les réimpressions en entrepôt ne créent jamais une étiquette différente.
  • Rendu à l'edge : p50 3 ms, p99 8 ms, même lorsque 50 000 étiquettes s'impriment dans la même minute à l'enlèvement transporteur.
  • Sans état : l'étiquette existe en mémoire environ 4 ms dans un isolate Cloudflare Worker, puis elle est libérée. Pas de stockage documentaire, pas de surface de fuite pour les données de transporteur.

Sample request

POST /api/v1/pdf/render : étiquette thermique 4×6 minimale avec un code-barres Code 128 de suivi transporteur.

{
  "pages": [{
    "size": "label_4_6_in",
    "elements": [
      {
        "type": "text",
        "x": 4, "y": 6,
        "content": "SHIP TO",
        "style": { "font_size": 8, "font_family": "NotoSans-Regular" }
      },
      {
        "type": "text",
        "x": 4, "y": 12,
        "content": "Acme Distribution Centre\n1200 Logistics Pkwy\nMemphis TN 38116",
        "style": { "font_size": 11, "font_family": "NotoSans-Regular" }
      },
      {
        "type": "barcode",
        "format": "code128",
        "content": "1Z999AA10123456784",
        "x": 4, "y": 60,
        "width": 92, "height": 22,
        "barcode_text": { "enabled": true, "position": "bottom" }
      }
    ]
  }]
}

Compliance and conformance

  • Spécifications générales GS1 : largeur de module (X-dimension), zone silencieuse et longueur totale respectent les tolérances de la section 5.4 de GS1 à 203 dpi.
  • Exigences transporteurs : UPS, FedEx, DHL et USPS acceptent la sortie rendue comme scannable, sans post-traitement par transporteur.
  • PDF/A-2b disponible pour l'archivage via `settings.profile = "pdfa-2b"` si vous devez conserver le PDF d'étiquette pour des raisons fiscales ou d'audit.

La charge étiquette d’expédition, en un paragraphe

Chaque commande produit un PDF, chaque PDF est imprimé une fois sur une imprimante thermique, et le mode de panne si vous êtes lent n’est pas “la page charge lentement” : c’est “l’enlèvement entrepôt attend derrière votre API de rendu d’étiquettes”. L’expédition est un cas où la latence p99 est la métrique produit, où le rendu déterministe compte parce que les réimpressions sont courantes, et où la qualité des codes-barres, mesurée en tolérances GS1 de X-dimension plutôt qu’en pixels, décide si vos scanners lisent l’étiquette au premier passage.

Les piles PDF basées sur un navigateur headless peinent à tenir ces trois contraintes en même temps : le coût des démarrages à froid s’accumule pendant les pics, les codes-barres raster se dégradent sur les petites étiquettes thermiques, et la rasterisation des polices dérive entre versions de Chromium. Une réimpression identique octet pour octet devient donc impossible.

Pourquoi gPdf convient

Une étiquette thermique 4×6 est petite (576 × 864 pixels à 203 dpi), avec peu d’éléments (blocs de texte, 1 à 2 codes-barres et éventuellement un logo transporteur), et à fort volume (un 3PL de taille moyenne génère 50 000 à 500 000 étiquettes par jour). C’est la charge pour laquelle gPdf est conçu. Le moteur :

  1. Compile la mise en page une seule fois : coordonnées de page, cascades de polices et géométrie des codes-barres sont résolues à la requête, sans moteur de mise en page navigateur.
  2. Vectorise chaque code-barres : les modules sont dessinés directement dans le flux PDF, pour qu’un GS1-128 de 30 mm de large reste lisible à 203 dpi ou 600 dpi sans logique de rasterisation dépendante du DPI côté client.
  3. Intègre NotoSans CJK + Latin : le même corps de requête rend correctement un nom de transporteur chinois sans que vous provisionniez des polices dans un conteneur de rendu.

Le p99 reste stable à 8 ms sur notre charge de référence (1 000 invocations de l’exemple ci-dessus en EU-WEST), qu’un même isolate ait rendu une étiquette ou 10 000.

Volume et calcul de coût

Un 3PL de taille moyenne fonctionne souvent autour de 50 000 étiquettes/jour, soit environ 1,5 million par mois. Sur le plan Basic (5 USD/mois pour 100 000 pages, puis 0,00005 USD par page supplémentaire), cela donne :

1,5 million de pages × 0,00005 USD = 75,00 USD de dépassement
+ base du plan Basic                    =  5,00 USD
────────────────────────────────────────────────────
total                                    = 80,00 USD / mois

La même charge sur Puppeteer-on-Lambda se situe dans la fourchette 200 à 400 USD/mois avec des réglages Lambda de concurrence typiques, avant même d’intégrer le coût des démarrages à froid pendant les pics.

Black Friday : exemple chiffré

Le pic est le scénario où le rendu à l’edge montre le plus clairement son intérêt. Un client de distribution qui atteint 200 % du volume normal d’étiquettes pendant la première heure du Black Friday, par exemple 100 000 étiquettes en 60 minutes, soit 1 700 étiquettes/minute en moyenne avec des rafales à 5 000/minute, termine dans un seul pool régional Cloudflare Workers, sans coût de démarrage à froid. La même charge sur un pool Puppeteer dimensionné pour le trafic moyen produit des démarrages à froid de 1,5 à 2,5 s sur les conteneurs créés pendant la rafale, et le comptoir d’enlèvement de l’entrepôt les ressent tous.

Où aller ensuite