summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSzabolcs David <davidsz@inf.u-szeged.hu>2024-01-12 15:31:12 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-01-21 21:42:48 +0000
commitd516c5e48b97ffb1afb2d4a9b7ccac27319895c1 (patch)
tree9b996eee7db4b64bbf02932462e4bdf303649acc
parentec15a072faad0420cc4e1ca35d647c806f961de9 (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.cpp38
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();