Skip to content

Commit

Permalink
[FEATURE] Add GUI option when exporting canvas to PDF for GeoPDF export
Browse files Browse the repository at this point in the history
Adds a checkbox allowing users to control whether GeoPDF files should
be created when exporting the canvas as a PDF. If GeoPDF isn't available
(e.g. due to having GDAL < 3.0, or GDAL built without PDF read support),
then this option is disabled and an explanation shown as to why instead.
  • Loading branch information
nyalldawson committed Aug 19, 2019
1 parent 6ad10e3 commit ec42cc7
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 40 deletions.
17 changes: 16 additions & 1 deletion src/app/qgsmapsavedialog.cpp
Expand Up @@ -26,6 +26,7 @@
#include <QSpinBox>

#include "qgsmapsavedialog.h"
#include "qgsabstractgeopdfexporter.h"
#include "qgsguiutils.h"
#include "qgis.h"
#include "qgisapp.h"
Expand Down Expand Up @@ -117,11 +118,25 @@ QgsMapSaveDialog::QgsMapSaveDialog( QWidget *parent, QgsMapCanvas *mapCanvas, co
mSaveAsRaster->setVisible( true );

this->setWindowTitle( tr( "Save Map as PDF" ) );

const bool geoPdfAvailable = QgsAbstractGeoPdfExporter::geoPDFCreationAvailable();
mGeoPDFGroupBox->setEnabled( geoPdfAvailable );
if ( !geoPdfAvailable )
{
mGeoPDFGroupBox->setChecked( false );
mGeoPDFOptionsStackedWidget->setCurrentIndex( 0 );
mGeoPdfUnavailableReason->setText( mGeoPdfUnavailableReason::geoPDFAvailabilityExplanation() );
}
else
{
mGeoPDFOptionsStackedWidget->setCurrentIndex( 1 );
}
break;
}

case Image:
{
mGeoPDFGroupBox->hide();
QPushButton *button = new QPushButton( tr( "Copy to Clipboard" ) );
buttonBox->addButton( button, QDialogButtonBox::ResetRole );
connect( button, &QPushButton::clicked, this, &QgsMapSaveDialog::copyToClipboard );
Expand Down Expand Up @@ -457,7 +472,7 @@ void QgsMapSaveDialog::onAccepted()
QgsMapSettings ms = QgsMapSettings();
applyMapSettings( ms );

QgsMapRendererTask *mapRendererTask = new QgsMapRendererTask( ms, fileName, QStringLiteral( "PDF" ), saveAsRaster() );
QgsMapRendererTask *mapRendererTask = new QgsMapRendererTask( ms, fileName, QStringLiteral( "PDF" ), saveAsRaster(), mGeoPDFGroupBox->isChecked() );

if ( drawAnnotations() )
{
Expand Down
124 changes: 85 additions & 39 deletions src/ui/qgsmapsavedialog.ui
Expand Up @@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>600</width>
<height>318</height>
<height>439</height>
</rect>
</property>
<property name="windowTitle">
Expand All @@ -16,27 +16,10 @@
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="9" column="0" colspan="2">
<widget class="QLabel" name="mInfo">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<widget class="QCheckBox" name="mSaveAsRaster">
<property name="visible">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Advanced effects such as blend modes or vector layer transparency cannot be exported as vectors.
Rasterizing the map is recommended when such effects are used.</string>
</property>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Rasterize map</string>
</property>
<property name="checked">
<bool>false</bool>
<string>Resolution</string>
</property>
</widget>
</item>
Expand All @@ -50,6 +33,23 @@ Rasterizing the map is recommended when such effects are used.</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QgsScaleWidget" name="mScaleWidget" native="true"/>
</item>
<item row="0" column="0" colspan="2">
<widget class="QgsExtentGroupBox" name="mExtentGroupBox">
<property name="title">
<string>Extent</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Output height</string>
</property>
</widget>
</item>
<item row="6" column="0" colspan="2">
<widget class="QCheckBox" name="mDrawAnnotations">
<property name="text">
Expand All @@ -70,17 +70,27 @@ Rasterizing the map is recommended when such effects are used.</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_4">
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Output height</string>
<string>Output width</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<item row="9" column="0" colspan="2">
<widget class="QCheckBox" name="mSaveAsRaster">
<property name="visible">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Advanced effects such as blend modes or vector layer transparency cannot be exported as vectors.
Rasterizing the map is recommended when such effects are used.</string>
</property>
<property name="text">
<string>Output width</string>
<string>Rasterize map</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
Expand Down Expand Up @@ -170,13 +180,6 @@ Rasterizing the map is recommended when such effects are used.</string>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Resolution</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QgsSpinBox" name="mResolutionSpinBox">
<property name="suffix">
Expand All @@ -203,14 +206,57 @@ Rasterizing the map is recommended when such effects are used.</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QgsScaleWidget" name="mScaleWidget" native="true"/>
<item row="10" column="0" colspan="2">
<widget class="QLabel" name="mInfo">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QgsExtentGroupBox" name="mExtentGroupBox">
<item row="8" column="0" colspan="2">
<widget class="QGroupBox" name="mGeoPDFGroupBox">
<property name="title">
<string>Extent</string>
<string>Create Geospatial PDF (GeoPDF)</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QStackedWidget" name="mGeoPDFOptionsStackedWidget">
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="page">
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="mGeoPdfUnavailableReason">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2"/>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
Expand Down

0 comments on commit ec42cc7

Please sign in to comment.