Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Get rid of QPrinter in QgsMapRendererTask in favor of QPdfWriter
  • Loading branch information
nirvn authored and nyalldawson committed Mar 28, 2023
1 parent be8d45f commit a533349
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 59 deletions.
69 changes: 16 additions & 53 deletions src/core/maprenderer/qgsmaprenderertask.cpp
Expand Up @@ -31,9 +31,7 @@
#include <QImageWriter>
#include <QTextStream>
#include <QTimeZone>
#ifndef QT_NO_PRINTER
#include <QPrinter>
#endif
#include <QPdfWriter>

#include "gdal.h"
#include "cpl_conv.h"
Expand Down Expand Up @@ -176,9 +174,6 @@ bool QgsMapRendererTask::run()

if ( mGeoPDF )
{
#ifdef QT_NO_PRINTER
return false;
#else
QList< QgsAbstractGeoPdfExporter::ComponentLayerDetail > pdfComponents;

QgsMapRendererStagedRenderJob *job = static_cast< QgsMapRendererStagedRenderJob * >( mJob.get() );
Expand All @@ -194,26 +189,16 @@ bool QgsMapRendererTask::run()
component.sourcePdfPath = mGeoPdfExporter->generateTemporaryFilepath( QStringLiteral( "layer_%1.pdf" ).arg( outputLayer ) );
pdfComponents << component;

QPrinter printer;
printer.setOutputFileName( component.sourcePdfPath );
printer.setOutputFormat( QPrinter::PdfFormat );
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
printer.setOrientation( QPrinter::Portrait );
// paper size needs to be given in millimeters in order to be able to set a resolution to pass onto the map renderer
QSizeF outputSize = mMapSettings.outputSize();
printer.setPaperSize( outputSize * 25.4 / mMapSettings.outputDpi(), QPrinter::Millimeter );
printer.setPageMargins( 0, 0, 0, 0, QPrinter::Millimeter );
#else
printer.setPageOrientation( QPageLayout::Orientation::Portrait );
QPdfWriter pdfWriter( component.sourcePdfPath );
pdfWriter.setPageOrientation( QPageLayout::Orientation::Portrait );
// paper size needs to be given in millimeters in order to be able to set a resolution to pass onto the map renderer
const QSizeF outputSize = mMapSettings.outputSize();
const QPageSize pageSize( outputSize * 25.4 / mMapSettings.outputDpi(), QPageSize::Unit::Millimeter );
printer.setPageSize( pageSize );
printer.setPageMargins( QMarginsF( 0, 0, 0, 0 ) );
#endif
printer.setResolution( mMapSettings.outputDpi() );
pdfWriter.setPageSize( pageSize );
pdfWriter.setPageMargins( QMarginsF( 0, 0, 0, 0 ) );
pdfWriter.setResolution( static_cast<int>( mMapSettings.outputDpi() ) );

QPainter p( &printer );
QPainter p( &pdfWriter );
job->renderCurrentPart( &p );
p.end();

Expand Down Expand Up @@ -246,9 +231,8 @@ bool QgsMapRendererTask::run()
const bool res = mGeoPdfExporter->finalize( pdfComponents, mFileName, exportDetails );
mGeoPdfExporter.reset();
mTempPainter.reset();
mPrinter.reset();
mPdfWriter.reset();
return res;
#endif
}
else
static_cast< QgsMapRendererCustomPainterJob *>( mJob.get() )->renderPrepared();
Expand Down Expand Up @@ -310,11 +294,10 @@ bool QgsMapRendererTask::run()

if ( mFileFormat == QLatin1String( "PDF" ) )
{
#ifndef QT_NO_PRINTER
if ( mForceRaster )
{
QPainter pp;
pp.begin( mPrinter.get() );
pp.begin( mPdfWriter.get() );
const QRectF rect( 0, 0, mImage.width(), mImage.height() );
pp.drawImage( rect, mImage, rect );
pp.end();
Expand Down Expand Up @@ -377,10 +360,6 @@ bool QgsMapRendererTask::run()
}
CPLSetThreadLocalConfigOption( "GDAL_PDF_DPI", nullptr );
}
#else
mError = ImageUnsupportedFormat;
return false;
#endif // !QT_NO_PRINTER
}
else if ( mFileFormat != QLatin1String( "PDF" ) )
{
Expand Down Expand Up @@ -439,9 +418,7 @@ bool QgsMapRendererTask::run()
}

mTempPainter.reset();
#ifndef QT_NO_PRINTER
mPrinter.reset();
#endif
mPdfWriter.reset();

return true;
}
Expand Down Expand Up @@ -484,34 +461,20 @@ void QgsMapRendererTask::prepare()

if ( mFileFormat == QLatin1String( "PDF" ) )
{
#ifndef QT_NO_PRINTER
mPrinter.reset( new QPrinter() );
mPrinter->setOutputFileName( mFileName );
mPrinter->setOutputFormat( QPrinter::PdfFormat );
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
mPrinter->setOrientation( QPrinter::Portrait );
// paper size needs to be given in millimeters in order to be able to set a resolution to pass onto the map renderer
QSizeF outputSize = mMapSettings.outputSize();
mPrinter->setPaperSize( outputSize * 25.4 / mMapSettings.outputDpi(), QPrinter::Millimeter );
mPrinter->setPageMargins( 0, 0, 0, 0, QPrinter::Millimeter );
#else
mPrinter->setPageOrientation( QPageLayout::Orientation::Portrait );
mPdfWriter.reset( new QPdfWriter( mFileName ) );
mPdfWriter->setPageOrientation( QPageLayout::Orientation::Portrait );
// paper size needs to be given in millimeters in order to be able to set a resolution to pass onto the map renderer
const QSizeF outputSize = mMapSettings.outputSize();
const QPageSize pageSize( outputSize * 25.4 / mMapSettings.outputDpi(), QPageSize::Unit::Millimeter );
mPrinter->setPageSize( pageSize );
mPrinter->setPageMargins( QMarginsF( 0, 0, 0, 0 ) );
#endif
mPrinter->setResolution( mMapSettings.outputDpi() );
mPdfWriter->setPageSize( pageSize );
mPdfWriter->setPageMargins( QMarginsF( 0, 0, 0, 0 ) );
mPdfWriter->setResolution( static_cast<int>( mMapSettings.outputDpi() ) );

if ( !mForceRaster )
{
mTempPainter.reset( new QPainter( mPrinter.get() ) );
mTempPainter.reset( new QPainter( mPdfWriter.get() ) );
mDestPainter = mTempPainter.get();
}
#else
mError = ImageUnsupportedFormat;
#endif // ! QT_NO_PRINTER
}

if ( !mDestPainter )
Expand Down
8 changes: 2 additions & 6 deletions src/core/maprenderer/qgsmaprenderertask.h
Expand Up @@ -29,9 +29,7 @@
#include "qgsabstractgeopdfexporter.h"

#include <QPainter>
#ifndef QT_NO_PRINTER
#include <QPrinter>
#endif
#include <QPdfWriter>

class QgsMapRendererCustomPainterJob;
class QgsAbstractGeoPdfExporter;
Expand Down Expand Up @@ -151,9 +149,7 @@ class CORE_EXPORT QgsMapRendererTask : public QgsTask
QPainter *mPainter = nullptr;
QPainter *mDestPainter = nullptr;
QImage mImage;
#ifndef QT_NO_PRINTER
std::unique_ptr< QPrinter > mPrinter;
#endif // ! QT_NO_PRINTER
std::unique_ptr< QPdfWriter > mPdfWriter;

std::unique_ptr< QPainter > mTempPainter;

Expand Down

0 comments on commit a533349

Please sign in to comment.