Skip to content

Commit fe1e324

Browse files
author
jef
committedJul 23, 2009
add export to PDF to composer
git-svn-id: http://svn.osgeo.org/qgis/trunk@11165 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent a4c7bb7 commit fe1e324

File tree

5 files changed

+90
-47
lines changed

5 files changed

+90
-47
lines changed
 
1.1 KB
Loading
968 Bytes
Loading

‎src/app/composer/qgscomposer.cpp

Lines changed: 75 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ void QgsComposer::setupTheme()
239239
mActionSaveAsTemplate->setIcon( QgisApp::getThemeIcon( "/mActionFileSaveAs.png" ) );
240240
mActionExportAsImage->setIcon( QgisApp::getThemeIcon( "/mActionExportMapServer.png" ) );
241241
mActionExportAsSVG->setIcon( QgisApp::getThemeIcon( "/mActionSaveAsSVG.png" ) );
242+
mActionExportAsPDF->setIcon( QgisApp::getThemeIcon( "/mActionSaveAsPDF.png" ) );
242243
mActionPrint->setIcon( QgisApp::getThemeIcon( "/mActionFilePrint.png" ) );
243244
mActionZoomAll->setIcon( QgisApp::getThemeIcon( "/mActionZoomFullExtent.png" ) );
244245
mActionZoomIn->setIcon( QgisApp::getThemeIcon( "/mActionZoomIn.png" ) );
@@ -429,20 +430,55 @@ void QgsComposer::on_mActionRefreshView_triggered()
429430
}
430431
}
431432

433+
void QgsComposer::on_mActionExportAsPDF_triggered()
434+
{
435+
QSettings myQSettings; // where we keep last used filter in persistant state
436+
QString myLastUsedFile = myQSettings.value( "/UI/lastSaveAsPdfFile", "qgis.pdf" ).toString();
437+
QFileInfo file( myLastUsedFile );
438+
QFileDialog *myQFileDialog = new QFileDialog( this, tr( "Choose a file name to save the map as" ),
439+
file.path(), tr( "PDF Format" ) + " (*.pdf *PDF)" );
440+
myQFileDialog->selectFile( file.fileName() );
441+
myQFileDialog->setFileMode( QFileDialog::AnyFile );
442+
myQFileDialog->setAcceptMode( QFileDialog::AcceptSave );
443+
444+
int result = myQFileDialog->exec();
445+
raise();
446+
if ( result != QDialog::Accepted ) return;
447+
448+
QString myOutputFileNameQString = myQFileDialog->selectedFiles().first();
449+
if ( myOutputFileNameQString == "" ) return;
450+
451+
myQSettings.setValue( "/UI/lastSaveAsPdfFile", myOutputFileNameQString );
452+
453+
QPrinter printer;
454+
455+
printer.setOutputFormat( QPrinter::PdfFormat );
456+
printer.setOutputFileName( myOutputFileNameQString );
457+
458+
print( printer );
459+
}
460+
432461
void QgsComposer::on_mActionPrint_triggered()
433462
{
434-
if ( !mComposition )
435-
{
463+
QPrinter printer;
464+
465+
QPrintDialog printDialog( &printer );
466+
if ( printDialog.exec() != QDialog::Accepted )
467+
return;
468+
469+
print( printer );
470+
}
471+
472+
void QgsComposer::print( QPrinter &printer )
473+
{
474+
if( !mComposition )
436475
return;
437-
}
438476

439477
if ( containsWMSLayer() )
440478
{
441479
showWMSPrintingWarning();
442480
}
443481

444-
QPrinter printer;
445-
446482
//try to set most of the print dialog settings based on composer properties
447483
if ( mComposition->paperHeight() > mComposition->paperWidth() )
448484
{
@@ -454,58 +490,50 @@ void QgsComposer::on_mActionPrint_triggered()
454490
}
455491

456492
//set resolution based on composer setting
457-
458-
459493
printer.setFullPage( true );
460494
printer.setColorMode( QPrinter::Color );
461495

462-
QPrintDialog printDialog( &printer );
463-
if ( printDialog.exec() == QDialog::Accepted )
464-
{
465-
//set user-defined resolution
466-
if ( mComposition )
467-
{
468-
printer.setResolution( mComposition->printResolution() );
469-
}
470-
QPainter p( &printer );
496+
//set user-defined resolution
497+
printer.setResolution( mComposition->printResolution() );
471498

472-
QgsComposition::PlotStyle savedPlotStyle = mComposition->plotStyle();
473-
mComposition->setPlotStyle( QgsComposition::Print );
499+
QPainter p( &printer );
474500

475-
QApplication::setOverrideCursor( Qt::BusyCursor );
501+
QgsComposition::PlotStyle savedPlotStyle = mComposition->plotStyle();
502+
mComposition->setPlotStyle( QgsComposition::Print );
476503

477-
if ( mComposition->printAsRaster() )
478-
{
479-
//print out via QImage, code copied from on_mActionExportAsImage_activated
480-
int width = ( int )( mComposition->printResolution() * mComposition->paperWidth() / 25.4 );
481-
int height = ( int )( mComposition-> printResolution() * mComposition->paperHeight() / 25.4 );
482-
QImage image( QSize( width, height ), QImage::Format_ARGB32 );
483-
image.setDotsPerMeterX( mComposition->printResolution() / 25.4 * 1000 );
484-
image.setDotsPerMeterY( mComposition->printResolution() / 25.4 * 1000 );
485-
image.fill( 0 );
486-
QPainter imagePainter( &image );
487-
QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
488-
QRectF targetArea( 0, 0, width, height );
489-
mComposition->render( &imagePainter, targetArea, sourceArea );
490-
imagePainter.end();
491-
p.drawImage( targetArea, image, targetArea );
492-
}
493-
else
494-
{
504+
QApplication::setOverrideCursor( Qt::BusyCursor );
505+
506+
if ( mComposition->printAsRaster() )
507+
{
508+
//print out via QImage, code copied from on_mActionExportAsImage_activated
509+
int width = ( int )( mComposition->printResolution() * mComposition->paperWidth() / 25.4 );
510+
int height = ( int )( mComposition-> printResolution() * mComposition->paperHeight() / 25.4 );
511+
QImage image( QSize( width, height ), QImage::Format_ARGB32 );
512+
image.setDotsPerMeterX( mComposition->printResolution() / 25.4 * 1000 );
513+
image.setDotsPerMeterY( mComposition->printResolution() / 25.4 * 1000 );
514+
image.fill( 0 );
515+
QPainter imagePainter( &image );
516+
QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
517+
QRectF targetArea( 0, 0, width, height );
518+
mComposition->render( &imagePainter, targetArea, sourceArea );
519+
imagePainter.end();
520+
p.drawImage( targetArea, image, targetArea );
521+
}
522+
else
523+
{
495524
#if QT_VERSION < 0x040400
496-
QRectF paperRect( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
497-
QRect pageRect = printer.pageRect();
498-
mComposition->render( &p, pageRect, paperRect );
525+
QRectF paperRect( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
526+
QRect pageRect = printer.pageRect();
527+
mComposition->render( &p, pageRect, paperRect );
499528
#else
500-
//better in case of custom page size, but only possible with Qt>=4.4.0
501-
QRectF paperRectMM = printer.pageRect( QPrinter::Millimeter );
502-
QRectF paperRectPixel = printer.pageRect( QPrinter::DevicePixel );
503-
mComposition->render( &p, paperRectPixel, paperRectMM );
529+
//better in case of custom page size, but only possible with Qt>=4.4.0
530+
QRectF paperRectMM = printer.pageRect( QPrinter::Millimeter );
531+
QRectF paperRectPixel = printer.pageRect( QPrinter::DevicePixel );
532+
mComposition->render( &p, paperRectPixel, paperRectMM );
504533
#endif
505-
}
506-
mComposition->setPlotStyle( savedPlotStyle );
507-
QApplication::restoreOverrideCursor();
508534
}
535+
mComposition->setPlotStyle( savedPlotStyle );
536+
QApplication::restoreOverrideCursor();
509537
}
510538

511539
void QgsComposer::on_mActionExportAsImage_triggered()

‎src/app/composer/qgscomposer.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,9 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
119119
//! Print as SVG
120120
void on_mActionExportAsSVG_triggered();
121121

122+
//! Print as PDF
123+
void on_mActionExportAsPDF_triggered();
124+
122125
//! Select item
123126
void on_mActionSelectMoveItem_triggered();
124127

@@ -243,6 +246,9 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
243246
//! Changes elements that are not suitable for this project
244247
void cleanupAfterTemplateRead();
245248

249+
//! Print to a printer object
250+
void print( QPrinter &printer );
251+
246252
//! Writes state under DOM element
247253
void writeXML( QDomNode& parentNode, QDomDocument& doc );
248254
//! Pointer to composer view

‎src/ui/qgscomposerbase.ui

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@
232232
<addaction name="mActionLoadFromTemplate" />
233233
<addaction name="mActionSaveAsTemplate" />
234234
<addaction name="mActionExportAsImage" />
235+
<addaction name="mActionExportAsPDF" />
235236
<addaction name="mActionExportAsSVG" />
236237
<addaction name="mActionPrint" />
237238
<addaction name="separator" />
@@ -334,6 +335,14 @@
334335
<string>Export as Image...</string>
335336
</property>
336337
</action>
338+
<action name="mActionExportAsPDF" >
339+
<property name="icon" >
340+
<iconset>../themes/default/mActionSaveAsPDF.png</iconset>
341+
</property>
342+
<property name="text" >
343+
<string>Export as PDF...</string>
344+
</property>
345+
</action>
337346
<action name="mActionExportAsSVG" >
338347
<property name="icon" >
339348
<iconset>../themes/default/mActionSaveAsSVG.png</iconset>

0 commit comments

Comments
 (0)
Please sign in to comment.