Logistics operations deal with documents from multiple systems, carriers, and countries — each with different format requirements. A shipping label from FedEx is a PDF; your warehouse display system needs an image. A manifest from one carrier is XLSX; your TMS needs CSV. Customs documents come in from freight forwarders as DOCX or scanned TIFF. Photos from drivers documenting delivery or damage come in as HEIC from iPhones. Format conversion is a constant operational reality in logistics.
Format friction in logistics operations
Logistics teams encounter format conversion across carrier documents, warehouse operations, and data systems:
- Shipping label rendering — carrier-generated labels are typically PDF. Warehouse display systems, mobile apps, and web portals often need the label as a JPG or PNG for inline display without a PDF viewer.
- Manifest and customs document formats — commercial invoices, packing lists, and customs declarations come from shippers in DOCX, are generated by freight management systems as XLSX, and need to be PDF for carrier submission or customs filing.
- Driver and delivery documentation — drivers photograph proof of delivery, damaged goods, and delivery conditions with phones. HEIC photos need to be JPG before upload to the TMS or dispatch platform.
- Shipment data export — XLSX shipment reports, carrier invoices, and billing data need to be CSV before loading into analysis tools, ERP systems, or customs brokerage platforms.
- Cross-carrier document normalization — each carrier has different document format outputs. Normalizing before archiving or processing saves manual conversion time.
Common format pairs in logistics
The conversion routes logistics teams use most:
- PDF → JPG / PNG — convert shipping label PDFs to images for warehouse display systems, mobile apps, and web portal inline rendering
- HEIC → JPG — driver proof-of-delivery photos, damage documentation, and delivery condition photos for TMS upload
- DOCX → PDF — commercial invoices, packing lists, BOLs, and customs documents for carrier submission or filing
- XLSX → CSV — shipment data, carrier billing, and freight audit files for analysis and ERP ingestion
- XLSX → PDF — rate sheets, packing lists, and shipment summaries for customer or carrier delivery
- TIFF → JPG / PDF — scanned paper shipping documents, legacy carrier fax submissions, and customs forms
- CSV → XLSX — convert analysis output or TMS exports to Excel for non-technical stakeholders or brokers
- PNG → JPG — compress screenshot-based documentation for storage efficiency
The browser tool: quick document conversions in the warehouse
Image conversions at changethisfile.com run in the browser — HEIC → JPG, PDF → JPG (server-side, auto-deleted). For dispatch offices and warehouse operations where installing software on shared computers is impractical, the browser tool provides a reliable no-install conversion option.
The browser tool works well for:
- Drivers or dispatch converting proof-of-delivery photos before upload
- Converting a single shipping document before carrier submission
- XLSX → CSV exports for one-off analysis without software installation
API integration for TMS and logistics platforms
The endpoint is POST https://changethisfile.com/v1/convert. Source auto-detected from filename. No SDK needed. Get a free API key.
Convert a shipping label PDF to image
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-F "file=@fedex_label_${TRACKING_NUMBER}.pdf" \
-F "target=jpg" \
--output fedex_label_${TRACKING_NUMBER}.jpg
Normalize a driver delivery photo
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-F "file=@pod_photo_${SHIPMENT_ID}.heic" \
-F "target=jpg" \
--output pod_photo_${SHIPMENT_ID}.jpg
Convert a packing list to PDF for carrier
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-H "Idempotency-Key: packing-list-${SHIPMENT_ID}" \
-F "file=@packing_list_${SHIPMENT_ID}.docx" \
-F "target=pdf" \
--output packing_list_${SHIPMENT_ID}.pdf
Code example: normalize shipment document uploads
TMS document intake: normalize uploaded shipment documents (driver photos, carrier documents, customer-provided files) before storing in the shipment record. No SDK.
import requests
from pathlib import Path
CTF_API_KEY = "ctf_sk_your_key_here"
IMAGE_EXTS = {".heic", ".heif", ".tiff", ".tif", ".png", ".bmp"}
DOC_EXTS = {".docx", ".doc", ".odt", ".rtf"}
def normalize_shipment_doc(upload_path: str, original_filename: str,
shipment_id: str) -> tuple[bytes, str]:
"""Normalize a shipment document for TMS storage."""
p = Path(original_filename)
ext = p.suffix.lower()
if ext in IMAGE_EXTS:
target, out_ext = "jpg", "jpg"
elif ext in DOC_EXTS:
target, out_ext = "pdf", "pdf"
else:
with open(upload_path, "rb") as f:
return f.read(), original_filename
with open(upload_path, "rb") as f:
resp = requests.post(
"https://changethisfile.com/v1/convert",
headers={
"Authorization": f"Bearer {CTF_API_KEY}",
"Idempotency-Key": f"shipment-{shipment_id}-{p.stem}",
},
files={"file": (original_filename, f)}, # source auto-detected
data={"target": target},
timeout=60,
)
resp.raise_for_status()
return resp.content, f"{p.stem}.{out_ext}"
JavaScript (fetch, no SDK):
const IMAGE_EXTS = new Set(['.heic', '.heif', '.tiff', '.tif', '.png', '.bmp']);
const DOC_EXTS = new Set(['.docx', '.doc', '.odt', '.rtf']);
async function normalizeShipmentDoc(fileBuffer, filename, shipmentId) {
const ext = filename.slice(filename.lastIndexOf('.')).toLowerCase();
let target;
if (IMAGE_EXTS.has(ext)) target = 'jpg';
else if (DOC_EXTS.has(ext)) target = 'pdf';
else return { data: fileBuffer, filename };
const form = new FormData();
form.append('file', new Blob([fileBuffer]), filename); // source auto-detected
form.append('target', target);
const resp = await fetch('https://changethisfile.com/v1/convert', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.CTF_API_KEY}`,
'Idempotency-Key': `shipment-${shipmentId}-${filename.replace(/\.[^.]+$/, '')}`,
},
body: form,
});
if (!resp.ok) throw new Error(`${resp.status}: ${await resp.text()}`);
return {
data: Buffer.from(await resp.arrayBuffer()),
filename: filename.replace(/\.[^.]+$/, '.' + target),
};
}
curl for dispatch office use:
curl -sX POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer $CTF_API_KEY" \
-F "file=@damaged_package_photo.heic" \
-F "target=jpg" \
-o damaged_package_photo.jpg
Pricing for logistics scale
| Plan | Conversions/month | Price | Fits |
|---|---|---|---|
| Free | 1,000 | $0 | Small freight broker or evaluation |
| Hobby | 10,000 | $29/mo | Small logistics operation or 3PL with moderate shipment volume |
| Startup | 50,000 | $99/mo | Mid-size carrier, freight broker, or 3PL platform |
| Scale | 500,000 | $499/mo | Large carrier, regional 3PL platform, or high-volume TMS integration |
| Growth | 5,000,000 | $1,999/mo | Enterprise logistics platform or large-scale automated document processing |
An operation shipping 500 orders per month with 2 driver photos and 1 document per order is roughly 1,500 conversions — Hobby plan covers this. High-volume operations with automated label rendering or proof-of-delivery workflows should use Startup or Scale.
FAQ
Can I convert multi-page shipping label PDFs (thermal label format)?
PDF → JPG converts each page of a PDF to a separate image. Multi-page PDF labels produce multiple image files. For single-label PDFs (the typical carrier format), you get one JPG output. If you need a specific page from a multi-page manifest PDF, that requires pre-processing to extract the page before conversion.
What about ZPL (Zebra label format) conversion?
ZPL is a printer command language, not a standard media format — it's not supported for conversion. ZPL labels are rendered directly by Zebra printers. For web display, use the carrier's label generation API to get PDF output, then convert PDF → JPG for inline rendering.
Does the API handle GPS metadata in driver photos?
HEIC → JPG conversion preserves EXIF metadata including GPS coordinates. If your TMS uses GPS data from delivery photos for location verification, that data survives the format conversion.
Can I batch convert an entire day's worth of shipping documents?
Yes — send requests in parallel. A simple script processing end-of-day document batches with parallelized API calls completes quickly. Idempotency keys make re-runs safe if a batch fails partway through.
What about EDI-to-CSV or EDI format conversion?
EDI (Electronic Data Interchange) formats (X12, EDIFACT) are not supported — EDI is a structured business messaging format that requires specialized EDI translation tools, not general file format conversion. ChangeThisFile handles document and media format conversion, not EDI transaction processing.
Related guides
Conversion guides for logistics document workflows: