diff --git a/brother_ql/conversion.py b/brother_ql/conversion.py index 3d702c9..d87ddfe 100755 --- a/brother_ql/conversion.py +++ b/brother_ql/conversion.py @@ -9,7 +9,8 @@ from PIL import Image import PIL.ImageOps, PIL.ImageChops from brother_ql.raster import BrotherQLRaster -from brother_ql.devicedependent import label_type_specs, ENDLESS_LABEL, DIE_CUT_LABEL, ROUND_DIE_CUT_LABEL, right_margin_addition +from brother_ql.devicedependent import ENDLESS_LABEL, DIE_CUT_LABEL, ROUND_DIE_CUT_LABEL, PTOUCH_ENDLESS_LABEL +from brother_ql.devicedependent import label_type_specs, right_margin_addition from brother_ql import BrotherQLUnsupportedCmd from brother_ql.image_trafos import filtered_hsv @@ -102,7 +103,7 @@ def convert(qlr, images, label, **kwargs): else: dots_expected = dots_printable - if label_specs['kind'] == ENDLESS_LABEL: + if label_specs['kind'] in (ENDLESS_LABEL, PTOUCH_ENDLESS_LABEL): if rotate not in ('auto', 0): im = im.rotate(rotate, expand=True) if dpi_600: @@ -161,10 +162,14 @@ def convert(qlr, images, label, **kwargs): qlr.mtype = 0x0B qlr.mwidth = tape_size[0] qlr.mlength = tape_size[1] - else: + elif label_specs['kind'] in (ENDLESS_LABEL, ): qlr.mtype = 0x0A qlr.mwidth = tape_size[0] qlr.mlength = 0 + elif label_specs['kind'] in (PTOUCH_ENDLESS_LABEL, ): + qlr.mtype = 0x00 + qlr.mwidth = tape_size[0] + qlr.mlength = 0 qlr.pquality = int(hq) qlr.add_media_and_quality(im.size[1]) try: diff --git a/brother_ql/devicedependent.py b/brother_ql/devicedependent.py index d74e255..ac90317 100644 --- a/brother_ql/devicedependent.py +++ b/brother_ql/devicedependent.py @@ -21,6 +21,7 @@ logger = logging.getLogger(__name__) DIE_CUT_LABEL = None ENDLESS_LABEL = None ROUND_DIE_CUT_LABEL = None +PTOUCH_ENDLESS_LABEL = None label_type_specs = {} label_sizes = [] # And concerning printer models @@ -61,13 +62,14 @@ def _populate_label_legacy_structures(): We contain this code inside a function so that the imports we do in here are not visible at the module level. """ - global DIE_CUT_LABEL, ENDLESS_LABEL, ROUND_DIE_CUT_LABEL + global DIE_CUT_LABEL, ENDLESS_LABEL, ROUND_DIE_CUT_LABEL, PTOUCH_ENDLESS_LABEL global label_sizes, label_type_specs from brother_ql.labels import FormFactor DIE_CUT_LABEL = FormFactor.DIE_CUT ENDLESS_LABEL = FormFactor.ENDLESS ROUND_DIE_CUT_LABEL = FormFactor.ROUND_DIE_CUT + PTOUCH_ENDLESS_LABEL =FormFactor.PTOUCH_ENDLESS from brother_ql.labels import LabelsManager lm = LabelsManager() diff --git a/brother_ql/labels.py b/brother_ql/labels.py index 187de35..2becdd7 100644 --- a/brother_ql/labels.py +++ b/brother_ql/labels.py @@ -19,6 +19,8 @@ class FormFactor(IntEnum): ENDLESS = 2 #: round die-cut labels ROUND_DIE_CUT = 3 + #: endless P-touch labels + PTOUCH_ENDLESS = 4 class Color(IntEnum): """ @@ -102,6 +104,7 @@ ALL_LABELS = ( Label("d12", ( 12, 12), FormFactor.ROUND_DIE_CUT, ( 142, 142), ( 94, 94), 113 , feed_margin=35), Label("d24", ( 24, 24), FormFactor.ROUND_DIE_CUT, ( 284, 284), ( 236, 236), 42 ), Label("d58", ( 58, 58), FormFactor.ROUND_DIE_CUT, ( 688, 688), ( 618, 618), 51 ), + Label("pt24", ( 24, 0), FormFactor.PTOUCH_ENDLESS,( 128, 0), ( 128, 0), 0, feed_margin=14), ) class LabelsManager(ElementsManager): diff --git a/brother_ql/models.py b/brother_ql/models.py index 5544772..dd28c93 100644 --- a/brother_ql/models.py +++ b/brother_ql/models.py @@ -55,6 +55,8 @@ ALL_MODELS = [ Model('QL-820NWB',(150, 11811), two_color=True), Model('QL-1050', (295, 35433), number_bytes_per_row=162, additional_offset_r=44), Model('QL-1060N', (295, 35433), number_bytes_per_row=162, additional_offset_r=44), + Model('PT-P750W', (31, 14172), number_bytes_per_row=16), + Model('PT-P900W', (57, 28346), number_bytes_per_row=70), ] class ModelsManager(ElementsManager): diff --git a/brother_ql/raster.py b/brother_ql/raster.py index e037e2b..08db4d5 100644 --- a/brother_ql/raster.py +++ b/brother_ql/raster.py @@ -245,13 +245,18 @@ class BrotherQLRaster(object): while start + row_len <= frame_len: for i, frame in enumerate(frames): row = frame[start:start+row_len] - if second_image: - file_str.write(b'\x77\x01' if i == 0 else b'\x77\x02') - else: - file_str.write(b'\x67\x00') if self._compression: row = packbits.encode(row) - file_str.write(bytes([len(row)])) + translen = len(row) # number of bytes to be transmitted + if self.model.startswith('PT'): + file_str.write(b'\x47') + file_str.write(bytes([translen%256, translen//256])) + else: + if second_image: + file_str.write(b'\x77\x01' if i == 0 else b'\x77\x02') + else: + file_str.write(b'\x67\x00') + file_str.write(bytes([translen])) file_str.write(row) start += row_len self.data += file_str.getvalue()