mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-26 18:02:18 +00:00
Redesign label sheet to have variable (csa based) label size
This commit is contained in:
@@ -12,22 +12,18 @@
|
|||||||
</template>
|
</template>
|
||||||
<stylesheet>
|
<stylesheet>
|
||||||
<blockTableStyle id="table">
|
<blockTableStyle id="table">
|
||||||
<!-- show a grid: this also comes in handy for debugging your tables.-->
|
|
||||||
<lineStyle kind="GRID" colorName="black" thickness="1" start="0,0" stop="-1,-1" />
|
|
||||||
</blockTableStyle>
|
</blockTableStyle>
|
||||||
</stylesheet>
|
</stylesheet>
|
||||||
<story>
|
<story>
|
||||||
<blockTable style="table">
|
<blockTable style="table">
|
||||||
{% for i in images0 %}
|
{% for i in images0 %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{% with images0|index:forloop.counter0 as image %}{% if image %}<illustration width="120" height="35"><image file="data:image/png;base64,{{image}}" x="0" y="0"
|
<td>{% with images0|index:forloop.counter0 as image %}{% if image %}<illustration width="180" height="55" borderStrokeWidth="1"
|
||||||
width="120" height="35"/></illustration>{% endif %}{% endwith %}</td>
|
borderStrokeColor="black"><image file="data:image/png;base64,{{image.1}}" x="0" y="0"
|
||||||
<td>{% with images1|index:forloop.counter0 as image %}{% if image %}<illustration width="120" height="35"><image file="data:image/png;base64,{{image}}" x="0" y="0"
|
{% if image.0.csa >= 4 %}width="180" height="55"{% else %}width="130" height="38"{%endif%}/></illustration>{% endif %}{% endwith %}</td>
|
||||||
width="120" height="35"/></illustration>{% endif %}{% endwith %}</td>
|
<td>{% with images1|index:forloop.counter0 as image %}{% if image %}<illustration width="180" height="55"><image file="data:image/png;base64,{{image.1}}" x="0" y="0"
|
||||||
<td>{% with images2|index:forloop.counter0 as image %}{% if image %}<illustration width="120" height="35"><image file="data:image/png;base64,{{image}}" x="0" y="0"
|
{% if image.0.csa >= 4 %}width="180" height="55"{% else %}width="130" height="38"{%endif%}/></illustration>{% endif %}{% endwith %}</td>
|
||||||
width="120" height="35"/></illustration>{% endif %}{% endwith %}</td>
|
<td>{% with images2|index:forloop.counter0 as image %}{% if image %}<illustration width="180" height="55"><image file="data:image/png;base64,{{image.1}}" x="0" y="0" {% if image.0.csa >= 4 %}width="180" height="55"{% else %}width="130" height="38"{%endif%}/></illustration>{% endif %}{% endwith %}</td>
|
||||||
<td>{% with images3|index:forloop.counter0 as image %}{% if image %}<illustration width="120" height="35"><image file="data:image/png;base64,{{image}}" x="0" y="0"
|
|
||||||
width="120" height="35"/></illustration>{% endif %}{% endwith %}</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</blockTable>
|
</blockTable>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from django.shortcuts import get_object_or_404
|
|||||||
from django.template.loader import get_template
|
from django.template.loader import get_template
|
||||||
|
|
||||||
from PyPDF2 import PdfFileMerger, PdfFileReader
|
from PyPDF2 import PdfFileMerger, PdfFileReader
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont, ImageOps
|
||||||
from barcode import Code39
|
from barcode import Code39
|
||||||
from barcode.writer import ImageWriter
|
from barcode.writer import ImageWriter
|
||||||
from z3c.rml import rml2pdf
|
from z3c.rml import rml2pdf
|
||||||
@@ -348,8 +348,9 @@ def generate_label(pk):
|
|||||||
black = (0, 0, 0)
|
black = (0, 0, 0)
|
||||||
white = (255, 255, 255)
|
white = (255, 255, 255)
|
||||||
size = (700, 200)
|
size = (700, 200)
|
||||||
font = ImageFont.truetype("static/fonts/OpenSans-Regular.tff", 22)
|
font_size = 22
|
||||||
heavy_font = ImageFont.truetype("static/fonts/OpenSans-Bold.tff", 35)
|
font = ImageFont.truetype("static/fonts/OpenSans-Regular.tff", font_size)
|
||||||
|
heavy_font = ImageFont.truetype("static/fonts/OpenSans-Bold.tff", font_size + 13)
|
||||||
obj = get_object_or_404(models.Asset, asset_id=pk)
|
obj = get_object_or_404(models.Asset, asset_id=pk)
|
||||||
|
|
||||||
asset_id = f"Asset: {obj.asset_id}"
|
asset_id = f"Asset: {obj.asset_id}"
|
||||||
@@ -358,23 +359,25 @@ def generate_label(pk):
|
|||||||
csa = f"CSA: {obj.csa}mm²"
|
csa = f"CSA: {obj.csa}mm²"
|
||||||
|
|
||||||
image = Image.new("RGB", size, white)
|
image = Image.new("RGB", size, white)
|
||||||
|
image = ImageOps.expand(image, border=(5, 5, 5, 5), fill=black)
|
||||||
logo = Image.open("static/imgs/square_logo.png")
|
logo = Image.open("static/imgs/square_logo.png")
|
||||||
draw = ImageDraw.Draw(image)
|
draw = ImageDraw.Draw(image)
|
||||||
|
|
||||||
draw.text((210, 120), asset_id, fill=black, font=heavy_font)
|
draw.text((300, 0), asset_id, fill=black, font=heavy_font)
|
||||||
if obj.is_cable:
|
if obj.is_cable:
|
||||||
y = 165
|
y = 140
|
||||||
draw.text((210, y), length, fill=black, font=font)
|
draw.text((210, y), length, fill=black, font=font)
|
||||||
draw.text((365, y), csa, fill=black, font=font)
|
if obj.csa:
|
||||||
draw.multiline_text((512, 130), "TEC PA & Lighting\n(0115) 84 68720", fill=black, font=font)
|
draw.text((365, y), csa, fill=black, font=font)
|
||||||
|
draw.text((210, size[1] - font_size - 8), "TEC PA & Lighting (0115) 84 68720", fill=black, font=font)
|
||||||
|
|
||||||
barcode = Code39(str(obj.asset_id), writer=ImageWriter())
|
barcode = Code39(str(obj.asset_id), writer=ImageWriter())
|
||||||
|
|
||||||
logo_size = (200, 200)
|
logo_size = (200, 200)
|
||||||
image.paste(logo.resize(logo_size, Image.ANTIALIAS))
|
image.paste(logo.resize(logo_size, Image.ANTIALIAS), box=(5, 5))
|
||||||
barcode_image = barcode.render(writer_options={"quiet_zone": 0, "write_text": False})
|
barcode_image = barcode.render(writer_options={"quiet_zone": 0, "write_text": False})
|
||||||
width, height = barcode_image.size
|
width, height = barcode_image.size
|
||||||
image.paste(barcode_image.crop((0, 0, width, 120)), (int(((size[0] + logo_size[0]) - width) / 2), 0))
|
image.paste(barcode_image.crop((0, 0, width, 100)), (int(((size[0] + logo_size[0]) - width) / 2), 40))
|
||||||
|
|
||||||
return image
|
return image
|
||||||
|
|
||||||
@@ -403,15 +406,15 @@ class GenerateLabels(generic.View):
|
|||||||
|
|
||||||
base64_encoded_result_bytes = base64.b64encode(img_bytes)
|
base64_encoded_result_bytes = base64.b64encode(img_bytes)
|
||||||
base64_encoded_result_str = base64_encoded_result_bytes.decode('ascii')
|
base64_encoded_result_str = base64_encoded_result_bytes.decode('ascii')
|
||||||
images.append(base64_encoded_result_str)
|
images.append((get_object_or_404(models.Asset, asset_id=asset_id), base64_encoded_result_str))
|
||||||
|
|
||||||
name = f"Asset Label Sheet generated at {timezone.now()}"
|
name = f"Asset Label Sheet generated at {timezone.now()}"
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
'images0': images[::4],
|
'images0': images[::3],
|
||||||
'images1': images[1::4],
|
'images1': images[1::3],
|
||||||
'images2': images[2::4],
|
'images2': images[2::3],
|
||||||
'images3': images[3::4],
|
# 'images3': images[3::4],
|
||||||
'filename': name
|
'filename': name
|
||||||
}
|
}
|
||||||
merger = PdfFileMerger()
|
merger = PdfFileMerger()
|
||||||
|
|||||||
Reference in New Issue
Block a user