Warning, file /utilities/skanpage/src/DocumentPrinter.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /** 0002 * SPDX-FileCopyrightText: 2021 by Alexander Stippich <a.stippich@gmx.net> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "DocumentPrinter.h" 0008 0009 #include <QPainter> 0010 #include <QPrinter> 0011 #include <QPrintDialog> 0012 0013 #include <QTransform> 0014 #include <QtConcurrent> 0015 0016 #include <KLocalizedString> 0017 0018 #include "skanpage_debug.h" 0019 0020 DocumentPrinter::DocumentPrinter(QObject *parent) 0021 : QObject(parent) 0022 , m_printer(std::make_unique<QPrinter>()) 0023 { 0024 } 0025 0026 DocumentPrinter::~DocumentPrinter() 0027 { 0028 } 0029 0030 void DocumentPrinter::printDocument(const SkanpageUtils::DocumentPages &document) 0031 { 0032 if (document.isEmpty()) { 0033 Q_EMIT showUserMessage(SkanpageUtils::ErrorMessage, i18n("Nothing to print.")); 0034 return; 0035 } 0036 if (m_future.isRunning()) { 0037 Q_EMIT showUserMessage(SkanpageUtils::ErrorMessage, i18n("Previous printing operation still in progress.")); 0038 return; 0039 } 0040 0041 QPrintDialog printDialog(m_printer.get()); 0042 0043 if (printDialog.exec() == QDialog::Accepted) { 0044 m_future = QtConcurrent::run(&DocumentPrinter::print, this, document); 0045 } 0046 } 0047 0048 void DocumentPrinter::print(const SkanpageUtils::DocumentPages &document) 0049 { 0050 QPainter painter(m_printer.get()); 0051 QRect rect = painter.viewport(); 0052 for (int i = 0; i < document.count(); ++i) { 0053 if (i != 0) { 0054 m_printer->newPage(); 0055 } 0056 int rotationAngle = document.at(i).rotationAngle; 0057 QImage pageImage(document.at(i).temporaryFile->fileName()); 0058 if (rotationAngle != 0) { 0059 pageImage = pageImage.transformed(QTransform().rotate(rotationAngle)); 0060 } 0061 0062 QSize size = pageImage.size(); 0063 size.scale(rect.size(), Qt::KeepAspectRatio); 0064 painter.setViewport(rect.x(), rect.y(),size.width(), size.height()); 0065 painter.setWindow(pageImage.rect()); 0066 painter.drawImage(0, 0, pageImage); 0067 } 0068 0069 Q_EMIT showUserMessage(SkanpageUtils::InformationMessage, i18n("Document sent to printer.")); 0070 } 0071 0072 #include "moc_DocumentPrinter.cpp"