From 3ea1a92716b111abbc6fc2adef0e2c12437a599b Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 16 Apr 2021 17:44:05 +0200 Subject: [PATCH] PDF: Remove whitespace from qr-codes (backwards-compatible) --- src/pretix/base/pdf.py | 5 ++++- .../control/templates/pretixcontrol/pdf/index.html | 14 ++++++++------ src/pretix/static/pretixcontrol/js/ui/editor.js | 9 +++++++-- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/pretix/base/pdf.py b/src/pretix/base/pdf.py index 7b0cfddf66..38cdcc3d40 100644 --- a/src/pretix/base/pdf.py +++ b/src/pretix/base/pdf.py @@ -597,7 +597,10 @@ class Renderer: if len(content) > 128: level = 'L' reqs = float(o['size']) * mm - qrw = QrCodeWidget(content, barLevel=level, barHeight=reqs, barWidth=reqs) + kwargs = {} + if o.get('nowhitespace', False): + kwargs['barBorder'] = 0 + qrw = QrCodeWidget(content, barLevel=level, barHeight=reqs, barWidth=reqs, **kwargs) d = Drawing(reqs, reqs) d.add(qrw) qr_x = float(o['left']) * mm diff --git a/src/pretix/control/templates/pretixcontrol/pdf/index.html b/src/pretix/control/templates/pretixcontrol/pdf/index.html index 95d20b6b27..c258bab304 100644 --- a/src/pretix/control/templates/pretixcontrol/pdf/index.html +++ b/src/pretix/control/templates/pretixcontrol/pdf/index.html @@ -249,12 +249,14 @@
-

- {% blocktrans trimmed %} - The final QR code will be slightly smaller because some whitespace is required - for proper scanning. - {% endblocktrans %} -

+
+
+ {% trans "Required for consistent size across platforms. Supported on Android starting with pretixPRINT 2.3.3 and on Desktop with pretixSCAN 1.9.3." %} +
diff --git a/src/pretix/static/pretixcontrol/js/ui/editor.js b/src/pretix/static/pretixcontrol/js/ui/editor.js index 7c3cdd358a..372b09211e 100644 --- a/src/pretix/static/pretixcontrol/js/ui/editor.js +++ b/src/pretix/static/pretixcontrol/js/ui/editor.js @@ -181,6 +181,7 @@ var editor = { bottom: editor._px2mm(editor.pdf_viewport.height - o.height * o.scaleY - top).toFixed(2), size: editor._px2mm(o.height * o.scaleY).toFixed(2), content: o.content, + nowhitespace: o.nowhitespace || false, }); } else if (o.type === "poweredby") { d.push({ @@ -200,6 +201,7 @@ var editor = { o = editor._add_qrcode(); o.content = d.content; o.scaleToHeight(editor._mm2px(d.size)); + o.nowhitespace = d.nowhitespace || false; } else if (d.type === "imagearea") { o = editor._add_imagearea(d.content); o.content = d.content; @@ -398,6 +400,7 @@ var editor = { if (o.type === "barcodearea") { $("#toolbox-squaresize").val(editor._px2mm(o.height * o.scaleY).toFixed(2)); + $("#toolbox-qrwhitespace").prop("checked", o.nowhitespace || false); } else if (o.type === "imagearea") { $("#toolbox-height").val(editor._px2mm(o.height * o.scaleY).toFixed(2)); $("#toolbox-width").val(editor._px2mm(o.width * o.scaleX).toFixed(2)); @@ -457,6 +460,7 @@ var editor = { o.setScaleX(1); o.setScaleY(1); o.set('top', new_top) + o.nowhitespace = $("#toolbox-qrwhitespace").prop("checked") || false; } else if (o.type === "imagearea") { var new_w = editor._mm2px($("#toolbox-width").val()); var new_h = editor._mm2px($("#toolbox-height").val()); @@ -614,6 +618,7 @@ var editor = { lockUniScaling: true, fill: '#666', content: $(this).attr("data-content"), + nowhitespace: true, }); rect.setControlsVisibility({'mtr': false}); editor.fabric.add(rect); @@ -918,9 +923,9 @@ var editor = { } }).prop('disabled', !$.support.fileInput).parent().addClass($.support.fileInput ? undefined : 'disabled'); - $("#toolbox input[type=number], #toolbox textarea, #toolbox input[type=text]").bind('change keydown keyup' + + $("#toolbox input[type=number], #toolbox textarea, #toolbox input[type=text], #toolbox input[type=checkbox]").bind('change keydown keyup' + ' input', editor._update_values_from_toolbox); - $("#toolbox input[type=number], #toolbox textarea, #toolbox input[type=text], #toolbox input[type=radio]").bind('change', editor._create_savepoint); + $("#toolbox input[type=number], #toolbox textarea, #toolbox input[type=text], #toolbox input[type=checkbox], #toolbox input[type=radio]").bind('change', editor._create_savepoint); $("#toolbox label.btn").bind('click change', editor._update_values_from_toolbox); $("#toolbox select").bind('change', editor._update_values_from_toolbox); $("#toolbox select").bind('change', editor._create_savepoint);