PDF417 Barcodes for Shipping and Logistics — What They Encode and How to Generate Them
If you have ever looked at a UPS, FedEx, or USPS shipping label and noticed the dense rectangular barcode near the tracking number, you have already seen a PDF417 in the wild.
PDF417 is the dominant 2D barcode format in North American parcel and freight logistics, used alongside linear Code 128 barcodes for redundancy and backward compatibility. This guide explains why logistics uses PDF417, what data fields it encodes, which label standards govern it, and how to generate compliant PDF417 barcodes for your own shipping workflows.
Why Logistics Uses PDF417
Shipping labels need to carry a lot of structured information in a small space: tracking number, sender address, recipient address, service type, weight, zone, sort destination, and sometimes hazmat or signature-required flags. Linear barcodes like Code 128 can only encode a single string, which means either multiple barcodes per label or loss of structured data.
PDF417 solves this with two key properties:
- High data capacity — up to 1,850 ASCII characters in a single symbol. A full shipping record with all fields fits in one barcode.
- Error correction — PDF417's Reed-Solomon error correction means up to 50% of a damaged barcode can be restored algorithmically. Labels take physical abuse — rain, abrasion, fold creases — and still need to scan at the destination warehouse.
Carrier-Specific PDF417 Usage
UPS
UPS labels use a PDF417 barcode (sometimes called the "MaxiCode + PDF417" combination) to encode:
- Tracking number (1Z format)
- Ship-to postal code and country code
- Service level (Ground, 2-Day Air, etc.)
- Package sequence (e.g., 1/3, 2/3, 3/3 for multi-piece shipments)
The PDF417 on a UPS label typically sits in the upper half of the label. The MaxiCode symbol (the circular target pattern) in the lower-left is read by high-speed conveyor belt scanners at sort facilities. PDF417 provides the secondary human-readable and handheld-scanner interface.
FedEx
FedEx Express and Ground labels follow a similar scheme. The primary data barcode is a PDF417 that encodes routing, service type, tracking number, and COD/signature flags. FedEx also embeds a GS1-128 linear barcode for backward compatibility with older infrastructure.
USPS
USPS Intelligent Mail Package Barcode (IMpb) uses a linear Intelligent Mail barcode (IMb) as the primary symbol, but PDF417 is required on Priority Mail and Parcel labels to carry the full routing record including sender address, recipient address, and special-service codes.
FreightPro and LTL Carriers
In less-than-truckload (LTL) freight, the VICS (Voluntary Interindustry Commerce Standards) Bill of Lading format specifies PDF417 as the standard for bill-of-lading barcodes. The VICS BOL PDF417 encodes shipper/consignee IDs, commodity class, weight, and pro number in a structured data format.
What Data Is Encoded in a Shipping PDF417
The exact structure depends on the carrier and label standard, but a typical shipping PDF417 encodes a structured record. Using GS1 Application Identifiers (AIs) is common when labels must be interoperable across systems:
| Field | GS1 AI | Example value |
|---|---|---|
| Global Trade Item Number | (01) | 00614141123452 |
| Serial Shipping Container Code | (00) | 006141411234567890 |
| Ship-to postal code | (420) | 90210 |
| Ship-to country (3-digit ISO) | (421) | 840 (USA) |
| Tracking / package ID | (91)–(99) | Carrier-specific |
| Weight in pounds | (3102) | 0500 (5.00 lb) |
| Number of pieces | (37) | 3 |
For carrier-specific proprietary formats (which most major carriers use), the PDF417 encodes a structured text record — often pipe-delimited or fixed-width — that maps to the carrier's internal field schema.
Label Specification Requirements
When generating PDF417 for shipping labels, the physical specification matters. Scan failure at a receiving dock or sort facility costs money. Key requirements:
Minimum size
Most carrier specifications require a PDF417 symbol of at least: - 1.5 inches wide × 0.5 inches tall at standard density - X-dimension (narrowest module width) of at least 7.5 mils (0.0075 inches)
At 203 DPI (common thermal printer), 7.5 mils = about 1.5 pixels per module — dangerously small. Use 300 DPI or higher for label printing.
Quiet zone
PDF417 requires a minimum quiet zone of 2× the X-dimension (2 modules) on all four sides. On a label, this means leaving white space around the barcode — do not let the barcode bleed to the edge of the label or touch other printed elements.
Error correction level
For shipping and logistics: - Level 3 is minimum for standard labels - Level 5 is recommended for outdoor / high-handling environments - Level 7 or higher for environments with frequent label damage (cold chain, wet freight)
Higher error correction reduces data capacity but dramatically improves scan reliability on damaged labels.
Color and contrast
Print in black on white or dark ink on a light background. Minimum contrast ratio of 70% (print reflectance vs. background reflectance per ISO 15415). Avoid colored labels, glossy coatings, or watermarks under the barcode area.
Generating a PDF417 Shipping Barcode
Online generator
PDF417 Studio generates correctly specified PDF417 barcodes in PNG, SVG, and PDF formats. For a shipping label:
- Go to the PDF417 Studio generator →
- Enter your tracking or payload data in the Payload field
- Under Advanced Options, set:
- Error correction level: 5 (or higher for rough handling)
- Columns: 5–8 (balances density vs. scan reliability)
- Scale: adjust so the output is at least 1.5 inches wide at your print DPI
- Export as PNG at 300 DPI or higher, or as SVG for vector output
API — batch generation for high-volume shipping
For shipping software, order management systems, or fulfillment pipelines that generate labels at scale, use the PDF417 Studio API:
bash
curl -sS -X POST https://www.pdf417-studio.com/api/generate \
-H "Content-Type: application/json" \
-d '{
"payload": "1Z9999W99999999999|RECIPIENT:90210|SVC:GROUND|PKG:1/1",
"error_correction": 5,
"columns": 6
}' \
| python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
open('shipping_label.png', 'wb').write(base64.b64decode(data['pngBase64']))
print('Label saved.')
"
For CSV batch generation (generating hundreds of labels at once from a spreadsheet), see the CSV batch guide →.
See the full API documentation → for authentication, quota tiers, and all generation parameters.
Verifying a Shipping Label Barcode Before Print
Printing thousands of labels only to find they fail to scan at the carrier hub is expensive. Use the Diagnose tool to verify before committing to a print run:
- Generate a test barcode at your target settings
- Upload the image to PDF417 Studio Diagnose →
- Check:
- ✅ Decoded payload matches your source data
- ✅ Contrast ratio ≥ 70%
- ✅ Quiet zone ≥ 2 modules on all sides
- ✅ Module width within your scanner's spec
Fix any flagged issues before sending to the printer.
Summary
PDF417 barcodes are the backbone of parcel and freight logistics because they can carry a full shipping record in a single symbol with strong error correction. Whether you are integrating with UPS, FedEx, USPS, or a custom WMS, the key is to generate at sufficient resolution and error correction level, and verify before printing at scale.
Resources: - Generate a PDF417 barcode → - Batch generate from CSV → - Scan and verify a barcode → - API documentation → - PDF417 vs QR vs Code 128 — which format to use →