1
0
mirror of https://github.com/python-escpos/python-escpos synced 2025-09-13 09:09:58 +00:00

15 Commits

Author SHA1 Message Date
Christoph Heuel
83185bf2f3 Change doc 2017-04-22 01:09:24 +02:00
Christoph Heuel
57ce8389d7 Merge branch 'master' into debian/jessie 2017-04-01 01:03:06 +02:00
Patrick Kanzler
df33945458 Release v3.0a1 (#209 from python-escpos/development)
Release v3.0a1
2017-03-29 16:02:10 +02:00
Patrick Kanzler
c1a7d71fd7 update changelog 2017-03-29 15:45:06 +02:00
Dmytro Katyukha
a7ee11a78c Bugfix in control method. print_and_feed default n=1 2017-03-29 15:24:36 +02:00
Dmytro Katyukha
43e0a87a74 Updated capabilities data to new version 2017-03-29 15:24:36 +02:00
Dmytro Katyukha
abbe32f845 Refactored cut method. added print_and_feed method 2017-03-29 15:24:25 +02:00
Dmytro Katyukha
29cc8baab7 Handle cases when fullCut or partCut not available 2017-03-29 15:24:25 +02:00
Patrick Kanzler
0f33d68f3a add doc for ESCPOS_CAPABILITIES_FILE 2017-03-27 15:30:14 +02:00
Sam Cheng
a0ef820947 add support for an ESCPOS_CAPABILITIES_FILE environment variable. This is useful in situations where package structure is changed, such as using cx-freeze 2017-03-27 14:39:49 +02:00
Patrick Kanzler
7b24df6581 remove patch-coverage because we don't use it 2017-03-23 15:35:32 +01:00
Patrick Kanzler
5078c49b3a add github upload for travis
This automatically uploads succesfull release builds into the GitHub
release.
2017-02-05 15:42:09 +01:00
Christoph Heuel
b2ce102ca5 Release 1.0.8-3 2015-12-13 14:31:07 +01:00
Christoph Heuel
d50c407edb Merge branch 'master' into debian/jessie 2015-12-13 14:25:19 +01:00
Christoph Heuel
2a2ba9a0e2 Debian packaging
* Add Debian packaging file
* Use pybuild system to generate Python packages
2015-12-12 21:50:56 +01:00
17 changed files with 328 additions and 22 deletions

5
.gitignore vendored
View File

@@ -23,3 +23,8 @@ src/escpos/version.py
# testing temporary directories # testing temporary directories
test/test-cli-output/ test/test-cli-output/
# vim swap files
*.swp
*.swn
*.swo

View File

@@ -29,7 +29,7 @@ matrix:
env: TOXENV=docs env: TOXENV=docs
- python: 2.7 - python: 2.7
env: TOXENV=flake8 env: TOXENV=flake8
- python: 3.5 - python: 3.6
env: TOXENV=flake8 env: TOXENV=flake8
allow_failures: allow_failures:
- python: 3.6-dev - python: 3.6-dev
@@ -44,3 +44,16 @@ notifications:
email: email:
on_success: never on_success: never
on_failure: change on_failure: change
deploy:
# Github deployment
- provider: releases
api_key:
secure: oiR3r5AIx9ENIRtbUKIxorRx8GMv4BxgVIZcieXbgSTN4DBZdRWdzs1Xxngu/90Xf79G0X+XGxZyXrYN7eFFNp0kUYj8kwZ1aS/dyR88scskumERWi1Hv5WUJrYGrDe7PcjNGsJ2jw0nNnRPKG87Y84aR4lQygyGBSlDcdrOBnBv0sHYJMxRvHSRkGgWpur06QIOGOk4oOipTXR/7E9cg3YQC5nvZAf2QiprwTa8IcOSFlZQPykEVRYSiAgXrgqBYcZzpX0hAGuIBv7DmPI2ORTF+t79Wbhxhnho3gGJleDv7Z96//sf1vQNCG6qOgeIc9ZY08Jm1AwXQoW0p6F1/XcEPxeyPDkXJzlojE9rjYNLCPL4gxb/LESEuUafm0U4JGMsZ6hnsBOw583yTuAdfQuJ9M+QaSyem6OVNkky3+DKAD3z0WJnl9jmGXIXigNSIxD25XhpvY+j9P0XTLBG1GT2Q+wXCIjSYJc2XnYcdgVJcLoxSWk1fKj/KPi7buAWtqwnL3tjeldpMMOZMliPUTWMM14zoGskHztt0JCkAtcotm9AQtvL8eZ2LHLDK/jyLzjv0wAwU5vzSVp14XHLZl7Q0AIoNc20p1EYGa9C/gSPd9CkrWZoG4lMOiAu3tp2PRLVrdXH3ZWSPQq4Ek5MczrUTkmB82XErNbOa8QB1Dw=
file: .tox/dist/python-escpos*.zip
file_glob: true
skip_cleanup: true
on:
tags: true
repo: python-escpos/python-escpos
branch: master
condition: $TRAVIS_PYTHON_VERSION = "3.5"

View File

@@ -2,6 +2,24 @@
Changelog Changelog
********* *********
2017-03-29 - Version 3.0a1 - "Headcrash"
----------------------------------------
This release is the second alpha release of the new version 3.0. Please
be aware that the API will still change until v3.0 is released.
changes
^^^^^^^
- automatically upload releases to GitHub
- add environment variable ESCPOS_CAPABILITIES_FILE
- automatically handle cases where full cut or partial cut is not available
- add print_and_feed
contributors
^^^^^^^^^^^^
- Sam Cheng
- Patrick Kanzler
- Dmytro Katyukha
2017-01-31 - Version 3.0a - "Grey Area" 2017-01-31 - Version 3.0a - "Grey Area"
--------------------------------------- ---------------------------------------
This release is the first alpha release of the new version 3.0. Please This release is the first alpha release of the new version 3.0. Please

View File

@@ -7,10 +7,6 @@ coverage:
default: # status context default: # status context
target: auto target: auto
threshold: "1%" threshold: "1%"
patch:
default:
target: auto
threshold: "1%"
range: "60...100" range: "60...100"
comment: off comment: off

94
debian/changelog vendored Normal file
View File

@@ -0,0 +1,94 @@
python-escpos (1.0.8-3) unstable; urgency=medium
[ Christoph Heuel ]
* Fix text wrapping error after image
[ Patrick Kanzler ]
* moved .hgignore to .gitignore
* REFACTOR chained boolean expression in escpos
* REFACTOR use new-style class for Escpos
* REFACTOR style and PEP8, fixes #66
* REFACTOR do not shadow built-ins
* ADD requirements.txt and requirements to setup.py
* DOC, IMPROVE improve docstrings and add abstract method _raw to Escpos
* FIX constant definition for PC1252
-- Christoph Heuel <mail@christoph-heuel.net> Sun, 13 Dec 2015 14:27:27 +0100
python-escpos (1.0.8-2) unstable; urgency=low
* Imported source
* First debianization
-- Christoph Heuel <mail@christoph-heuel.net> Sat, 12 Dec 2015 19:13:33 +0100
python-escpos (1.0.8-1) unstable; urgency=low
[ Manuel F Martinez ]
* Added donation message
[ Joel Lehtonen ]
* Support for images vertically longer than 256 pixels
[ Christoph Heuel ]
* Fix mixed tabs/space error
[ Hark ]
* Prevent crash when using libusb0 printers
[ Manuel F Martinez ]
* Updated README and documentation
[ Christoph Heuel ]
* Add flush function
* Debian packaging
-- Manuel F Martinez <manpaz@gmail.com> Sat, 12 Dec 2015 20:59:53 +0100
python-escpos (1.0.7-1) unstable; urgency=low
[ Kristi ]
* Raising the right error when wrong charcode is used
[ Christoph Heuel ]
* After running 2to3 tool
* Fix for string operation
* Integer is needed, not float
* Add text wrapping
[ Manuel F Martinez ]
* Updated URL for the documentation
* Updated documentation URL to local wiki
* Updated setup URLs
[ Christoph Heuel ]
* Introduce new direct_image
[ Manuel F Martinez ]
* Fixed License version mismatch
[ Christoph Heuel ]
* Use unhexlify
* Hexlify text
[ Manuel F Martinez ]
* Updated accordingly to the wiki
[ ldos ]
* Extended params for serial printers
[ Manuel F Martinez ]
* Fixed issues with transparent images
* Updated project version
-- Manuel F Martinez <manpaz@gmail.com> Sat, 12 Dec 2015 20:59:53 +0100
python-escpos (1.0.4-1) unstable; urgency=medium
[ Manuel F Martinez ]
* Added density support
* Added quad support
* fixed code tabulators
* Updated version
-- Manuel F Martinez <manpaz@gmail.com> Sat, 12 Dec 2015 20:59:53 +0100

1
debian/compat vendored Normal file
View File

@@ -0,0 +1 @@
9

55
debian/control vendored Normal file
View File

@@ -0,0 +1,55 @@
Source: python-escpos
Section: unknown
Priority: optional
Maintainer: Christoph Heuel <mail@christoph-heuel.net>
Build-Depends: debhelper (>= 9), dh-python
Standards-Version: 3.9.5
Homepage: https://github.com/braveheuel/python-escpos
#Vcs-Git: git@github.com:braveheuel/python-escpos.git
#Vcs-Browser: https://github.com/braveheuel/python-escpos
Package: python-escpos
Architecture: all
Depends: ${misc:Depends}
Description: Python library to manipulate ESC/POS Printers (Python 2)
Python ESC/POS is a library which lets the user have access to all
those printers handled by ESC/POS commands, as defined by Epson,
from a Python application.
.
The standard usage is send raw text to the printer, but in also
helps the user to enhance the experience with those printers by
facilitating the bar code printing in many different standards,
as well as manipulating images so they can be printed as brand
logo or any other usage images migh have.
.
Text can be aligned/justified and fonts can be changed by size,
type and weight.
.
Also, this module handles some hardware functionalities like, cut
paper, carrier return, printer reset and others concerned to the
carriage alignment.
.
This package covers Python 2 code.
Package: python3-escpos
Architecture: all
Depends: ${misc:Depends}
Description: Python library to manipulate ESC/POS Printers (Python 3)
Python ESC/POS is a library which lets the user have access to all
those printers handled by ESC/POS commands, as defined by Epson,
from a Python application.
.
The standard usage is send raw text to the printer, but in also
helps the user to enhance the experience with those printers by
facilitating the bar code printing in many different standards,
as well as manipulating images so they can be printed as brand
logo or any other usage images migh have.
.
Text can be aligned/justified and fonts can be changed by size,
type and weight.
.
Also, this module handles some hardware functionalities like, cut
paper, carrier return, printer reset and others concerned to the
carriage alignment.
.
This package covers Python 3 code.

26
debian/copyright vendored Normal file
View File

@@ -0,0 +1,26 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: python-escpos
Source: https://github.com/manpaz/python-escpos
Files: *
Copyright: 2015 Manuel F Martinez <manpaz@bashlinux.com>
License: GPL v3
Files: debian/*
Copyright: 2015 Christoph Heuel <mail@christoph-heuel.net>
License: GPL-2+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
.
On Debian systems, the complete text of the GNU General
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".

1
debian/docs vendored Normal file
View File

@@ -0,0 +1 @@
README.rst

6
debian/gbp.conf vendored Normal file
View File

@@ -0,0 +1,6 @@
[DEFAULT]
upstream-branch=master
upstream-tree = tag
debian-branch = debian/jessie
upstream-tag = v%(version)s
debian-tag = v%(version)s

28
debian/rules vendored Executable file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
#DH_VERBOSE = 1
# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/default.mk
# see FEATURE AREAS in dpkg-buildflags(1)
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all
# see ENVIRONMENT in dpkg-buildflags(1)
# package maintainers to append CFLAGS
#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
# package maintainers to append LDFLAGS
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
# main packaging script based on dh7 syntax
%:
dh $@ --with python2,python3 --buildsystem=pybuild
# debmake generated override targets
# This is example for Cmake (See http://bugs.debian.org/641051 )
#override_dh_auto_configure:
# dh_auto_configure -- \
# -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)

1
debian/source/format vendored Normal file
View File

@@ -0,0 +1 @@
3.0 (quilt)

View File

@@ -216,6 +216,32 @@ Here you can download an example, that will print a set of common barcodes:
* :download:`barcode.bin </download/barcode.bin>` by `@mike42 <https://github.com/mike42>`_ * :download:`barcode.bin </download/barcode.bin>` by `@mike42 <https://github.com/mike42>`_
Advanced Usage: change capabilities-profile
-------------------------------------------
Packaged together with the escpos-code is a capabilities-file. This file in
JSON-format describes the capabilities of different printers. It is developed and hosted in
`escpos-printer-db <https://github.com/receipt-print-hq/escpos-printer-db>`_.
Certain applications like the usage of `cx_freeze <https://cx-freeze.readthedocs.io>`_ might change the
packaging structure. This leads to the capabilities-profile not being found.
In this case you can use the environment-variable `ESCPOS_CAPABILITIES_FILE`.
The following code is an example.
.. code-block:: shell
# use packaged capabilities-profile
python-escpos cut
# use capabilities-profile that you have put in /usr/python-escpos
export ESCPOS_CAPABILITIES_FILE=/usr/python-escpos/capabilities.json
python-escpos cut
# use packaged file again
unset ESCPOS_CAPABILITIES_FILE
python-escpos cut
Hint: preprocess printing Hint: preprocess printing
------------------------- -------------------------

View File

@@ -1,10 +1,15 @@
import re import re
import six import six
from os import path from os import environ, path
import yaml import yaml
# Load external printer database # Load external printer database
with open(path.join(path.dirname(__file__), 'capabilities.json')) as f: if 'ESCPOS_CAPABILITIES_FILE' in environ:
file_path = environ['ESCPOS_CAPABILITIES_FILE']
else:
file_path = path.join(path.dirname(__file__), 'capabilities.json')
with open(file_path) as f:
CAPABILITIES = yaml.load(f) CAPABILITIES = yaml.load(f)
PROFILES = CAPABILITIES['profiles'] PROFILES = CAPABILITIES['profiles']

View File

@@ -100,6 +100,12 @@ ESCPOS_COMMANDS = [
'option_strings': ('--content',), 'option_strings': ('--content',),
'help': 'Text to print as a qr code', 'help': 'Text to print as a qr code',
'required': True, 'required': True,
},
{
'option_strings': ('--size',),
'help': 'QR code size (1-16) [default:3]',
'required': False,
'type': int,
} }
], ],
}, },

View File

@@ -564,7 +564,7 @@ class Escpos(object):
self._raw(LINESPACING_FUNCS[divisor] + six.int2byte(spacing)) self._raw(LINESPACING_FUNCS[divisor] + six.int2byte(spacing))
def cut(self, mode=''): def cut(self, mode='FULL'):
""" Cut paper. """ Cut paper.
Without any arguments the paper will be cut completely. With 'mode=PART' a partial cut will Without any arguments the paper will be cut completely. With 'mode=PART' a partial cut will
@@ -573,15 +573,25 @@ class Escpos(object):
.. todo:: Check this function on TM-T88II. .. todo:: Check this function on TM-T88II.
:param mode: set to 'PART' for a partial cut :param mode: set to 'PART' for a partial cut. default: 'FULL'
:raises ValueError: if mode not in ('FULL', 'PART')
""" """
# Fix the size between last line and cut self.print_and_feed(6)
# TODO: handle this with a line feed
self._raw(b"\n\n\n\n\n\n") mode = mode.upper()
if mode.upper() == "PART": if mode not in ('FULL', 'PART'):
raise ValueError("Mode must be one of ('FULL', 'PART')")
if mode == "PART":
if self.profile.supports('paperPartCut'):
self._raw(PAPER_PART_CUT) self._raw(PAPER_PART_CUT)
else: # DEFAULT MODE: FULL CUT elif self.profile.supports('paperFullCut'):
self._raw(PAPER_FULL_CUT) self._raw(PAPER_FULL_CUT)
elif mode == "FULL":
if self.profile.supports('paperFullCut'):
self._raw(PAPER_FULL_CUT)
elif self.profile.supports('paperPartCut'):
self._raw(PAPER_PART_CUT)
def cashdraw(self, pin): def cashdraw(self, pin):
""" Send pulse to kick the cash drawer """ Send pulse to kick the cash drawer
@@ -620,6 +630,20 @@ class Escpos(object):
else: # DEFAULT: DOES NOTHING else: # DEFAULT: DOES NOTHING
pass pass
def print_and_feed(self, n=1):
""" Print data in print buffer and feed *n* lines
if n not in range (0, 255) then ValueError will be raised
:param n: number of n to feed. 0 <= n <= 255. default: 1
:raises ValueError: if not 0 <= n <= 255
"""
if 0 <= n <= 255:
# ESC d n
self._raw(ESC + b"d" + six.int2byte(n))
else:
raise ValueError("n must be betwen 0 and 255")
def control(self, ctl, pos=4): def control(self, ctl, pos=4):
""" Feed control sequences """ Feed control sequences
@@ -634,11 +658,6 @@ class Escpos(object):
:param pos: integer between 1 and 16, controls the horizontal tab position :param pos: integer between 1 and 16, controls the horizontal tab position
:raises: :py:exc:`~escpos.exceptions.TabPosError` :raises: :py:exc:`~escpos.exceptions.TabPosError`
""" """
# Set tab positions
if not (1 <= pos <= 16):
raise TabPosError()
else:
self._raw(CTL_SET_HT + six.int2byte(pos))
# Set position # Set position
if ctl.upper() == "LF": if ctl.upper() == "LF":
self._raw(CTL_LF) self._raw(CTL_LF)
@@ -647,6 +666,12 @@ class Escpos(object):
elif ctl.upper() == "CR": elif ctl.upper() == "CR":
self._raw(CTL_CR) self._raw(CTL_CR)
elif ctl.upper() == "HT": elif ctl.upper() == "HT":
if not (1 <= pos <= 16):
raise TabPosError()
else:
# Set tab positions
self._raw(CTL_SET_HT + six.int2byte(pos))
self._raw(CTL_HT) self._raw(CTL_HT)
elif ctl.upper() == "VT": elif ctl.upper() == "VT":
self._raw(CTL_VT) self._raw(CTL_VT)