I have a client asking if their web application (PHP) can easily print to a UPS / Fedex thermal label printer.
So for instance, I can get back a PDF from UPS/Fedex with the shipping label. I just need to print that.
Does anyone know if you can print directly to these printers or, if not, if there's another way to do it?
EDIT: To clarify, all I want to accomplish is to be able to print to these printers, without having to make my client ALT-TAB to some third-party application like UPS Worldship or ShipRush or QuickBooks Shipping Manager and clicking 'Print' within that application. Do-able?
Setting up UPS shipping to print to your thermal printerOn the UPS website click your name in the top right to access the menu. Select Preferences from the menu. Click Edit under the Shipping section. Ensure that Print Label Instructions and Print for all labels in a shipment are selected.
Once you have your UPS.com ID, you will need to call UPS to get your free UPS thermal printer. You can call the UPS customer service center on 1-800-742-5877 or use 1-800-833-0056 if you are hearing impaired and need TTY/TDD access.
Getting the labels in correct format
The FedEx & UPS APIs provide options to get thermal label specific types. You will beat your head on the keyboard trying to get PDFs to print properly on thermal printers.
Some common thermal types EPL/EPL2, ZPL/ZPLII. Most thermal printers will accept documents matching one of these types.
For Fedex something like this in your ShipRequest - This is using the FedEx WSDL for shipping.
RequestedShipment.LabelSpecification.ImageType = FedExShipService.LabelSpecificationImageType.ZPLII
And UPS - Building XML to post to the UPS service.
<LabelSpecification>
<LabelPrintMethod>
EPL2
</LabelPrintMethod>
</LabelSpecification>
Printing the labels
You will need to essentially send "raw" data to the printer. I started with this article and adopted it to my solution. FedEx for example returns a byte array which contains the label information - I convert this to a string and then send to the printer.
'Convert from Byte Array to String
Dim enc As System.Text.ASCIIEncoding = New System.Text.ASCIIEncoding()
Dim strConverter As String = enc.GetString(<ByteArrayFromFedEx>)
http://www.paulaspinall.com/post/2008/05/31/Sending-data-direct-to-a-printer.aspx
There is also another thread on SO about this topic.
Sending raw data to FedEx Label printer
I used to work on UPS shipping systems and yes you can print using the thermal printers. You need the correct drivers installed to do this. Depending how you want to print will also determine how you need to install the printer (local or shared printer). HTH
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With