File indexing completed on 2024-05-12 04:01:32

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: MIT
0005 */
0006 
0007 #include "pdf417barcode_p.h"
0008 #include "zxingutil_p.h"
0009 
0010 #include <ZXing/BitMatrix.h>
0011 #include <ZXing/MultiFormatWriter.h>
0012 
0013 #include <stdexcept>
0014 
0015 using namespace Prison;
0016 
0017 Pdf417Barcode::Pdf417Barcode()
0018     : AbstractBarcodePrivate(Barcode::TwoDimensions)
0019 {
0020 }
0021 
0022 QImage Pdf417Barcode::paintImage()
0023 {
0024     try {
0025         ZXing::MultiFormatWriter writer(ZXing::BarcodeFormat::PDF417);
0026         // ISO/IEC 15438:2006(E) ยง5.8.3 Quiet Zone
0027         writer.setMargin(2);
0028         if (m_data.userType() == QMetaType::QByteArray) {
0029             writer.setEncoding(ZXing::CharacterSet::BINARY);
0030         }
0031         // aspect ratio 4 is hard-coded in ZXing
0032         const auto matrix = writer.encode(ZXingUtil::toStdWString(m_data), 4, 1);
0033         return ZXingUtil::toImage(matrix, m_foreground, m_background);
0034     } catch (const std::invalid_argument &e) {
0035     }; // input too large
0036     return {};
0037 }
0038 
0039 QSizeF Pdf417Barcode::preferredSize(qreal devicePixelRatio) const
0040 {
0041     return m_cache.size() * (devicePixelRatio < 2 ? 2 : 1);
0042 }