mirror of
https://github.com/aborelis/ASN-Label-Generator.git
synced 2026-03-14 08:33:28 +00:00
Merge pull request #1 from OliverFriedrich/main
Alignment for print and small layout improvements options to handle invalid vertical and/or horizontal printer alignment remove additional padding from qr code use qr code margin option also as minimum spacing to upper and lower label border fix positioning of ASN number Add Avery L7871 label definition (it's a clone of 4731)
This commit is contained in:
commit
75e39bf8a3
3 changed files with 53 additions and 32 deletions
|
|
@ -26,6 +26,7 @@ labelInfo = {
|
|||
3044: (2, 11, (32, 10), (2, 2), (1, 1), (66.5 * mm, 120.5 * mm)),
|
||||
# 189x 25.4mm x 10mm mini labels
|
||||
4731: (7, 27, (25.4 * mm, 10 * mm), (2.5 * mm, 0), (9 * mm, 13.5 * mm), A4),
|
||||
7871: (7, 27, (25.4 * mm, 10 * mm), (2.5 * mm, 0), (9 * mm, 13.5 * mm), A4),
|
||||
# 2.6 x 1 address labels
|
||||
5160: (3, 10, (187, 72), (11, 0), (14, 36), A4),
|
||||
5161: (2, 10, (288, 72), (0, 0), (18, 36), A4),
|
||||
|
|
@ -44,7 +45,7 @@ labelInfo = {
|
|||
|
||||
class AveryLabel:
|
||||
|
||||
def __init__(self, label, **kwargs):
|
||||
def __init__(self, label, pageoffset, **kwargs):
|
||||
data = labelInfo[label]
|
||||
self.across = data[0]
|
||||
self.down = data[1]
|
||||
|
|
@ -55,6 +56,8 @@ class AveryLabel:
|
|||
self.debug = False
|
||||
self.pagesize = data[5]
|
||||
self.position = 0
|
||||
self.pageoffset = pageoffset
|
||||
|
||||
self.__dict__.update(kwargs)
|
||||
|
||||
def open(self, filename):
|
||||
|
|
@ -76,8 +79,8 @@ class AveryLabel:
|
|||
y, x = divmod(x, self.across)
|
||||
|
||||
return (
|
||||
self.margins[0] + x * self.labelsep[0],
|
||||
self.pagesize[1] - self.margins[1] - (y + 1) * self.labelsep[1],
|
||||
self.margins[0] + x * self.labelsep[0] + self.pageoffset[0],
|
||||
self.pagesize[1] - self.margins[1] - (y + 1) * self.labelsep[1] - self.pageoffset[1],
|
||||
)
|
||||
|
||||
def advance(self):
|
||||
|
|
@ -101,7 +104,7 @@ class AveryLabel:
|
|||
# Or, pass a callable and an iterator. We'll do one label
|
||||
# per iteration of the iterator.
|
||||
|
||||
def render(self, thing, count, offset=0, *args):
|
||||
def render(self, thing, count, offset=0, pageshift=(0 * mm, 0 * mm), *args):
|
||||
""" render loop"""
|
||||
assert callable(thing) or isinstance(thing, str)
|
||||
if isinstance(count, Iterator):
|
||||
|
|
@ -128,6 +131,7 @@ class AveryLabel:
|
|||
canv = self.canvas
|
||||
for chunk in iterator:
|
||||
canv.saveState()
|
||||
|
||||
canv.translate(*self.top_left())
|
||||
if self.debug:
|
||||
canv.setLineWidth(0.25)
|
||||
|
|
|
|||
13
README.md
13
README.md
|
|
@ -65,7 +65,8 @@ Usage: asn-gen.py [OPTIONS] [filename]
|
|||
ASN Label Generator
|
||||
|
||||
Arguments:
|
||||
filename output filename of PDF file generated
|
||||
filename output filename of PDF file generated, if .pdf extension is missing the string will be used
|
||||
as directory
|
||||
|
||||
Options:
|
||||
-l, --labeltype=STR Type of label, e.g. 4731, get a list of supported labels with --labels (default: 4731)
|
||||
|
|
@ -82,9 +83,15 @@ Options:
|
|||
--position-helper enable position helpers, e.g. as cutting guides when using sub labels
|
||||
--bar-width, --bw=INT Show a colored bar on the right of the label (0 = no bar) (default: 0)
|
||||
--bar-color, --bc=STR Color of the bar, HEX notation (default: d2dede)
|
||||
--highlight-bar-width, --hw=INT add a colored highlight bar on the right of the label (0 = no bar) (default: 0)
|
||||
--highlight-bar-color, --hc=STR Color of the highlight bar, HEX notation (default: d9a4a6)
|
||||
--highlight-bar-width, --hw=INT
|
||||
add a colored highlight bar on the right of the label (0 = no bar) (default: 0)
|
||||
--highlight-bar-color, --hc=STR
|
||||
Color of the highlight bar, HEX notation (default: d9a4a6)
|
||||
-p, --prefix=STR Prefix to the actual ASN number (default: ASN)
|
||||
--page-offset-x, --dx=STR Print offset of the labels on the page to handle horizontal printer alignment with unit
|
||||
(e.g. -2mm) (default: 0mm)
|
||||
--page-offset-y, --dy=STR Print offset of the labels on the page to handle vertical printer alignment with unit (e.g.
|
||||
-1.5mm) (default: 0mm)
|
||||
|
||||
Other actions:
|
||||
-h, --help Show the help
|
||||
|
|
|
|||
22
asn-gen.py
22
asn-gen.py
|
|
@ -55,6 +55,9 @@ class LabelContext:
|
|||
self.highlight_bar_color = HexColor("#d9a4a6")
|
||||
self.prefix = "ASN"
|
||||
|
||||
self.page_offset_x = 0 * mm
|
||||
self.page_offset_y = 0 * mm
|
||||
|
||||
self.__dict__.update(data)
|
||||
|
||||
self.current_asn = self.first_asn
|
||||
|
|
@ -84,13 +87,14 @@ def render(context: LabelContext, c: canvas.Canvas, width: float, height: float)
|
|||
)
|
||||
context.inc_asn()
|
||||
|
||||
qr = QRCodeImage(barcode_value, size=sub_labelheight * context.qr_size)
|
||||
qr_width = min(sub_labelheight * context.qr_size, sub_labelheight - 2 * context.qr_margin)
|
||||
qr = QRCodeImage(barcode_value, size=qr_width, border=0)
|
||||
qr.drawOn(
|
||||
c, x=context.qr_margin, y=sub_labelheight * ((1 - context.qr_size) / 2)
|
||||
c, x=context.qr_margin, y=(sub_labelheight - qr_width) / 2
|
||||
)
|
||||
c.setFont("Helvetica", size=context.font_size)
|
||||
c.drawString(
|
||||
x=sub_labelheight,
|
||||
x= qr_width + 2 * context.qr_margin,
|
||||
y=(sub_labelheight - context.font_size) / 2,
|
||||
text=barcode_value,
|
||||
)
|
||||
|
|
@ -161,6 +165,8 @@ def generate(
|
|||
highlight_bar_width: "hw" = 0, # type: ignore
|
||||
highlight_bar_color: "hc" = "d9a4a6", # type: ignore
|
||||
prefix: "p" = "ASN", # type: ignore
|
||||
page_offset_x: "dx" = "0mm", # type: ignore
|
||||
page_offset_y: "dy" = "0mm", # type: ignore
|
||||
): # pylint: disable=too-many-locals
|
||||
# pylint: disable=unused-argument
|
||||
"""ASN Label Generator
|
||||
|
|
@ -193,6 +199,9 @@ def generate(
|
|||
|
||||
:param prefix: Prefix to the actual ASN number
|
||||
|
||||
:param page_offset_x: Print offset of the labels on the page to handle horizontal printer alignment with unit (e.g. -2mm)
|
||||
:param page_offset_y: Print offset of the labels on the page to handle vertical printer alignment with unit (e.g. -1.5mm)
|
||||
|
||||
"""
|
||||
|
||||
parm = locals()
|
||||
|
|
@ -201,6 +210,8 @@ def generate(
|
|||
parm["bar_color"] = HexColor("#" + parm["bar_color"])
|
||||
parm["highlight_bar_color"] = HexColor("#" + parm["highlight_bar_color"])
|
||||
parm["labeltype"] = int(parm["labeltype"])
|
||||
parm["page_offset_x"] = toLength(parm["page_offset_x"])
|
||||
parm["page_offset_y"] = toLength(parm["page_offset_y"])
|
||||
|
||||
if parm["filename"] is None:
|
||||
parm["filename"] = gen_filename(parm)
|
||||
|
|
@ -211,7 +222,7 @@ def generate(
|
|||
|
||||
context = LabelContext(parm)
|
||||
|
||||
label = AveryLabels.AveryLabel(context.labeltype)
|
||||
label = AveryLabels.AveryLabel(context.labeltype, (context.page_offset_x, context.page_offset_y))
|
||||
|
||||
label.debug = context.debug
|
||||
|
||||
|
|
@ -226,8 +237,7 @@ def generate(
|
|||
|
||||
def labels():
|
||||
"""Shows a list of supported labels"""
|
||||
print("Supported Labels: " + ", ".join(map(str, labelInfo.keys())))
|
||||
|
||||
print("Supported Labels: " + ", ".join(map(str, sorted(labelInfo.keys()))))
|
||||
|
||||
def version():
|
||||
"""Show the version"""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue