Skip to content

Commit b8932af

Browse files
committed
Consider multipages in print
1 parent 4b3355f commit b8932af

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

src/app/composer/qgscomposer.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -640,7 +640,18 @@ void QgsComposer::print( QPrinter &printer )
640640
QRectF paperRectPixel = printer.pageRect( QPrinter::DevicePixel );
641641

642642
mView->setPaintingEnabled( false );
643-
mComposition->render( &p, paperRectPixel, paperRectMM );
643+
for ( int i = 0; i < mComposition->numPages(); ++i )
644+
{
645+
if ( i > 0 )
646+
{
647+
if ( !printer.newPage() )
648+
{
649+
return;
650+
}
651+
}
652+
mComposition->renderPage( &p, i );
653+
}
654+
//mComposition->render( &p, paperRectPixel, paperRectMM );
644655
mView->setPaintingEnabled( true );
645656
}
646657

src/core/composer/qgscomposition.cpp

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@
3030
#include <QDomDocument>
3131
#include <QDomElement>
3232
#include <QGraphicsRectItem>
33+
#include <QPainter>
3334
#include <QSettings>
3435

3536
QgsComposition::QgsComposition( QgsMapRenderer* mapRenderer ):
36-
QGraphicsScene( 0 ), mMapRenderer( mapRenderer ), mPlotStyle( QgsComposition::Preview ), mPageWidth( 297 ), mPageHeight( 210 ), mPrintAsRaster( false ), mSelectionTolerance( 0.0 ),
37+
QGraphicsScene( 0 ), mMapRenderer( mapRenderer ), mPlotStyle( QgsComposition::Preview ), mPageWidth( 297 ), mPageHeight( 210 ), mSpaceBetweenPages( 10 ), mPrintAsRaster( false ), mSelectionTolerance( 0.0 ),
3738
mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveCommand( 0 )
3839
{
3940
setBackgroundBrush( Qt::gray );
@@ -44,7 +45,7 @@ QgsComposition::QgsComposition( QgsMapRenderer* mapRenderer ):
4445
}
4546

4647
QgsComposition::QgsComposition():
47-
QGraphicsScene( 0 ), mMapRenderer( 0 ), mPlotStyle( QgsComposition::Preview ), mPageWidth( 297 ), mPageHeight( 210 ), mPrintAsRaster( false ),
48+
QGraphicsScene( 0 ), mMapRenderer( 0 ), mPlotStyle( QgsComposition::Preview ), mPageWidth( 297 ), mPageHeight( 210 ), mSpaceBetweenPages( 10 ), mPrintAsRaster( false ),
4849
mSelectionTolerance( 0.0 ), mSnapToGrid( false ), mSnapGridResolution( 0.0 ), mSnapGridOffsetX( 0.0 ), mSnapGridOffsetY( 0.0 ), mActiveCommand( 0 )
4950
{
5051
loadSettings();
@@ -1213,7 +1214,7 @@ void QgsComposition::addPaperItem()
12131214
{
12141215
double paperHeight = this->paperHeight();
12151216
double paperWidth = this->paperWidth();
1216-
double currentY = paperHeight * mPages.size();
1217+
double currentY = paperHeight * mPages.size() + mPages.size() * mSpaceBetweenPages; //add 10mm visible space between pages
12171218
QgsPaperItem* paperItem = new QgsPaperItem( 0, currentY, paperWidth, paperHeight, this ); //default size A4
12181219
paperItem->setBrush( Qt::white );
12191220
addItem( paperItem );
@@ -1229,3 +1230,26 @@ void QgsComposition::removePaperItems()
12291230
}
12301231
mPages.clear();
12311232
}
1233+
1234+
void QgsComposition::renderPage( QPainter* p, int page )
1235+
{
1236+
if ( mPages.size() <= page )
1237+
{
1238+
return;
1239+
}
1240+
1241+
QgsPaperItem* paperItem = mPages[page];
1242+
if ( !paperItem )
1243+
{
1244+
return;
1245+
}
1246+
1247+
QPaintDevice* paintDevice = p->device();
1248+
if ( !paintDevice )
1249+
{
1250+
return;
1251+
}
1252+
1253+
QRectF paperRect = QRectF( paperItem->transform().dx(), paperItem->transform().dy(), paperItem->rect().width(), paperItem->rect().height() );
1254+
render( p, QRectF( 0, 0, paintDevice->width(), paintDevice->height() ), paperRect );
1255+
}

src/core/composer/qgscomposition.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,8 @@ class CORE_EXPORT QgsComposition: public QGraphicsScene
217217
/**Convenience function to create a QgsAddRemoveItemCommand, connect its signals and push it to the undo stack*/
218218
void pushAddRemoveCommand( QgsComposerItem* item, const QString& text, QgsAddRemoveItemCommand::State state = QgsAddRemoveItemCommand::Added );
219219

220+
void renderPage( QPainter* p, int page );
221+
220222
public slots:
221223
/**Casts object to the proper subclass type and calls corresponding itemAdded signal*/
222224
void sendItemAddedSignal( QgsComposerItem* item );
@@ -228,6 +230,7 @@ class CORE_EXPORT QgsComposition: public QGraphicsScene
228230
double mPageWidth;
229231
double mPageHeight;
230232
QList< QgsPaperItem* > mPages;
233+
double mSpaceBetweenPages; //space in preview between pages
231234

232235
/**Maintains z-Order of items. Starts with item at position 1 (position 0 is always paper item)*/
233236
QLinkedList<QgsComposerItem*> mItemZList;

0 commit comments

Comments
 (0)