From 6fd3366ae84533ae25eda371150013faa57bb59c Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Fri, 9 Aug 2019 15:58:31 +1000 Subject: [PATCH] Georeference PDFs (WIP) --- src/core/layout/qgslayoutgeopdfexporter.cpp | 67 ++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/src/core/layout/qgslayoutgeopdfexporter.cpp b/src/core/layout/qgslayoutgeopdfexporter.cpp index ad87c73538df..8a487a51246b 100644 --- a/src/core/layout/qgslayoutgeopdfexporter.cpp +++ b/src/core/layout/qgslayoutgeopdfexporter.cpp @@ -47,6 +47,8 @@ class QgsGeoPdfRenderedFeatureHandler: public QgsRenderedFeatureHandlerInterface //create transform from layout coordinates to map coordinates QTransform::quadToQuad( mapRectPoly, mapRectInLayout, mMapToLayoutTransform ); + + mLayoutToPdfTransform = QTransform::fromTranslate( 0, 595 ).scale( 842.0 / 297, -595.0 / 210 ); } void handleRenderedFeature( const QgsFeature &feature, const QgsGeometry &renderedBounds, const QgsRenderedFeatureHandlerInterface::RenderedFeatureContext &context ) override @@ -62,6 +64,8 @@ class QgsGeoPdfRenderedFeatureHandler: public QgsRenderedFeatureHandlerInterface transformed.transform( pixelToMapItemTransform ); // transform from map item coordinates to page coordinates transformed.transform( mMapToLayoutTransform ); + // ...and then to PDF coordinate space + transformed.transform( mLayoutToPdfTransform ); // always convert to multitype, to make things consistent transformed.convertToMultiType(); @@ -81,6 +85,7 @@ class QgsGeoPdfRenderedFeatureHandler: public QgsRenderedFeatureHandlerInterface private: QTransform mMapToLayoutTransform; + QTransform mLayoutToPdfTransform; QMutex mMutex; }; @@ -276,7 +281,67 @@ QString QgsLayoutGeoPdfExporter::createCompositionXml( const QList