Dear Developers!

I'm writing a new module, in which I try to implement some codes to export PDF files. The output looks like a simple Word document: only text, no maps. For that, I created a QgsComposition object, and added everything to it (as QgsComposerLabel objects) just like in case of map compositions. The export to PDF works fine, except that I have no idea how to tell the module to print multiple pages. I use the default A4 paper size, and sometimes the text does not fit on a single page.

I defined a variable called "position" which starts from 0 and increases every time a new line is added to the page. Since it is in millimeters, I can always tell when a new page should be loaded.

Here is an excerpt of my code:

def savePDF(self):
    self.mapRenderer = qgis.utils.iface.mapCanvas().mapRenderer()
    self.c = QgsComposition(self.mapRenderer)
    self.c.setPaperSize(210.0, 297.0)

    #here I add all the text labels to the page

    self.savePDFFileName = QtGui.QFileDialog.getSaveFileName(self.dlg, u'save as PDF', '.', 'PDF files (*.pdf)')
    self.printer = QPrinter()
    self.printer.setOrientation(QPrinter.Portrait)
    self.printer.setOutputFormat(QPrinter.PdfFormat)
    self.printer.setOutputFileName(self.savePDFFileName)
    self.printer.setPaperSize(QSizeF(self.c.paperWidth(), self.c.paperHeight()), QPrinter.Millimeter)
    self.printer.setFullPage(True)
    self.printer.setPrintRange(0) #this is for printing all pages
    self.printer.setColorMode(QPrinter.Color)
    self.printer.setResolution(150)

    self.pdfPainter = QPainter(self.printer)
    self.paperRectMM = self.printer.pageRect(QPrinter.Millimeter)
    self.paperRectPixel = self.printer.pageRect(QPrinter.DevicePixel)
    self.c.render(self.pdfPainter, self.paperRectPixel, self.paperRectMM)
    self.pdfPainter.end()


I already spent a lot of time trying to figure it out. For example, at the QgsComposition class reference page ( http://www.qgis.org/api/classQgsComposition.html ) I found some hints: ::setNumPages() and ::addPaperItem(), but when I try to invoke them they don't work (error message says: 'QgsComposition' object has no attribute 'addPaperItem') which means that they are not implemented yet. Is it possible that this can only be solved when a future QGIS release comes out? For example, the .setNumPages says: "Note: added in version 1.9."

I also tried to go through the QPrinter class reference here: http://qt-project.org/doc/qt-4.8/qprinter.html 
According to it, the QPrinter object has a .newPage() method ("Tells the printer to eject the current page and to continue printing on a new page. Returns true if this was successful; otherwise returns false"), but at this point it didn't solve my problem.

Any advices are highly acknowledged! I'm a python newbie...

Thanks in advance,
              Gergely Padányi-Gulyás

        
        
        
<br/><hr align="left" width="300" />
View this message in context: <a href="http://osgeo-org.1560.n6.nabble.com/Printing-multi-page-PDFs-from-QgsComposition-object-tp5044040.html">Printing multi-page PDFs from QgsComposition object</a><br/>
Sent from the <a href="http://osgeo-org.1560.n6.nabble.com/Quantum-GIS-Developer-f4099106.html">Quantum GIS - Developer mailing list archive</a> at Nabble.com.<br/>