Printers
- Last Reviewed:
2023-08-23
As of now there are 8 different types of printer implementations.
USB
The USB-class uses pyusb and libusb to communicate with USB-based printers.
Note
This driver is not suited for USB-to-Serial-adapters and similar devices, but only for those implementing native USB.
- class escpos.printer.Usb(idVendor=None, idProduct=None, usb_args={}, timeout=0, in_ep=130, out_ep=1, *args, **kwargs)[source]
USB printer.
This class describes a printer that natively speaks USB.
inheritance:
- static is_usable()[source]
Indicate whether this printer class is usable.
Will return True if dependencies are available. Will return False if not.
- Return type:
bool
- __init__(idVendor=None, idProduct=None, usb_args={}, timeout=0, in_ep=130, out_ep=1, *args, **kwargs)[source]
Initialize USB printer.
- Parameters:
idVendor (
Optional
[int
]) – Vendor IDidProduct (
Optional
[int
]) – Product IDusb_args (
Dict
[str
,Union
[str
,int
]]) – Optional USB arguments (e.g. custom_match)timeout (
Union
[int
,float
]) – Is the time limit of the USB operation. Default without timeout.in_ep (
int
) – Input end pointout_ep (
int
) – Output end point
- open(raise_not_found=True)[source]
Search device on USB tree and set it as escpos device.
By default raise an exception if device is not found.
- Parameters:
raise_not_found (
bool
) – Default True. False to log error but do not raise exception.- Raises:
- Raises:
- Return type:
None
- close()[source]
Release USB interface.
- Return type:
None
Serial
This driver uses pyserial in order to communicate with serial devices. If you are using an USB-based adapter to connect to the serial port, then you should also use this driver. The configuration is often based on DIP-switches that you can set on your printer. For the hardware-configuration please refer to your printer’s manual.
- class escpos.printer.Serial(devfile='', baudrate=9600, bytesize=8, timeout=1, parity=None, stopbits=None, xonxoff=False, dsrdtr=True, *args, **kwargs)[source]
Serial printer.
This class describes a printer that is connected by serial interface.
inheritance:
- static is_usable()[source]
Indicate whether this printer class is usable.
Will return True if dependencies are available. Will return False if not.
- Return type:
bool
- __init__(devfile='', baudrate=9600, bytesize=8, timeout=1, parity=None, stopbits=None, xonxoff=False, dsrdtr=True, *args, **kwargs)[source]
Initialize serial printer.
- Parameters:
devfile (
str
) – Device file under dev filesystembaudrate (
int
) – Baud rate for serial transmissionbytesize (
int
) – Serial buffer sizetimeout (
Union
[int
,float
]) – Read/Write timeoutparity (
Optional
[str
]) – Parity checkingstopbits (
Optional
[int
]) – Number of stop bitsxonxoff (
bool
) – Software flow controldsrdtr (
bool
) – Hardware flow control (False to enable RTS/CTS)
- open(raise_not_found=True)[source]
Set up serial port and set is as escpos device.
By default raise an exception if device is not found.
- Parameters:
raise_not_found (
bool
) – Default True. False to log error but do not raise exception.- Raises:
- Return type:
None
- close()[source]
Close Serial interface.
- Return type:
None
Network
This driver is based on the socket class.
- class escpos.printer.Network(host='', port=9100, timeout=60, *args, **kwargs)[source]
Network printer.
This class is used to attach to a networked printer. You can also use this in order to attach to a printer that is forwarded with
socat
.If you have a local printer on parallel port
/dev/usb/lp0
then you could startsocat
with:socat -u TCP4-LISTEN:4242,reuseaddr,fork OPEN:/dev/usb/lp0
Then you should be able to attach to port
4242
with this class. Otherwise the normal use case would be to have a printer with Ethernet interface. This type of printer should work the same with this class. For the address of the printer check its manuals.inheritance:
- static is_usable()[source]
Indicate whether this printer class is usable.
Will return True if dependencies are available. Will return False if not.
- Return type:
bool
- __init__(host='', port=9100, timeout=60, *args, **kwargs)[source]
Initialize network printer.
- Parameters:
host (
str
) – Printer’s host name or IP addressport (
int
) – Port to write totimeout (
Union
[int
,float
]) – timeout in seconds for the socket-library
- open(raise_not_found=True)[source]
Open TCP socket with
socket
-library and set it as escpos device.By default raise an exception if device is not found.
- Parameters:
raise_not_found (
bool
) – Default True. False to log error but do not raise exception.- Raises:
- Return type:
None
- close()[source]
Close TCP connection.
- Return type:
None
Troubleshooting
Problems with a network-attached printer can have numerous causes. Make sure that your device has a proper IP address. Often you can check the IP address by triggering the self-test of the device. As a next step try to send text manually to the device. You could use for example:
echo "OK\n" | nc IPADDRESS 9100 # the port number is often 9100
As a last resort try to reset the interface of the printer. This should be described in its manual.
File
This printer “prints” just into a file-handle. Especially on *nix-systems this comes very handy.
- class escpos.printer.File(devfile='', auto_flush=True, *args, **kwargs)[source]
Generic file printer.
This class is used for parallel port printer or other printers that are directly attached to the filesystem. Note that you should stay away from using USB-to-Parallel-Adapter since they are unreliable and produce arbitrary errors.
inheritance:
- static is_usable()[source]
Indicate whether this printer class is usable.
Will return True if dependencies are available. Will return False if not.
- Return type:
bool
- __init__(devfile='', auto_flush=True, *args, **kwargs)[source]
Initialize file printer with device file.
- Parameters:
devfile (
str
) – Device file under dev filesystemauto_flush (
bool
) – automatically call flush after every call of _raw()
- open(raise_not_found=True)[source]
Open system file.
By default raise an exception if device is not found.
- Parameters:
raise_not_found (
bool
) – Default True. False to log error but do not raise exception.- Raises:
- Return type:
None
- flush()[source]
Flush printing content.
- Return type:
None
- close()[source]
Close system file.
- Return type:
None
Dummy
The Dummy-printer is mainly for testing- and debugging-purposes. It stores all of the “output” as raw ESC/POS in a string and returns that.
- class escpos.printer.Dummy(*args, **kwargs)[source]
Dummy printer.
This class is used for saving commands to a variable, for use in situations where there is no need to send commands to an actual printer. This includes generating print jobs for later use, or testing output.
inheritance:
- static is_usable()[source]
Indicate whether this printer class is usable.
Will return True if dependencies are available. Will return False if not.
- Return type:
bool
- property output: bytes
Get the data that was sent to this printer.
- clear()[source]
Clear the buffer of the printer.
This method can be called if you send the contents to a physical printer and want to use the Dummy printer for new output.
- Return type:
None
- close()[source]
Close not implemented for Dummy printer.
- Return type:
None
CUPS
This driver uses pycups in order to communicate with a CUPS server. Supports both local and remote CUPS printers and servers. The printer must be properly configured in CUPS administration. The connector generates a print job that is added to the CUPS queue.
- class escpos.printer.CupsPrinter(printer_name='', *args, **kwargs)[source]
Simple CUPS printer connector.
Note
- Requires
pycups
which in turn needs the cups development library package: Ubuntu/Debian:
libcups2-dev
OpenSuse/Fedora:
cups-devel
inheritance:
- static is_usable()[source]
Indicate whether this printer class is usable.
Will return True if dependencies are available. Will return False if not.
- Return type:
bool
- property printers: dict
Available CUPS printers.
- open(job_name='python-escpos', raise_not_found=True)[source]
Set up a new print job and target the printer.
A call to this method is required to send new jobs to the CUPS connection after close.
Defaults to default CUPS printer. Creates a new temporary file buffer.
By default raise an exception if device is not found.
- Parameters:
raise_not_found (
bool
) – Default True. False to log error but do not raise exception.- Raises:
- Return type:
None
- send()[source]
Send the print job to the printer.
- Return type:
None
- close()[source]
Close CUPS connection.
Send pending job to the printer if needed.
- Return type:
None
- Requires
LP
This driver uses the UNIX command lp in order to communicate with a CUPS server. Supports local and remote CUPS printers. The printer must be properly configured in CUPS administration. The connector spawns a new sub-process where the command lp is executed.
No dependencies required, but somehow the print queue will affect some print job such as barcode.
- class escpos.printer.LP(printer_name='', *args, **kwargs)[source]
Simple UNIX lp command raw printing.
Thanks to Oyami-Srk comment.
inheritance:
- static is_usable()[source]
Indicate whether this printer class is usable.
Will return True if dependencies are available. Will return False if not.
- Return type:
bool
- __init__(printer_name='', *args, **kwargs)[source]
LP class constructor.
- Parameters:
printer_name (
str
) – CUPS printer name (Optional)auto_flush (bool (Defaults False)) – Automatic flush after every _raw() (Optional)
- property printers: dict
Available CUPS printers.
- open(job_name='python-escpos', raise_not_found=True, _close_opened=True)[source]
Invoke _lp_ in a new subprocess and wait for commands.
By default raise an exception if device is not found.
- Parameters:
raise_not_found (
bool
) – Default True. False to log error but do not raise exception.- Raises:
- Return type:
None
- close()[source]
Stop the subprocess.
- Return type:
None
- flush()[source]
End line and wait for new commands.
- Return type:
None
Win32Raw
This driver uses a native WIN32 interface of Windows in order to print. Please refer to the code for documentation as this driver is currently not included in the documentation build.
- class escpos.printer.Win32Raw(printer_name='', *args, **kwargs)[source]
Printer binding for win32 API.
Uses the module pywin32 for printing.
inheritance:
- static is_usable()[source]
Indicate whether this printer class is usable.
Will return True if dependencies are available. Will return False if not.
- Return type:
bool
- __init__(printer_name='', *args, **kwargs)[source]
Initialize default printer.
- property printers: dict
Available Windows printers.
- open(job_name='python-escpos', raise_not_found=True)[source]
Open connection to default printer.
By default raise an exception if device is not found.
- Parameters:
raise_not_found (
bool
) – Default True. False to log error but do not raise exception.- Raises:
- Return type:
None
- close()[source]
Close connection to default printer.
- Return type:
None