QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
qgsabstractgeopdfexporter.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsabstractgeopdfexporter.h
3  --------------------------
4  begin : August 2019
5  copyright : (C) 2019 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************/
8 /***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  ***************************************************************************/
16 #ifndef QGSABSTRACTGEOPDFEXPORTER_H
17 #define QGSABSTRACTGEOPDFEXPORTER_H
18 
19 #include "qgis_core.h"
20 #include <QList>
21 #include <QTemporaryDir>
22 #include <QMutex>
23 #include <QDateTime>
24 #include <QPainter>
25 
26 #include "qgsfeature.h"
28 #include "qgspolygon.h"
30 
31 #define SIP_NO_FILE
32 
33 
34 class QgsGeoPdfRenderedFeatureHandler;
35 
55 class CORE_EXPORT QgsAbstractGeoPdfExporter
56 {
57  public:
58 
65  static bool geoPDFCreationAvailable();
66 
73  static QString geoPDFAvailabilityExplanation();
74 
78  QgsAbstractGeoPdfExporter() = default;
79 
80  virtual ~QgsAbstractGeoPdfExporter() = default;
81 
86  {
87 
91  RenderedFeature() = default;
92 
96  RenderedFeature( const QgsFeature &feature, const QgsGeometry &renderedBounds )
97  : feature( feature )
98  , renderedBounds( renderedBounds )
99  {}
100 
105 
110  };
111 
117  struct CORE_EXPORT ComponentLayerDetail
118  {
119 
121  QString name;
122 
124  QString mapLayerId;
125 
127  QString group;
128 
130  QString sourcePdfPath;
131 
133  QPainter::CompositionMode compositionMode = QPainter::CompositionMode_SourceOver;
134 
136  double opacity = 1.0;
137 
138  };
139 
146  {
147 
152  ControlPoint( const QgsPointXY &pagePoint, const QgsPointXY &geoPoint )
153  : pagePoint( pagePoint )
154  , geoPoint( geoPoint )
155  {}
156 
159 
162  };
163 
165  {
166 
173 
180 
183 
185  QList< QgsAbstractGeoPdfExporter::ControlPoint > controlPoints;
186 
187  };
188 
196  void pushRenderedFeature( const QString &layerId, const QgsAbstractGeoPdfExporter::RenderedFeature &feature, const QString &group = QString() );
197 
199  {
201  QSizeF pageSizeMm;
202 
204  double dpi = 300;
205 
207  QList< QgsAbstractGeoPdfExporter::GeoReferencedSection > georeferencedSections;
208 
210  QString author;
211 
213  QString producer;
214 
216  QString creator;
217 
219  QDateTime creationDateTime;
220 
222  QString subject;
223 
225  QString title;
226 
229 
236  bool useIso32000ExtensionFormatGeoreferencing = true;
237 
245  bool useOgcBestPracticeFormatGeoreferencing = false;
246 
250  bool includeFeatures = true;
251 
262  QMap< QString, QString > customLayerTreeGroups;
263 
269  QMap< QString, QString > layerIdToPdfLayerTreeNameMap;
270 
277  QMap< QString, bool > initialLayerVisibility;
278 
286  QStringList layerOrder;
287 
288  };
289 
303  bool finalize( const QList< QgsAbstractGeoPdfExporter::ComponentLayerDetail > &components, const QString &destinationFile, const ExportDetails &details );
304 
308  QString errorMessage() const { return mErrorMessage; }
309 
313  QString generateTemporaryFilepath( const QString &filename ) const;
314 
321  static bool compositionModeSupported( QPainter::CompositionMode mode );
322 
323  protected:
324 
329  {
331  QString name;
332 
334  QString mapLayerId;
335 
337  QString group;
338 
341 
344 
347 
348  };
349 
350  private:
351 
352  QMutex mMutex;
353  QMap< QString, QMap< QString, QgsFeatureList > > mCollatedFeatures;
354 
358  virtual VectorComponentDetail componentDetailForLayerId( const QString &layerId ) = 0;
359 
360  QList< VectorComponentDetail > mVectorComponents;
361 
362  QString mErrorMessage;
363  QTemporaryDir mTemporaryDir;
364 
365 
366  bool saveTemporaryLayers();
367 
368  QString createCompositionXml( const QList< QgsAbstractGeoPdfExporter::ComponentLayerDetail > &components, const ExportDetails &details );
369 
373  static QString compositionModeToString( QPainter::CompositionMode mode );
374 
375  friend class TestQgsLayoutGeoPdfExport;
376  friend class TestQgsGeoPdfExport;
377 };
378 
379 #endif //QGSABSTRACTGEOPDFEXPORTER_H
380 
381 
382 
qgspolygon.h
QgsAbstractGeoPdfExporter::ExportDetails::layerOrder
QStringList layerOrder
Optional list of layer IDs, in the order desired to appear in the generated GeoPDF file.
Definition: qgsabstractgeopdfexporter.h:286
QgsAbstractGeoPdfExporter::ControlPoint
Contains details of a control point used during georeferencing GeoPDF outputs.
Definition: qgsabstractgeopdfexporter.h:145
QgsPolygon
Polygon geometry type.
Definition: qgspolygon.h:33
QgsAbstractGeoPdfExporter::VectorComponentDetail::displayAttribute
QString displayAttribute
Field name for display.
Definition: qgsabstractgeopdfexporter.h:340
QgsAbstractGeoPdfExporter::ComponentLayerDetail::mapLayerId
QString mapLayerId
Associated map layer ID, or an empty string if this component layer is not associated with a map laye...
Definition: qgsabstractgeopdfexporter.h:124
QgsAbstractGeoPdfExporter::RenderedFeature::renderedBounds
QgsGeometry renderedBounds
Bounds, in PDF units, of rendered feature.
Definition: qgsabstractgeopdfexporter.h:109
qgsfeature.h
QgsAbstractGeoPdfExporter::RenderedFeature::RenderedFeature
RenderedFeature(const QgsFeature &feature, const QgsGeometry &renderedBounds)
Constructor for RenderedFeature.
Definition: qgsabstractgeopdfexporter.h:96
QgsAbstractGeoPdfExporter::GeoReferencedSection::pageBoundsPolygon
QgsPolygon pageBoundsPolygon
Bounds of the georeferenced section on the page, in millimeters, as a free-form polygon.
Definition: qgsabstractgeopdfexporter.h:179
QgsAbstractGeoPdfExporter::RenderedFeature::feature
QgsFeature feature
Rendered feature.
Definition: qgsabstractgeopdfexporter.h:104
QgsAbstractGeoPdfExporter::ExportDetails
Definition: qgsabstractgeopdfexporter.h:198
QgsAbstractGeoPdfExporter::GeoReferencedSection
Definition: qgsabstractgeopdfexporter.h:164
QgsAbstractGeoPdfExporter::ExportDetails::layerIdToPdfLayerTreeNameMap
QMap< QString, QString > layerIdToPdfLayerTreeNameMap
Optional map of map layer ID to custom layer tree name to show in the created PDF file.
Definition: qgsabstractgeopdfexporter.h:269
QgsAbstractGeoPdfExporter::ExportDetails::title
QString title
Metadata title tag.
Definition: qgsabstractgeopdfexporter.h:225
QgsRectangle
A rectangle specified with double values.
Definition: qgsrectangle.h:41
QgsAbstractGeoPdfExporter::ExportDetails::keywords
QgsAbstractMetadataBase::KeywordMap keywords
Metadata keyword map.
Definition: qgsabstractgeopdfexporter.h:228
QgsAbstractGeoPdfExporter::errorMessage
QString errorMessage() const
Returns the last error message encountered during the export.
Definition: qgsabstractgeopdfexporter.h:308
QgsAbstractGeoPdfExporter::ExportDetails::georeferencedSections
QList< QgsAbstractGeoPdfExporter::GeoReferencedSection > georeferencedSections
List of georeferenced sections.
Definition: qgsabstractgeopdfexporter.h:207
QgsAbstractGeoPdfExporter::ControlPoint::geoPoint
QgsPointXY geoPoint
Georeferenced coordinate of the control point, in CRS units.
Definition: qgsabstractgeopdfexporter.h:161
QgsAbstractGeoPdfExporter::ExportDetails::initialLayerVisibility
QMap< QString, bool > initialLayerVisibility
Optional map of map layer ID to initial visibility state.
Definition: qgsabstractgeopdfexporter.h:277
QgsAbstractGeoPdfExporter::VectorComponentDetail::mapLayerId
QString mapLayerId
Associated map layer ID.
Definition: qgsabstractgeopdfexporter.h:334
QgsAbstractGeoPdfExporter::VectorComponentDetail
Contains information relating to a single PDF layer in the GeoPDF export.
Definition: qgsabstractgeopdfexporter.h:328
QgsAbstractGeoPdfExporter::RenderedFeature
Contains information about a feature rendered inside the PDF.
Definition: qgsabstractgeopdfexporter.h:85
QgsAbstractGeoPdfExporter::ComponentLayerDetail::sourcePdfPath
QString sourcePdfPath
File path to the (already created) PDF to use as the source for this component layer.
Definition: qgsabstractgeopdfexporter.h:130
QgsAbstractGeoPdfExporter::ExportDetails::producer
QString producer
Metadata producer tag.
Definition: qgsabstractgeopdfexporter.h:213
QgsAbstractGeoPdfExporter::VectorComponentDetail::sourceVectorPath
QString sourceVectorPath
File path to the (already created) vector dataset to use as the source for this component layer.
Definition: qgsabstractgeopdfexporter.h:343
QgsCoordinateReferenceSystem
This class represents a coordinate reference system (CRS).
Definition: qgscoordinatereferencesystem.h:211
QgsPointXY
A class to represent a 2D point.
Definition: qgspointxy.h:58
QgsAbstractGeoPdfExporter::ControlPoint::pagePoint
QgsPointXY pagePoint
Coordinate on the page of the control point, in millimeters.
Definition: qgsabstractgeopdfexporter.h:158
QgsAbstractGeoPdfExporter::VectorComponentDetail::group
QString group
Optional layer group name.
Definition: qgsabstractgeopdfexporter.h:337
QgsAbstractGeoPdfExporter::ExportDetails::creator
QString creator
Metadata creator tag.
Definition: qgsabstractgeopdfexporter.h:216
QgsAbstractGeoPdfExporter::ComponentLayerDetail
Contains details of a particular input component to be used during PDF composition.
Definition: qgsabstractgeopdfexporter.h:117
QgsGeometry
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:124
QgsAbstractGeoPdfExporter::GeoReferencedSection::pageBoundsMm
QgsRectangle pageBoundsMm
Bounds of the georeferenced section on the page, in millimeters.
Definition: qgsabstractgeopdfexporter.h:172
QgsAbstractGeoPdfExporter::GeoReferencedSection::controlPoints
QList< QgsAbstractGeoPdfExporter::ControlPoint > controlPoints
List of control points corresponding to this georeferenced section.
Definition: qgsabstractgeopdfexporter.h:185
QgsAbstractGeoPdfExporter::ExportDetails::author
QString author
Metadata author tag.
Definition: qgsabstractgeopdfexporter.h:210
QgsAbstractGeoPdfExporter::VectorComponentDetail::sourceVectorLayer
QString sourceVectorLayer
Layer name in vector dataset to use as the source.
Definition: qgsabstractgeopdfexporter.h:346
QgsAbstractGeoPdfExporter::ComponentLayerDetail::group
QString group
Optional group name, for arranging layers in top-level groups.
Definition: qgsabstractgeopdfexporter.h:127
QgsAbstractGeoPdfExporter::GeoReferencedSection::crs
QgsCoordinateReferenceSystem crs
Coordinate reference system for georeferenced section.
Definition: qgsabstractgeopdfexporter.h:182
qgsabstractmetadatabase.h
QgsAbstractMetadataBase::KeywordMap
QMap< QString, QStringList > KeywordMap
Map of vocabulary string to keyword list.
Definition: qgsabstractmetadatabase.h:78
QgsAbstractGeoPdfExporter::ExportDetails::subject
QString subject
Metadata subject tag.
Definition: qgsabstractgeopdfexporter.h:222
QgsAbstractGeoPdfExporter::ExportDetails::creationDateTime
QDateTime creationDateTime
Metadata creation datetime.
Definition: qgsabstractgeopdfexporter.h:219
QgsFeature
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:55
QgsAbstractGeoPdfExporter::VectorComponentDetail::name
QString name
User-friendly name for the generated PDF layer.
Definition: qgsabstractgeopdfexporter.h:331
QgsAbstractGeoPdfExporter::ComponentLayerDetail::name
QString name
User-friendly name for the generated PDF layer.
Definition: qgsabstractgeopdfexporter.h:121
QgsAbstractGeoPdfExporter::ControlPoint::ControlPoint
ControlPoint(const QgsPointXY &pagePoint, const QgsPointXY &geoPoint)
Constructor for ControlPoint, at the specified pagePoint (in millimeters) and geoPoint (in CRS units)...
Definition: qgsabstractgeopdfexporter.h:152
qgscoordinatereferencesystem.h
QgsAbstractGeoPdfExporter
Abstract base class for GeoPDF exporters.
Definition: qgsabstractgeopdfexporter.h:55
QgsAbstractGeoPdfExporter::ExportDetails::pageSizeMm
QSizeF pageSizeMm
Page size, in millimeters.
Definition: qgsabstractgeopdfexporter.h:201
QgsAbstractGeoPdfExporter::ExportDetails::customLayerTreeGroups
QMap< QString, QString > customLayerTreeGroups
Optional map of map layer ID to custom logical layer tree group in created PDF file.
Definition: qgsabstractgeopdfexporter.h:262