Trường hợp sử dụng · Logistics và vận chuyển

PDF nhãn vận chuyển ở quy mô vận hành của hãng vận chuyển

Kết xuất nhãn vận chuyển nhiệt 4x6 với mã vạch vector GS1-128, mã carton ITF-14 và ID pallet SSCC-18. Kết xuất tại Edge giữ p99 dưới 15 ms, kể cả khi có spike Black Friday.

Việc cần giải quyết

Kết xuất nhãn vận chuyển nhiệt 4x6 sẵn sàng cho hãng vận chuyển, bao gồm mã vạch vector GS1-128, ITF-14 và SSCC-18, trực tiếp từ JSON đơn hàng mà không khởi động headless browser cho từng request. Đầu ra phải quét ổn định ở 203 dpi trên máy in Zebra/SATO/Honeywell và giữ p99 dưới 15 ms trong các đợt tăng tải bán lẻ.

Vì sao dùng gPdf cho việc này

  • Vector Code 128, QR, DataMatrix, PDF417 và GS1-128 / ITF-14 / SSCC-18, chính xác ở mức sub-pixel tại 203 dpi, 300 dpi và 600 dpi.
  • Độ chính xác tọa độ 0,1 mm, đáp ứng dung sai overall length cho dòng diễn giải human-readable của hãng vận chuyển.
  • Page size `label_4_6_in` cùng `label_4_8_in` và `label_a6` được cấu hình sẵn cho các định dạng máy in nhiệt phổ biến.
  • Tính xác định: cùng một order JSON kết xuất ra PDF byte-identical, nên in lại trong kho không tạo ra nhãn 'khác'.
  • Kết xuất tại Edge: p50 3 ms, p99 8 ms, kể cả khi 50.000 nhãn được in trong cùng một phút lúc hãng vận chuyển đến lấy hàng.
  • Stateless: nhãn tồn tại trong bộ nhớ khoảng 4 ms trong Cloudflare Worker isolate rồi được giải phóng. Không có kho lưu tài liệu, không mở thêm bề mặt rò rỉ dữ liệu hãng vận chuyển.

Request mẫu

POST /api/v1/pdf/render - nhãn nhiệt 4x6 tối giản với mã vạch tracking Code 128 của hãng vận chuyển.

{
  "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" }
      }
    ]
  }]
}

Tuân thủ và hợp chuẩn

  • GS1 General Specifications: module width (X-dimension), quiet zone và overall length khớp dung sai GS1 Section 5.4 ở 203 dpi.
  • Yêu cầu của hãng vận chuyển: UPS, FedEx, DHL và USPS chấp nhận đầu ra được kết xuất là có thể quét; không cần post-processing riêng cho từng hãng vận chuyển.
  • Có PDF/A-2b để lưu trữ qua `settings.profile = "pdfa-2b"` nếu bạn cần giữ PDF nhãn cho mục đích thuế hoặc audit.

Bài toán nhãn vận chuyển trong một đoạn

Mỗi đơn hàng tạo ra một PDF, mỗi PDF thường được in một lần trên máy in nhiệt, và khi hệ thống chậm thì kiểu lỗi không phải là “trang tải chậm” mà là “quầy pickup trong kho đang phải chờ API kết xuất nhãn của bạn”. Đây là bài toán mà p99 latency chính là chỉ số sản phẩm, đầu ra xác định rất quan trọng vì in lại là chuyện thường ngày, và chất lượng mã vạch - đo bằng dung sai GS1 X-dimension chứ không phải pixel - quyết định máy quét có đọc được nhãn ngay lần đầu hay không.

Các stack PDF dựa trên headless browser thường gặp cả ba vấn đề cùng lúc: cold start bị nhân lên khi có spike, mã vạch raster xuống chất lượng trên nhãn nhiệt nhỏ, và font rasterisation thay đổi giữa các phiên bản Chromium, nên gần như không thể in lại một file giống hệt theo byte.

Vì sao gPdf phù hợp

Nhãn nhiệt 4x6 nhỏ (576 x 864 pixel ở 203 dpi), ít element (khối văn bản + 1-2 mã vạch + logo hãng vận chuyển tùy chọn), và volume cao (một 3PL cỡ vừa có thể kết xuất 50.000-500.000 nhãn mỗi ngày). Đó là tải công việc mà gPdf được xây cho. Renderer:

  1. Biên dịch bố cục một lần - tọa độ trang, font cascade và hình học mã vạch được giải quyết ở thời điểm request, không đi qua browser layout engine.
  2. Vector hóa mọi mã vạch - module được vẽ trực tiếp vào PDF stream, nên GS1-128 rộng 30 mm vẫn đọc sạch ở 203 dpi hoặc 600 dpi mà phía bạn không cần logic rasterisation theo DPI.
  3. Nhúng NotoSans CJK + Latin - cùng một payload có thể kết xuất đúng tên hãng vận chuyển bằng tiếng Trung mà bạn không phải provisioning font trên render container.

p99 ổn định ở 8 ms trên workload tham chiếu của chúng tôi (1.000 lượt gọi mẫu ở trên tại EU-WEST), bất kể một isolate mới chỉ kết xuất một nhãn hay đã kết xuất 10.000 nhãn.

Bài toán volume và chi phí

Một 3PL cỡ vừa thường chạy khoảng 50.000 nhãn/ngày, tức khoảng 1,5 triệu nhãn/tháng. Trên Basic plan (5 USD/tháng cho 100.000 trang, 0,00005 USD mỗi trang vượt mức):

1,5 triệu trang x 0,00005 USD = 75,00 USD phí vượt mức
+ phí Basic plan              =  5,00 USD
------------------------------------------
tổng                          = 80,00 USD/tháng

Cùng tải công việc đó trên Puppeteer-on-Lambda thường nằm trong khoảng 200-400 USD/tháng ở cấu hình Lambda concurrency phổ biến, chưa tính chi phí cold start trong giờ peak.

Black Friday: một ví dụ cụ thể

Đợt tăng tải cao điểm là nơi kết xuất tại Edge thể hiện rõ giá trị nhất. Một khách hàng bán lẻ tăng lên 200% volume nhãn bình thường trong giờ đầu Black Friday - ví dụ 100.000 nhãn trong 60 phút, trung bình 1.700 nhãn/phút và burst peak 5.000 nhãn/phút - vẫn hoàn tất trong một pool Cloudflare Workers region mà không có chi phí cold start. Cùng tải đó trên Puppeteer warm pool được cấu hình theo traffic trung bình sẽ tạo cold start 1,5-2,5 giây ở các container phải mở thêm khi burst, và quầy pickup trong kho cảm nhận từng lần chậm đó.

Nên xem tiếp ở đâu