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 }