[Qgis-developer] Printing multi-page PDFs from QgsComposition object
fegyi001
fegyi001 at gmail.com
Tue Apr 2 03:58:01 PDT 2013
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
--
View this message in context: http://osgeo-org.1560.n6.nabble.com/Printing-multi-page-PDFs-from-QgsComposition-object-tp5044040.html
Sent from the Quantum GIS - Developer mailing list archive at Nabble.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20130402/3fbceb3f/attachment.html>
More information about the Qgis-developer
mailing list