diff --git a/core/fileprinter.cpp b/core/fileprinter.cpp --- a/core/fileprinter.cpp +++ b/core/fileprinter.cpp @@ -617,10 +617,16 @@ } else { qreal l, t, r, b; printer.getPageMargins( &l, &t, &r, &b, QPrinter::Point ); - return QStringList(QStringLiteral("-o")) << QStringLiteral("page-left=%1").arg(l) - << QStringLiteral("-o") << QStringLiteral("page-top=%1").arg(t) - << QStringLiteral("-o") << QStringLiteral("page-right=%1").arg(r) - << QStringLiteral("-o") << QStringLiteral("page-bottom=%1").arg(b) << QStringLiteral("-o") << QStringLiteral("fit-to-page"); + QStringList marginOptions; + if (!printer.fullPage()) { + marginOptions << QStringLiteral("-o") << QStringLiteral("page-left=%1").arg(l) + << QStringLiteral("-o") << QStringLiteral("page-top=%1").arg(t) + << QStringLiteral("-o") << QStringLiteral("page-right=%1").arg(r) + << QStringLiteral("-o") << QStringLiteral("page-bottom=%1").arg(b); + } + marginOptions << QStringLiteral("-o") << QStringLiteral("fit-to-page"); + + return marginOptions; } } diff --git a/generators/poppler/generator_pdf.cpp b/generators/poppler/generator_pdf.cpp --- a/generators/poppler/generator_pdf.cpp +++ b/generators/poppler/generator_pdf.cpp @@ -70,6 +70,41 @@ static const int defaultPageWidth = 595; static const int defaultPageHeight = 842; +// TODO: either move this class out of the PDF generator so that it can be used by +// other generators for printing as well or merge it with the 'PDFOptionsPage' class below +class PrintScalingOptionWidget : public QWidget +{ + Q_OBJECT + + public: + explicit PrintScalingOptionWidget(QWidget *parent = nullptr) + :QWidget(parent) + { + setWindowTitle( i18n( "Print Options" ) ); + QVBoxLayout *layout = new QVBoxLayout(this); + m_scaleToPrintableArea = new QCheckBox(i18n("Fit to printable area"), this); + m_scaleToPrintableArea->setToolTip(i18n("Scale the printout to the printable area on paper when printing")); + m_scaleToPrintableArea->setWhatsThis(i18n("Scales the pages to the size that fits into the printable area when printing. This means that the printer margins set in the \"Properties\" dialog are taken into account.")); + layout->addWidget(m_scaleToPrintableArea); + layout->addStretch(1); + // enable scaling by default + setScaleToPrintableArea( true ); + } + + bool scaleToPrintableArea() + { + return m_scaleToPrintableArea->isChecked(); + } + + void setScaleToPrintableArea( bool scaleToPrintableArea ) + { + m_scaleToPrintableArea->setChecked( scaleToPrintableArea ); + } + + private: + QCheckBox *m_scaleToPrintableArea; +}; + class PDFOptionsPage : public QWidget { Q_OBJECT @@ -87,6 +122,8 @@ m_forceRaster->setToolTip(i18n("Rasterize into an image before printing")); m_forceRaster->setWhatsThis(i18n("Forces the rasterization of each page into an image before printing it. This usually gives somewhat worse results, but is useful when printing documents that appear to print incorrectly.")); layout->addWidget(m_forceRaster); + m_printScalingOptionWidget = new PrintScalingOptionWidget(this); + layout->addWidget(m_printScalingOptionWidget); layout->addStretch(1); #if defined(Q_OS_WIN) && !defined HAVE_POPPLER_0_60 @@ -115,9 +152,14 @@ m_forceRaster->setChecked( forceRaster ); } + bool printScaleToPrintableArea() { + return m_printScalingOptionWidget->scaleToPrintableArea(); + } + private: QCheckBox *m_printAnnots; QCheckBox *m_forceRaster; + PrintScalingOptionWidget *m_printScalingOptionWidget; }; @@ -1233,6 +1275,7 @@ { printAnnots = pdfOptionsPage->printAnnots(); forceRasterize = pdfOptionsPage->printForceRaster(); + printer.setFullPage(!pdfOptionsPage->printScaleToPrintableArea()); } #ifdef Q_OS_WIN