diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2024-01-12 15:31:12 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-01-21 21:42:48 +0000 |
commit | d516c5e48b97ffb1afb2d4a9b7ccac27319895c1 (patch) | |
tree | 9b996eee7db4b64bbf02932462e4bdf303649acc | |
parent | ec15a072faad0420cc4e1ca35d647c806f961de9 (diff) |
Fix printing when page ranges are specified
Page ranges are applied at the PDF generation phase and it's incorrect
to do it again in PrinterWorker. Simplify it to print all available
pages.
Fixes: QTBUG-119991
Change-Id: Iaaf435ba2a93ea4480dc1d2f5500844138ea1b53
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
(cherry picked from commit ad26c851700de5ee0962a944d6fc02b58004de1a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 2463c13ae64701e7c18495eb7dd63e0dc7a129b3)
-rw-r--r-- | src/core/printing/printer_worker.cpp | 38 |
1 files changed, 7 insertions, 31 deletions
diff --git a/src/core/printing/printer_worker.cpp b/src/core/printing/printer_worker.cpp index da7165623..6032f2211 100644 --- a/src/core/printing/printer_worker.cpp +++ b/src/core/printing/printer_worker.cpp @@ -27,22 +27,8 @@ void PrinterWorker::print() PdfiumDocumentWrapperQt pdfiumWrapper(m_data->constData(), m_data->size()); - const QPageRanges ranges = m_device->pageRanges(); - int toPage = ranges.firstPage(); - int fromPage = ranges.lastPage(); - bool ascendingOrder = true; - - if (fromPage == 0 && toPage == 0) { - fromPage = 1; - toPage = pdfiumWrapper.pageCount(); - } - fromPage = qMax(1, fromPage); - toPage = qMin(pdfiumWrapper.pageCount(), toPage); - - if (!m_firstPageFirst) { - qSwap(fromPage, toPage); - ascendingOrder = false; - } + const int fromPage = m_firstPageFirst ? 0 : pdfiumWrapper.pageCount() - 1; + const int toPage = m_firstPageFirst ? pdfiumWrapper.pageCount() : -1; int pageCopies = 1; if (m_collateCopies) { @@ -58,10 +44,8 @@ void PrinterWorker::print() if (printedDocuments > 0) m_device->newPage(); - int currentPageIndex = fromPage; - - for (int i = 0; true; i++) { - QSizeF documentSize = (pdfiumWrapper.pageSize(currentPageIndex - 1) * resolution); + for (int i = fromPage; i != toPage; m_firstPageFirst ? i++ : i--) { + QSizeF documentSize = (pdfiumWrapper.pageSize(i) * resolution); bool isLandscape = documentSize.width() > documentSize.height(); m_device->setPageOrientation(isLandscape ? QPageLayout::Landscape : QPageLayout::Portrait); @@ -77,29 +61,21 @@ void PrinterWorker::print() return; } - if (i > 0) + if (i != fromPage) m_device->newPage(); for (int printedPages = 0; printedPages < pageCopies; printedPages++) { if (printedPages > 0) m_device->newPage(); - QImage currentImage = pdfiumWrapper.pageAsQImage( - currentPageIndex - 1, documentSize.width(), documentSize.height()); + QImage currentImage = + pdfiumWrapper.pageAsQImage(i, documentSize.width(), documentSize.height()); if (currentImage.isNull()) { Q_EMIT resultReady(false); return; } painter.drawImage(0, 0, currentImage); } - - if (currentPageIndex == toPage) - break; - - if (ascendingOrder) - currentPageIndex++; - else - currentPageIndex--; } } painter.end(); |