2023-11-18 16:59:00 +00:00
|
|
|
import argparse
|
|
|
|
|
2023-11-25 16:43:54 +00:00
|
|
|
from reportlab.lib.units import mm
|
2023-11-18 16:59:00 +00:00
|
|
|
from reportlab_qrcode import QRCodeImage
|
2024-01-15 15:23:01 +00:00
|
|
|
|
2023-11-18 16:59:00 +00:00
|
|
|
from paperless_asn_qr_codes import avery_labels
|
|
|
|
|
2023-11-25 15:40:09 +00:00
|
|
|
|
|
|
|
def render(c, x, y):
|
2023-11-18 16:59:00 +00:00
|
|
|
global startASN
|
2024-01-15 15:09:54 +00:00
|
|
|
global digits
|
|
|
|
barcode_value = f"ASN{startASN:0{digits}d}"
|
2023-11-18 16:59:00 +00:00
|
|
|
startASN = startASN + 1
|
2023-11-25 15:40:09 +00:00
|
|
|
|
|
|
|
qr = QRCodeImage(barcode_value, size=y * 0.9)
|
|
|
|
qr.drawOn(c, 1 * mm, y * 0.05)
|
|
|
|
c.setFont("Helvetica", 2 * mm)
|
|
|
|
c.drawString(y, (y - 2 * mm) / 2, barcode_value)
|
|
|
|
|
2023-11-18 16:59:00 +00:00
|
|
|
|
|
|
|
def main():
|
|
|
|
parser = argparse.ArgumentParser(
|
2023-11-25 15:40:09 +00:00
|
|
|
prog="paperless-asn-qr-codes",
|
|
|
|
description="CLI Tool for generating paperless ASN labels with QR codes",
|
|
|
|
)
|
2024-01-15 15:23:01 +00:00
|
|
|
parser.add_argument("start_asn", type=int, help="The value of the first ASN")
|
2024-01-15 15:23:23 +00:00
|
|
|
parser.add_argument("output_file", type=str, default="labels.pdf", help="The output file to write to (default: labels.pdf)")
|
2023-11-25 15:40:09 +00:00
|
|
|
parser.add_argument(
|
2024-01-15 15:23:39 +00:00
|
|
|
"--format", "-f", choices=avery_labels.labelInfo.keys(), default="averyL4731"
|
2023-11-25 15:40:09 +00:00
|
|
|
)
|
2024-01-15 15:09:54 +00:00
|
|
|
parser.add_argument(
|
|
|
|
"--digits", "-d", default=7, help="Number of digits in the ASN (default: 7, produces 'ASN0000001')", type=int
|
|
|
|
)
|
2023-11-25 14:36:17 +00:00
|
|
|
parser.add_argument(
|
2023-11-25 16:43:54 +00:00
|
|
|
"--border",
|
2024-01-15 15:23:39 +00:00
|
|
|
"-b",
|
2023-11-25 16:43:54 +00:00
|
|
|
action="store_true",
|
|
|
|
help="Display borders around labels, useful for debugging the printer alignment",
|
2023-11-25 14:36:17 +00:00
|
|
|
)
|
2023-11-18 16:59:00 +00:00
|
|
|
args = parser.parse_args()
|
|
|
|
global startASN
|
2024-01-15 15:09:54 +00:00
|
|
|
global digits
|
2023-11-18 16:59:00 +00:00
|
|
|
startASN = int(args.start_asn)
|
2024-01-15 15:09:54 +00:00
|
|
|
digits = int(args.digits)
|
2023-11-25 14:36:17 +00:00
|
|
|
label = avery_labels.AveryLabel(args.format, args.border)
|
2023-11-18 16:59:00 +00:00
|
|
|
label.open(args.output_file)
|
2023-11-25 14:12:31 +00:00
|
|
|
# by default, we render all labels possible on a single sheet
|
2023-11-25 15:40:09 +00:00
|
|
|
count = (
|
|
|
|
avery_labels.labelInfo[args.format].labels_horizontal
|
|
|
|
* avery_labels.labelInfo[args.format].labels_vertical
|
|
|
|
)
|
|
|
|
label.render(render, count)
|
2023-11-18 16:59:00 +00:00
|
|
|
label.close()
|