A Windows desktop app for printing PDF shipping labels (eBay, Amazon, USPS, UPS, FedEx) to Bluetooth thermal label printers. It talks to the printer directly over its Bluetooth COM port using TSPL, so no printer driver is needed.
- Print the label from a PDF, with a preview that matches the printed output
- Auto-crop finds the label even when the page has instructions or other text around it, and drops dashed "cut here" borders
- Manual crop for anything auto-crop gets wrong
- Auto-rotate to fit the label orientation
- Page picker for multi-page PDFs (opens on the page that looks most like a label)
- Label sizes: 4×6", 4×4", 2×1", or custom dimensions in mm
- COM port detection
Most inexpensive Bluetooth thermal label printers that use TSPL (TSC Printer Language), including:
- MVGGES
- TSC
- Xprinter
- Most generic Bluetooth label printers sold on Amazon and AliExpress
Download LabelPrinter.exe from the Releases page. Python is not required.
Requires Python 3.8 or newer.
git clone https://github.com/elitescouter/PrintToBTLabel.git
cd PrintToBTLabel
pip install -r requirements.txt
python label_printer_app.py- Pair the printer in Windows Bluetooth settings.
- Start the app.
- Pick the printer's COM port (often COM5 or COM6).
- Click Select PDF and choose your label.
- Check the preview, then click Print Label.
| Setting | Description |
|---|---|
| Label size | A preset (4×6, 4×4, 2×1) or custom width and height in mm |
| Auto-crop | Find the label on the page and crop to it |
| Auto-rotate | Rotate the label to match the label stock's orientation |
| Flip vertical | Turn the output upside down |
| Invert colors | Swap black and white, for printers that print a negative |
| Manual crop | Draw a rectangle on the page to choose exactly what prints |
The printer isn't listed. Make sure it is paired in Windows and has a COM port assigned (Device Manager > Ports), then click the refresh button next to the port list.
Nothing prints. Check that the right COM port is selected. Paired printers often get two ports, so try the other one. Also check that the printer is on, in range, and loaded with labels.
The print is a negative. Toggle Invert colors.
The label prints upside down. Toggle Flip vertical.
The wrong part of the page prints. Turn on Manual crop and draw a box around the label.
# List COM ports
python bt_printer.py --list-ports
# Print a PDF
python bt_printer.py --pdf label.pdf --port COM5
# Custom label size in mm
python bt_printer.py --pdf label.pdf --label-width 101 --label-height 152
# Print plain text
python bt_printer.py --text "Hello World" --port COM5Run python bt_printer.py --help for all options.
from bt_printer import BluetoothPrinter
with BluetoothPrinter(port="COM5") as printer:
printer.print_pdf("shipping_label.pdf")
with BluetoothPrinter(port="COM5") as printer:
printer.print_label("Order #12345\nShip to: John Doe")python build_exe.pyThe executable is written to dist/LabelPrinter.exe.
- Windows 10 or 11
- A Bluetooth adapter
- A TSPL-compatible thermal label printer
- Python 3.8+ (only when running from source)
Bug reports, feature requests, and pull requests are welcome.
MIT
- CustomTkinter for the UI
- PyMuPDF for PDF rendering
Keywords: Windows thermal printer, Bluetooth label printer, print shipping labels, PDF to label printer, thermal printer software, Bluetooth COM port printer, TSPL printer, MVGGES printer, TSC printer, Xprinter, shipping label printer, label printing software