Label creation and print
This commit is contained in:
@@ -4,17 +4,33 @@
|
||||
{% block title %}Container: {{ container.named_id }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
===== Print Label Content =====
|
||||
|
||||
<h1>Print Container Label</h1>
|
||||
<!-- Action buttons -->
|
||||
<div class="row">
|
||||
|
||||
<div class="col-sm-12">
|
||||
Label created for container {{ container.named_id }} of type {{ container.container_type.named_id }}
|
||||
Label created for container {{ container.named_id }} of type {{ container.container_type.named_id }}:
|
||||
<br />
|
||||
<img class="img-fluid shadow p-3 mb-5 bg-body rounded" src="{{ barcode_img }}">
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12">
|
||||
<form method="gest">
|
||||
{% csrf_token %}
|
||||
<label for="num_copies">Number of copies:</label><input type="number" id="num_copies" size="2" min="1" max="8" name="num_copies" value="1">
|
||||
<input type="submit" class="btn btn-primary" value="Print">
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-sm-12">
|
||||
<!--
|
||||
{% if logs %}
|
||||
{% for msg in logs %}
|
||||
{{ msg }}<br />
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
no messages
|
||||
{% endif %}
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
<!-- End Action buttons -->
|
||||
|
||||
|
@@ -1,6 +1,8 @@
|
||||
from django.views import generic
|
||||
from .models import Container, ContainerType
|
||||
from labelprinter.labels import container_label
|
||||
import logging, json
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ContainerListView(generic.ListView):
|
||||
@@ -62,22 +64,81 @@ class ContainerPrintLabelView(generic.DetailView):
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
from labelprinter.labels import container_label
|
||||
num_copies = int(self.request.GET['num_copies']) if 'num_copies' in self.request.GET else 0
|
||||
context['num_copies'] = num_copies
|
||||
context['logs'] = ['creating label for container ' + self.object.named_id]
|
||||
from labelprinter.labels import container_label, pil_to_html_imgdata
|
||||
container_description = self.object.container_type.named_id
|
||||
if len(self.object.container_type.description) > 0:
|
||||
container_description += ': ' + self.object.container_type.description
|
||||
if len(self.object.description) > 0:
|
||||
container_description += ' / ' + self.object.description
|
||||
context['barcode_img'] = container_label(self.object.named_id, description=container_description, writer_options={'background': 'white',
|
||||
'font_size': 10,
|
||||
'foreground': 'black',
|
||||
'module_height': 10.0,
|
||||
'module_width': 0.2,
|
||||
'quiet_zone': 2.5,
|
||||
'text': 'This is the text',
|
||||
'text_distance': 3.0,
|
||||
'write_text': True
|
||||
})
|
||||
container_description_line2 = self.object.description
|
||||
label_image = container_label(
|
||||
self.object.named_id,
|
||||
fmt='image',
|
||||
description=container_description,
|
||||
description_line2=container_description_line2,
|
||||
writer_options={'font_size': 14,
|
||||
'module_height': 10.0,
|
||||
'quiet_zone': 4.5,
|
||||
'text': 'This is the text',
|
||||
'text_distance': 1.0
|
||||
})
|
||||
context['barcode_img'] = pil_to_html_imgdata(label_image, fmt='PNG')
|
||||
context['logs'].append('Image created')
|
||||
if num_copies > 0:
|
||||
#from brother_ql.devicedependent import models, label_type_specs, label_sizes
|
||||
#from brother_ql.devicedependent import ENDLESS_LABEL, DIE_CUT_LABEL, ROUND_DIE_CUT_LABEL
|
||||
from brother_ql import BrotherQLRaster, create_label
|
||||
from brother_ql.backends import backend_factory, guess_backend
|
||||
|
||||
try:
|
||||
with open('config.json', encoding='utf-8') as fh:
|
||||
config = json.load(fh)
|
||||
except FileNotFoundError as e:
|
||||
with open('config.example.json', encoding='utf-8') as fh:
|
||||
config = json.load(fh)
|
||||
|
||||
# LABEL_SIZES = [(name, label_type_specs[name]['name']) for name in label_sizes]
|
||||
|
||||
'''
|
||||
if context['kind'] == ENDLESS_LABEL:
|
||||
rotate = 0 if context['orientation'] == 'standard' else 90
|
||||
elif context['kind'] in (ROUND_DIE_CUT_LABEL, DIE_CUT_LABEL):
|
||||
rotate = 'auto'
|
||||
red = False
|
||||
if 'red' in context['label_size']:
|
||||
red = True
|
||||
'''
|
||||
|
||||
qlr = BrotherQLRaster(config['PRINTER']['MODEL'])
|
||||
context['logs'].append('Connected to printer')
|
||||
create_label(qlr, image=label_image, label_size='62', red=False, threshold=1,
|
||||
cut=True, rotate='auto')
|
||||
context['logs'].append('Created raster information')
|
||||
|
||||
try:
|
||||
selected_backend = guess_backend(config['PRINTER']['PRINTER'])
|
||||
except ValueError:
|
||||
context['messages'].append(
|
||||
"Could't guess the backend to use from the printer string descriptor (config PRINTER.PRINTER)")
|
||||
context['logs'].append('Backend found: ' + selected_backend)
|
||||
try:
|
||||
be_class = backend_factory(selected_backend)['backend_class']
|
||||
be = be_class(config['PRINTER']['PRINTER'])
|
||||
context['logs'].append('Got backend driver')
|
||||
for i in range(1,num_copies):
|
||||
be.write(qlr.data)
|
||||
|
||||
context['logs'].append('Data sent to printer')
|
||||
be.dispose()
|
||||
del be
|
||||
except Exception as e:
|
||||
context['logs'].append('Exception: ' + str(e))
|
||||
logger.warning('Exception happened: %s', e)
|
||||
|
||||
context['logs'].append('Finished printing label')
|
||||
|
||||
return context
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user