From 77c820ed91c5e4a9ace7107c1a45a7b0263beac6 Mon Sep 17 00:00:00 2001 From: Manuel Bleichenbacher Date: Wed, 12 Oct 2022 21:47:38 +0200 Subject: [PATCH] New output size: QR code with quiet zone --- .../qrbill/generator/OutputSize.java | 10 +- .../codecrete/qrbill/generator/QRBill.java | 25 ++++ .../qrbill/generatortest/QRCodeTest.java | 9 ++ .../src/test/resources/qrcode_quiet_zone.svg | 135 ++++++++++++++++++ 4 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 generator/src/test/resources/qrcode_quiet_zone.svg diff --git a/generator/src/main/java/net/codecrete/qrbill/generator/OutputSize.java b/generator/src/main/java/net/codecrete/qrbill/generator/OutputSize.java index 62b1c593..f1bc7b0c 100644 --- a/generator/src/main/java/net/codecrete/qrbill/generator/OutputSize.java +++ b/generator/src/main/java/net/codecrete/qrbill/generator/OutputSize.java @@ -36,5 +36,13 @@ public enum OutputSize { * optionally for the scissors. *

*/ - QR_BILL_EXTRA_SPACE + QR_BILL_EXTRA_SPACE, + + /** + * QR code only with 5mm of white space on all sides (56 by 56 mm). + *

+ * This format applies a white background (as opposed to a transparent one). + *

+ */ + QR_CODE_WITH_QUIET_ZONE } diff --git a/generator/src/main/java/net/codecrete/qrbill/generator/QRBill.java b/generator/src/main/java/net/codecrete/qrbill/generator/QRBill.java index e5c9d860..2c4cecbf 100644 --- a/generator/src/main/java/net/codecrete/qrbill/generator/QRBill.java +++ b/generator/src/main/java/net/codecrete/qrbill/generator/QRBill.java @@ -80,6 +80,19 @@ public class QRBill { */ public static final double QR_CODE_HEIGHT = 46; + /** + * The width of the QR code with quiet zone, in mm + * + * @see OutputSize#QR_CODE_WITH_QUIET_ZONE + */ + public static final double QR_CODE_WITH_QUIET_ZONE_WIDTH = 56; + + /** + * The height of the QR code with quiet zone, in mm + * + * @see OutputSize#QR_CODE_WITH_QUIET_ZONE + */ + public static final double QR_CODE_WITH_QUIET_ZONE_HEIGHT = 56; private QRBill() { // do not instantiate @@ -208,6 +221,14 @@ private static void validateAndGenerate(Bill bill, Canvas canvas) throws IOExcep if (bill.getFormat().getOutputSize() == OutputSize.QR_CODE_ONLY) { QRCode qrCode = new QRCode(cleanedBill); qrCode.draw(canvas, 0, 0); + + } else if (bill.getFormat().getOutputSize() == OutputSize.QR_CODE_WITH_QUIET_ZONE) { + QRCode qrCode = new QRCode(cleanedBill); + canvas.startPath(); + canvas.addRectangle(0, 0, QR_CODE_WITH_QUIET_ZONE_WIDTH, QR_CODE_WITH_QUIET_ZONE_HEIGHT); + canvas.fillPath(0xffffff, false); + qrCode.draw(canvas, 5, 5); + } else { BillLayout layout = new BillLayout(cleanedBill, canvas); layout.draw(); @@ -278,6 +299,10 @@ private static Canvas createCanvas(BillFormat format) throws IOException { drawingWidth = QR_CODE_WIDTH; drawingHeight = QR_CODE_HEIGHT; break; + case QR_CODE_WITH_QUIET_ZONE: + drawingWidth = QR_CODE_WITH_QUIET_ZONE_WIDTH; + drawingHeight = QR_CODE_WITH_QUIET_ZONE_HEIGHT; + break; case A4_PORTRAIT_SHEET: default: drawingWidth = A4_PORTRAIT_WIDTH; diff --git a/generator/src/test/java/net/codecrete/qrbill/generatortest/QRCodeTest.java b/generator/src/test/java/net/codecrete/qrbill/generatortest/QRCodeTest.java index 15f5d85b..f4ee5456 100644 --- a/generator/src/test/java/net/codecrete/qrbill/generatortest/QRCodeTest.java +++ b/generator/src/test/java/net/codecrete/qrbill/generatortest/QRCodeTest.java @@ -54,4 +54,13 @@ void qrCodeAsSVG4() { byte[] svg = QRBill.generate(bill); FileComparison.assertFileContentsEqual(svg, "qrcode_ex4.svg"); } + + @Test + void qrCodeWithQuietZone() { + Bill bill = SampleData.getExample3(); + bill.getFormat().setOutputSize(OutputSize.QR_CODE_WITH_QUIET_ZONE); + bill.getFormat().setGraphicsFormat(GraphicsFormat.SVG); + byte[] svg = QRBill.generate(bill); + FileComparison.assertFileContentsEqual(svg, "qrcode_quiet_zone.svg"); + } } diff --git a/generator/src/test/resources/qrcode_quiet_zone.svg b/generator/src/test/resources/qrcode_quiet_zone.svg new file mode 100644 index 00000000..544b2f0d --- /dev/null +++ b/generator/src/test/resources/qrcode_quiet_zone.svg @@ -0,0 +1,135 @@ + + + + +Swiss QR Bill + + + + + + + + + +