Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Raw printing directly to a USB printer, bypassing Windows spooler

I'm experimenting with a Zebra TTP8200 thermal printer. For my application I need to print plotter type traces continuously until the user hits a stop button. I've had a play with the ZPL language and I can successfully generate bitmap data and dump out my bitmap a line (or few lines) at a time by outputting the ZPL as raw data.

I'm using some Microsoft demo code to output the raw data to the printer and this works great, bar one issue: the spooler. It turns out that every time I output some data using the MS rawprn.exe code it is actually spooled as a print job and then transmitted to the printer. This takes up to 10 seconds to get through the spooler, obviously too slow. Disabling spooling in the driver doesn't help, it just means that the program hangs while the job is passed through the spooler and printing completes.

Is there a way to bypass the spooler and output data straight to this USB printer? My research so far hasn't turned up anything likely looking in the Windows API. Ideally, I'd like to be able to use the printer like it was a serial printer - open the port and shove data in.

Many thanks in advance for any hints!

like image 433
Al Bennett Avatar asked Jun 09 '11 16:06

Al Bennett


2 Answers

If the USB printer is available as a COM port, you can just write to the COM port. Like this, from the DOS prompt:

dir > com1

The former example will output the results of the dir command to the printer.

Or, here is another example:

copy file.txt com1

The former example will output the contents of file.txt to the printer.

Outputting properly formatted ZPL data will be harder than just plain text. I have gotten this to work from Linux using Ruby (and Epson/ESC commands), however.

like image 97
Teddy Avatar answered Sep 17 '22 13:09

Teddy


Is there a way to bypass the spooler and output data straight to this USB printer?

Yes, absolutely. It's built into most OSs, printing raw via USB is just a bit less obvious than Ethernet and COM/LPT. Note, many applications, such as notepad are incapable of printing raw, so your application needs to support this as well.

  1. Install the appropriate driver for your USB printer. Check the printer properties to see which USB port it is using. It may be USB001, etc.
  2. Using the Devices and Printers, add a second printer. Local Port, Select the port just created (i.e. USB001) Note: Some versions of Windows have a checkbox to autodetect, if it's there, uncheck this.
  3. Manufacturer: Generic, Printer: Generic / Text Only
  4. Use the driver that is currently installed
  5. Give the printer a name that differentiates it from the one already created, i.e. Zebra TTP8200 Raw.
  6. Do not share
  7. Do not print test page, Finish

Now with your raw printing application, use the newly created printer.

P.S. These instructions are also available here, with screenshots, as part of a Java open source raw printing tutorial. The project provides tutorials for other platforms (Ubuntu, OS X) as well.

http://qzindustries.com/TutorialRawWin

-Tres

like image 45
Tres Finocchiaro Avatar answered Sep 18 '22 13:09

Tres Finocchiaro