modernize and cleanup documentation (#542)
* disable system packages on rtd * install pycups on rtd * enable cups binding in documentation * document CupsPrinter * fix formatting * revise methods and installation * revise user/printers * revise raspi section * further revise
This commit is contained in:
parent
4c2dcdfac6
commit
2b62c8e28d
|
@ -25,4 +25,4 @@ python:
|
||||||
- requirements: doc/requirements.txt
|
- requirements: doc/requirements.txt
|
||||||
- method: pip
|
- method: pip
|
||||||
path: .
|
path: .
|
||||||
system_packages: true
|
system_packages: false
|
||||||
|
|
|
@ -1,23 +1,32 @@
|
||||||
Contributing
|
Contributing
|
||||||
============
|
============
|
||||||
|
|
||||||
This project is open to any kind of contribution. You can help with improving the documentation, adding fixes to the
|
:Last Reviewed: 2023-08-10
|
||||||
code, providing test cases in code or as a description or just spreading the word. Please feel free to create an
|
|
||||||
issue or pull request.
|
|
||||||
In order to reduce the amount of work for everyone please try to adhere to good practice.
|
|
||||||
|
|
||||||
The pull requests and issues will be prefilled with templates. Please fill in your information where applicable.
|
This project is open to any kind of contribution.
|
||||||
|
You can help with improving the documentation, adding fixes to the
|
||||||
|
code, providing test cases in code or as a description or just
|
||||||
|
spreading the word.
|
||||||
|
Please feel free to create an issue or pull request.
|
||||||
|
In order to reduce the amount of work for everyone please try
|
||||||
|
to adhere to good practice.
|
||||||
|
|
||||||
This project uses `semantic versioning <https://semver.org/>`_ and tries to adhere to the proposed rules as
|
The pull requests and issues will be prefilled with templates.
|
||||||
well as possible.
|
Please fill in your information where applicable.
|
||||||
|
|
||||||
|
This project uses `semantic versioning <https://semver.org/>`_
|
||||||
|
and tries to adhere to the proposed rules as well as possible.
|
||||||
|
|
||||||
Author-list
|
Author-list
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
This project keeps a list of authors. This can be auto-generated by calling `./doc/generate-authors.sh`.
|
This project keeps a list of authors.
|
||||||
When contributing the first time, please include a commit with the output of this script in place.
|
This can be auto-generated by calling `./doc/generate-authors.sh`.
|
||||||
|
When contributing the first time, please include a commit with
|
||||||
|
the output of this script in place.
|
||||||
|
|
||||||
When you change your username or mail-address, please also update the `.mailmap` and the authors-list.
|
When you change your username or mail-address, please also
|
||||||
|
update the `.mailmap` and the authors-list.
|
||||||
You can find a good documentation on the mapping-feature in the
|
You can find a good documentation on the mapping-feature in the
|
||||||
`documentation of git-shortlog <https://git-scm.com/docs/git-shortlog#_mapping_authors>`_.
|
`documentation of git-shortlog <https://git-scm.com/docs/git-shortlog#_mapping_authors>`_.
|
||||||
|
|
||||||
|
@ -33,31 +42,42 @@ Please format your contributions with black, otherwise they will be rejected.
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
^^^
|
^^^
|
||||||
The master-branch contains the main development of the project. A release to PyPi is marked with a tag
|
The master-branch contains the main development of the project.
|
||||||
corresponding to the version. Issues are closed when they have been resolved by merging into the master-branch.
|
A release to PyPi is marked with a tag corresponding to the version.
|
||||||
When you have a change to make, begin by creating a new branch from the HEAD of `python-escpos/master`.
|
Issues are closed when they have been resolved by merging
|
||||||
|
into the master-branch.
|
||||||
|
When you have a change to make, begin by creating a new branch
|
||||||
|
from the HEAD of `python-escpos/master`.
|
||||||
|
|
||||||
Please try to group your commits into logical units. If you need to tidy up your branch, you can make use of a
|
Please try to group your commits into logical units.
|
||||||
git feature called an 'interactive rebase' before making a pull request. A small, self-contained change-set is
|
If you need to tidy up your branch, you can make use of a
|
||||||
easier to review, and improves the chance of your code being merged.
|
git feature called an 'interactive rebase' before making a pull request.
|
||||||
Please also make sure that before creating your PR, your branch is rebased on a recent commit or you merged a recent
|
A small, self-contained change-set is easier to review, and
|
||||||
commit into your branch. This way you can ensure that your PR is without merge conflicts.
|
improves the chance of your code being merged.
|
||||||
|
Please also make sure that before creating your PR, your branch
|
||||||
|
is rebased on a recent commit or you merged a recent
|
||||||
|
commit into your branch.
|
||||||
|
This way you can ensure that your PR is without merge conflicts.
|
||||||
|
|
||||||
Docstrings
|
Docstrings
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
This project tries to have a good documentation.
|
This project tries to have a good documentation.
|
||||||
Please add a docstring to every method and class. Have a look at existing methods and classes for the style.
|
Please add a docstring to every method and class.
|
||||||
|
Have a look at existing methods and classes for the style.
|
||||||
We use basically standard rst-docstrings for Sphinx.
|
We use basically standard rst-docstrings for Sphinx.
|
||||||
|
|
||||||
Test
|
Test
|
||||||
^^^^
|
^^^^
|
||||||
Try to write tests whenever possible. Our goal for the future is 100% coverage.
|
Try to write tests whenever possible.
|
||||||
You can copy the structure from other testcases. Please remember to adapt the docstrings.
|
Our goal for the future is 100% coverage.
|
||||||
|
You can copy the structure from other testcases.
|
||||||
|
Please remember to adapt the docstrings.
|
||||||
|
|
||||||
Further reading
|
Further reading
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
For further best practices and hints on contributing please see the
|
For further best practices and hints on contributing please see the
|
||||||
`contribution-guide <https://www.contribution-guide.org/>`_. Should there be any contradictions between this guide
|
`contribution-guide <https://www.contribution-guide.org/>`_.
|
||||||
|
Should there be any contradictions between this guide
|
||||||
and the linked one, please stick to this text.
|
and the linked one, please stick to this text.
|
||||||
Aside from that feel free to create an issue or write an email if anything is unclear.
|
Aside from that feel free to create an issue or write an email if anything is unclear.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
Release process
|
Release process
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
* Update authors file
|
* Update authors file
|
||||||
* Update changelog
|
* Update changelog
|
||||||
* Set annotated tag for release and push to public github
|
* Set annotated tag for release and push to public github
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
TODO
|
TODO
|
||||||
====
|
====
|
||||||
|
|
||||||
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
Open points and issues of the project are tracked in the GitHub issues.
|
Open points and issues of the project are tracked in the GitHub issues.
|
||||||
Some annotations still remain in the code and should be moved over time
|
Some annotations still remain in the code and should be moved over time
|
||||||
into the issue tracker.
|
into the issue tracker.
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
Available Encodings
|
Available Encodings
|
||||||
-------------------
|
-------------------
|
||||||
:Last Reviewed: 2023-07-29
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
|
If you find any issues with the described encodings,
|
||||||
|
please open an issue in the
|
||||||
|
`ESC/POS printer database <https://github.com/receipt-print-hq/escpos-printer-db>`_.
|
||||||
|
The data shown here is directly taken from there.
|
||||||
|
|
||||||
.. datatemplate:json:: ../../capabilities-data/dist/capabilities.json
|
.. datatemplate:json:: ../../capabilities-data/dist/capabilities.json
|
||||||
:template: capabilities-template-encoding.jinja
|
:template: capabilities-template-encoding.jinja
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Available Profiles
|
Available Profiles
|
||||||
------------------
|
------------------
|
||||||
:Last Reviewed: 2023-07-29
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
The following list describes which printer profiles are
|
The following list describes which printer profiles are
|
||||||
available in this release.
|
available in this release.
|
||||||
|
@ -12,6 +12,7 @@ that this printer actually can be controlled by this library.
|
||||||
If you find any issues with the described capabilities,
|
If you find any issues with the described capabilities,
|
||||||
please open an issue in the
|
please open an issue in the
|
||||||
`ESC/POS printer database <https://github.com/receipt-print-hq/escpos-printer-db>`_.
|
`ESC/POS printer database <https://github.com/receipt-print-hq/escpos-printer-db>`_.
|
||||||
|
The data shown here is directly taken from there.
|
||||||
|
|
||||||
.. datatemplate:json:: ../../capabilities-data/dist/capabilities.json
|
.. datatemplate:json:: ../../capabilities-data/dist/capabilities.json
|
||||||
:template: capabilities-template.jinja
|
:template: capabilities-template.jinja
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Capabilities
|
Capabilities
|
||||||
------------
|
------------
|
||||||
:Last Reviewed: 2023-07-29
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
Since the used command set often differs between printers,
|
Since the used command set often differs between printers,
|
||||||
a model for supporting different printers is implemented.
|
a model for supporting different printers is implemented.
|
||||||
|
|
|
@ -11,3 +11,4 @@ python-barcode>=0.11.0,<1
|
||||||
importlib-metadata
|
importlib-metadata
|
||||||
importlib_resources
|
importlib_resources
|
||||||
sphinxcontrib.datatemplates
|
sphinxcontrib.datatemplates
|
||||||
|
pycups
|
||||||
|
|
|
@ -1,19 +1,29 @@
|
||||||
Printing Barcodes
|
Printing Barcodes
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
:Last Reviewed: 2023-05-16
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
Many printers implement barcode printing natively.
|
Many printers implement barcode printing natively.
|
||||||
This hardware renderered barcodes are fast but the supported formats are limited by the printer itself and different between models.
|
This hardware renderered barcodes are fast but the supported
|
||||||
However, almost all printers support printing images, so barcode renderization can be performed externally by software and then sent to the printer as an image.
|
formats are limited by the printer itself and different between models.
|
||||||
As a drawback, this operation is much slower and the user needs to know and choose the image implementation method supported by the printer's commandset.
|
However, almost all printers support printing images, so barcode
|
||||||
|
rendering can be performed externally by software and then sent
|
||||||
|
to the printer as an image.
|
||||||
|
As a drawback, this operation is much slower and the user needs
|
||||||
|
to know and choose the image implementation method supported by
|
||||||
|
the printer's commandset.
|
||||||
|
|
||||||
barcode-method
|
barcode-method
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
Since version 3.0, the ``barcode`` method unifies the previous ``barcode`` (hardware) and ``soft_barcode`` (software) methods.
|
Since version 3.0, the ``barcode`` method unifies the previous
|
||||||
It is able to choose automatically the best printer implementation for barcode printing based on the capabilities of the printer and the type of barcode desired.
|
``barcode`` (hardware) and ``soft_barcode`` (software) methods.
|
||||||
To achieve this, it relies on the information contained in the escpos-printer-db profiles.
|
It is able to choose automatically the best printer implementation
|
||||||
The chosen profile needs to match the capabilities of the printer as closely as possible.
|
for barcode printing based on the capabilities of the printer
|
||||||
|
and the type of barcode desired.
|
||||||
|
To achieve this, it relies on the information contained in the
|
||||||
|
escpos-printer-db profiles.
|
||||||
|
The chosen profile needs to match the capabilities of the printer
|
||||||
|
as closely as possible.
|
||||||
|
|
||||||
.. py:currentmodule:: escpos.escpos
|
.. py:currentmodule:: escpos.escpos
|
||||||
|
|
||||||
|
@ -33,4 +43,5 @@ For alphanumeric CODE128 you have to preface your payload with `{B`.
|
||||||
# print CODE128 012ABCDabcd
|
# print CODE128 012ABCDabcd
|
||||||
p.barcode("{B012ABCDabcd", "CODE128", function_type="B")
|
p.barcode("{B012ABCDabcd", "CODE128", function_type="B")
|
||||||
|
|
||||||
A very good description on CODE128 is also on `Wikipedia <https://en.wikipedia.org/wiki/Code_128>`_.
|
A very good description on CODE128 is also on
|
||||||
|
`Wikipedia <https://en.wikipedia.org/wiki/Code_128>`_.
|
||||||
|
|
|
@ -1,24 +1,31 @@
|
||||||
|
.. _user_installation:
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
:Last Reviewed: 2016-07-23
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
Installation with PIP
|
Installation with PIP
|
||||||
---------------------
|
---------------------
|
||||||
Installation should be rather straight-forward. python-escpos is on PyPi, so you can simply enter:
|
Installation should be rather straight-forward. python-escpos is on PyPi,
|
||||||
|
so you can simply enter:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
pip install python-escpos
|
pip install python-escpos
|
||||||
|
|
||||||
This should install all necessary dependencies. Apart from that python-escpos should also be
|
This should install all necessary dependencies. Apart from that
|
||||||
available as a Debian package. If you want to always benefit from the newest stable releases you should probably
|
python-escpos is for some versions also available as a Debian package.
|
||||||
install from PyPi.
|
If you want to always benefit from the newest stable releases you should
|
||||||
|
always install from PyPi.
|
||||||
|
If you use the ``--pre`` parameter for ``pip``, you will get the latest
|
||||||
|
pre-release.
|
||||||
|
|
||||||
Setup udev for USB-Printers
|
Setup udev for USB-Printers
|
||||||
---------------------------
|
---------------------------
|
||||||
1. Get the *Product ID* and *Vendor ID* from the lsusb command
|
1. Get the *Product ID* and *Vendor ID* from the lsusb command
|
||||||
``# lsusb Bus 002 Device 001: ID 1a2b:1a2b Device name``
|
``# lsusb Bus 002 Device 001: ID 1a2b:1a2b Device name``.
|
||||||
|
(Or whichever way your system supplies to get the PID and VID.)
|
||||||
|
|
||||||
2. Create a udev rule to let users belonging to *dialout* group use the
|
2. Create a udev rule to let users belonging to *dialout* group use the
|
||||||
printer. You can create the file
|
printer. You can create the file
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
Methods
|
Methods
|
||||||
=======
|
=======
|
||||||
|
|
||||||
:Last Reviewed: 2017-01-25
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
Escpos class
|
Escpos class
|
||||||
------------
|
------------
|
||||||
|
|
||||||
The core part of this libraries API is the Escpos class.
|
The core part of the API of this library is the Escpos class.
|
||||||
You use it by instantiating a :doc:`printer <printers>` which is a child of Escpos.
|
You use it by instantiating a :doc:`printer <printers>` which is a child of Escpos.
|
||||||
The following methods are available:
|
The following methods are available:
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
Printers
|
Printers
|
||||||
========
|
========
|
||||||
|
|
||||||
:Last Reviewed: 2022-11-25
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
As of now there are 7 different type of printer implementations.
|
As of now there are 8 different types of printer implementations.
|
||||||
|
|
||||||
USB
|
USB
|
||||||
---
|
---
|
||||||
The USB-class uses pyusb and libusb to communicate with USB-based
|
The USB-class uses pyusb and libusb to communicate with USB-based
|
||||||
printers. Note that this driver is not suited for USB-to-Serial-adapters
|
printers.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
This driver is not suited for USB-to-Serial-adapters
|
||||||
and similiar devices, but only for those implementing native USB.
|
and similiar devices, but only for those implementing native USB.
|
||||||
|
|
||||||
.. autoclass:: escpos.printer.Usb
|
.. autoclass:: escpos.printer.Usb
|
||||||
|
@ -44,20 +47,24 @@ This driver is based on the socket class.
|
||||||
|
|
||||||
Troubleshooting
|
Troubleshooting
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
Problems with a network-attached printer can have numerous causes. Make sure that your device has a proper IP address.
|
Problems with a network-attached printer can have numerous causes.
|
||||||
Often you can check the IP address by triggering the self-test of the device. As a next step try to send text
|
Make sure that your device has a proper IP address.
|
||||||
manually to the device. You could use for example:
|
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
|
echo "OK\n" | nc IPADDRESS 9100
|
||||||
# the port number is often 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.
|
As a last resort try to reset the interface of the printer.
|
||||||
|
This should be described in its manual.
|
||||||
|
|
||||||
File
|
File
|
||||||
----
|
----
|
||||||
This printer "prints" just into a file-handle. Especially on \*nix-systems this comes very handy.
|
This printer "prints" just into a file-handle.
|
||||||
|
Especially on \*nix-systems this comes very handy.
|
||||||
|
|
||||||
.. autoclass:: escpos.printer.File
|
.. autoclass:: escpos.printer.File
|
||||||
:members:
|
:members:
|
||||||
|
@ -67,8 +74,8 @@ This printer "prints" just into a file-handle. Especially on \*nix-systems this
|
||||||
|
|
||||||
Dummy
|
Dummy
|
||||||
-----
|
-----
|
||||||
The Dummy-printer is mainly for testing- and debugging-purposes. It stores
|
The Dummy-printer is mainly for testing- and debugging-purposes.
|
||||||
all of the "output" as raw ESC/POS in a string and returns that.
|
It stores all of the "output" as raw ESC/POS in a string and returns that.
|
||||||
|
|
||||||
.. autoclass:: escpos.printer.Dummy
|
.. autoclass:: escpos.printer.Dummy
|
||||||
:members:
|
:members:
|
||||||
|
@ -82,7 +89,10 @@ Supports both local and remote CUPS printers and servers.
|
||||||
The printer must be properly configured in CUPS administration.
|
The printer must be properly configured in CUPS administration.
|
||||||
The connector generates a print job that is added to the CUPS queue.
|
The connector generates a print job that is added to the CUPS queue.
|
||||||
|
|
||||||
.. todo:: fix import in documentation
|
.. autoclass:: escpos.printer.CupsPrinter
|
||||||
|
:members:
|
||||||
|
:member-order: bysource
|
||||||
|
:noindex:
|
||||||
|
|
||||||
LP
|
LP
|
||||||
----
|
----
|
||||||
|
@ -91,10 +101,19 @@ Supports local and remote CUPS printers.
|
||||||
The printer must be properly configured in CUPS administration.
|
The printer must be properly configured in CUPS administration.
|
||||||
The connector spawns a new sub-process where the command lp is executed.
|
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.
|
No dependencies required, but somehow the print queue will affect some
|
||||||
|
print job such as barcode.
|
||||||
|
|
||||||
.. autoclass:: escpos.printer.LP
|
.. autoclass:: escpos.printer.LP
|
||||||
:members:
|
:members:
|
||||||
:special-members:
|
:special-members:
|
||||||
:member-order: bysource
|
:member-order: bysource
|
||||||
:noindex:
|
:noindex:
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. todo:: Include Win32Raw in documentation build
|
||||||
|
|
|
@ -1,41 +1,26 @@
|
||||||
Raspberry Pi
|
Raspberry Pi
|
||||||
============
|
============
|
||||||
|
|
||||||
:Last Reviewed: 2017-01-05
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
This instructions were tested on Raspbian Jessie.
|
.. warning:: You should **never** directly connect an printer with RS232-interface
|
||||||
|
(serial port) directly to a Raspberry PI or similar interface
|
||||||
.. warning:: You should **never** directly connect an printer with RS232-interface (serial port) directly to
|
(e.g. those simple USB-sticks without encasing).
|
||||||
a Raspberry PI or similar interface (e.g. those simple USB-sticks without encasing). Those interfaces are
|
Those interfaces are based on 5V- or 3,3V-logic
|
||||||
based on 5V- or 3,3V-logic (the latter in the case of Raspberry PI). Classical RS232 uses 12V-logic and would
|
(the latter in the case of Raspberry PI).
|
||||||
**thus destroy your interface**. Connect both systems with an appropriate *level shifter*.
|
Classical RS232 uses 12V-logic and would **thus destroy your interface**.
|
||||||
|
Connect both systems with an appropriate *level shifter*.
|
||||||
Dependencies
|
|
||||||
------------
|
|
||||||
First, install the packages available on Raspbian.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo apt-get install python3 python3-setuptools python3-pip libjpeg8-dev
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
You can install by using pip3.
|
The installation should be performed as described in :ref:`user_installation`.
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
sudo pip3 install --upgrade pip
|
|
||||||
sudo pip3 install python-escpos
|
|
||||||
|
|
||||||
Run
|
Run
|
||||||
---
|
---
|
||||||
You need sudo and python3 to run your program.
|
You can run this software as on any other Linux system.
|
||||||
|
|
||||||
::
|
Attach your printer and test it with the example code in the project's set of examples.
|
||||||
|
You can find that in the
|
||||||
sudo python3 your-program.py
|
`project-repository <https://github.com/python-escpos/python-escpos>`__.
|
||||||
|
|
||||||
Now you can attach your printer and and test it with the example code in the project's set of examples.
|
|
||||||
You can find that in the `project-repository <https://github.com/python-escpos/python-escpos>`__.
|
|
||||||
|
|
||||||
For more details on this check the :doc:`installation-manual <installation>`.
|
For more details on this check the :doc:`installation-manual <installation>`.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
Usage
|
Usage
|
||||||
=====
|
=====
|
||||||
|
|
||||||
:Last Reviewed: 2017-06-10
|
:Last Reviewed: 2023-08-10
|
||||||
|
|
||||||
Define your printer
|
Define your printer
|
||||||
-------------------
|
-------------------
|
||||||
|
|
|
@ -45,6 +45,8 @@ HW_RESET = ESC + b"\x3f\x0a\x00" # Reset printer hardware
|
||||||
_CASH_DRAWER = (
|
_CASH_DRAWER = (
|
||||||
lambda m, t1="", t2="": ESC + b"p" + m + six.int2byte(t1) + six.int2byte(t2)
|
lambda m, t1="", t2="": ESC + b"p" + m + six.int2byte(t1) + six.int2byte(t2)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#: decimal cash drawer kick sequence
|
||||||
CD_KICK_DEC_SEQUENCE = (
|
CD_KICK_DEC_SEQUENCE = (
|
||||||
lambda esc, p, m, t1=50, t2=50: six.int2byte(esc)
|
lambda esc, p, m, t1=50, t2=50: six.int2byte(esc)
|
||||||
+ six.int2byte(p)
|
+ six.int2byte(p)
|
||||||
|
@ -52,8 +54,10 @@ CD_KICK_DEC_SEQUENCE = (
|
||||||
+ six.int2byte(t1)
|
+ six.int2byte(t1)
|
||||||
+ six.int2byte(t2)
|
+ six.int2byte(t2)
|
||||||
)
|
)
|
||||||
CD_KICK_2 = _CASH_DRAWER(b"\x00", 50, 50) # Sends a pulse to pin 2 []
|
#: Sends a pulse to pin 2 []
|
||||||
CD_KICK_5 = _CASH_DRAWER(b"\x01", 50, 50) # Sends a pulse to pin 5 []
|
CD_KICK_2 = _CASH_DRAWER(b"\x00", 50, 50)
|
||||||
|
#: Sends a pulse to pin 5 []
|
||||||
|
CD_KICK_5 = _CASH_DRAWER(b"\x01", 50, 50)
|
||||||
|
|
||||||
# Paper Cutter
|
# Paper Cutter
|
||||||
_CUT_PAPER = lambda m: GS + b"V" + m
|
_CUT_PAPER = lambda m: GS + b"V" + m
|
||||||
|
|
|
@ -1021,8 +1021,11 @@ class Escpos(object):
|
||||||
def cashdraw(self, pin):
|
def cashdraw(self, pin):
|
||||||
"""Send pulse to kick the cash drawer
|
"""Send pulse to kick the cash drawer
|
||||||
|
|
||||||
Kick cash drawer on pin 2 or pin 5 according to default parameter.
|
Kick cash drawer on pin 2 (:py:const:`~escpos.constants.CD_KICK_2`)
|
||||||
For non default parameter send a decimal sequence i.e. [27,112,48] or [27,112,0,25,255]
|
or pin 5 (:py:const:`~escpos.constants.CD_KICK_5`)
|
||||||
|
according to the default parameters.
|
||||||
|
For non default parameters send a decimal sequence i.e.
|
||||||
|
[27,112,48] or [27,112,0,25,255].
|
||||||
|
|
||||||
:param pin: pin number, 2 or 5 or list of decimals
|
:param pin: pin number, 2 or 5 or list of decimals
|
||||||
:raises: :py:exc:`~escpos.exceptions.CashDrawerError`
|
:raises: :py:exc:`~escpos.exceptions.CashDrawerError`
|
||||||
|
@ -1094,7 +1097,7 @@ class Escpos(object):
|
||||||
def print_and_feed(self, n=1):
|
def print_and_feed(self, n=1):
|
||||||
"""Print data in print buffer and feed *n* lines
|
"""Print data in print buffer and feed *n* lines
|
||||||
|
|
||||||
if n not in range (0, 255) then ValueError will be raised
|
If n not in range (0, 255) then a ValueError will be raised.
|
||||||
|
|
||||||
:param n: number of n to feed. 0 <= n <= 255. default: 1
|
:param n: number of n to feed. 0 <= n <= 255. default: 1
|
||||||
:raises ValueError: if not 0 <= n <= 255
|
:raises ValueError: if not 0 <= n <= 255
|
||||||
|
@ -1144,17 +1147,24 @@ class Escpos(object):
|
||||||
def panel_buttons(self, enable=True):
|
def panel_buttons(self, enable=True):
|
||||||
"""Controls the panel buttons on the printer (e.g. FEED)
|
"""Controls the panel buttons on the printer (e.g. FEED)
|
||||||
|
|
||||||
When enable is set to False the panel buttons on the printer will be disabled. Calling the method with
|
When enable is set to False the panel buttons on the printer
|
||||||
enable=True or without argument will enable the panel buttons.
|
will be disabled.
|
||||||
|
Calling the method with `enable=True` or without argument
|
||||||
|
will enable the panel buttons.
|
||||||
|
|
||||||
If panel buttons are enabled, the function of the panel button, such as feeding, will be executed upon pressing
|
If panel buttons are enabled, the function of the panel button,
|
||||||
the button. If the panel buttons are disabled, pressing them will not have any effect.
|
such as feeding, will be executed upon pressing the button.
|
||||||
|
If the panel buttons are disabled, pressing them will not have
|
||||||
|
any effect.
|
||||||
|
|
||||||
This command is effective until the printer is initialized, reset or power-cycled. The default is enabled panel
|
This command is effective until the printer is initialized,
|
||||||
buttons.
|
resetted or power-cycled.
|
||||||
|
The default is enabled panel buttons.
|
||||||
|
|
||||||
Some panel buttons will always work, especially when printer is opened. See for more information the manual
|
Some panel buttons will always work, especially when the
|
||||||
of your printer and the escpos-command-reference.
|
printer is opened.
|
||||||
|
See for more information the manual of your printer and
|
||||||
|
the escpos-command-reference.
|
||||||
|
|
||||||
:param enable: controls the panel buttons
|
:param enable: controls the panel buttons
|
||||||
:rtype: None
|
:rtype: None
|
||||||
|
@ -1166,7 +1176,8 @@ class Escpos(object):
|
||||||
|
|
||||||
def query_status(self, mode):
|
def query_status(self, mode):
|
||||||
"""
|
"""
|
||||||
Queries the printer for its status, and returns an array of integers containing it.
|
Queries the printer for its status, and returns an array
|
||||||
|
of integers containing it.
|
||||||
|
|
||||||
:param mode: Integer that sets the status mode queried to the printer.
|
:param mode: Integer that sets the status mode queried to the printer.
|
||||||
- RT_STATUS_ONLINE: Printer status.
|
- RT_STATUS_ONLINE: Printer status.
|
||||||
|
|
|
@ -440,9 +440,11 @@ if _CUPSPRINT:
|
||||||
"""Simple CUPS printer connector.
|
"""Simple CUPS printer connector.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Requires _pycups_ which in turn needs the cups development library package:
|
|
||||||
- Ubuntu/Debian: _libcups2-dev_
|
Requires ``pycups`` which in turn needs the cups development library package:
|
||||||
- OpenSuse/Fedora: _cups-devel_
|
- Ubuntu/Debian: ``libcups2-dev``
|
||||||
|
- OpenSuse/Fedora: ``cups-devel``
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, printer_name=None, *args, **kwargs):
|
def __init__(self, printer_name=None, *args, **kwargs):
|
||||||
|
|
1
tox.ini
1
tox.ini
|
@ -34,6 +34,7 @@ deps = sphinx>=3.0.0
|
||||||
sphinxcontrib-spelling>=7.2.0
|
sphinxcontrib-spelling>=7.2.0
|
||||||
sphinxcontrib.datatemplates
|
sphinxcontrib.datatemplates
|
||||||
sphinx_rtd_theme
|
sphinx_rtd_theme
|
||||||
|
pycups
|
||||||
commands = sphinx-build -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html
|
commands = sphinx-build -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html
|
||||||
|
|
||||||
[testenv:flake8]
|
[testenv:flake8]
|
||||||
|
|
Loading…
Reference in New Issue