def on_actionFitPage_triggered(self): papersize = self._getPaperSize() printer = QPrinter() printer.setPaperSize(papersize) widthInPixels = printer.pageRect().width() maxColumns = self.songProperties.maxColumns(widthInPixels) self.widthSpinBox.setValue(maxColumns) self.scoreScene.reBuild()
def _exportCompositionAsPDF(self,composition,filePath): """ Render the composition as a PDF file. """ printer = QPrinter() printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(filePath) printer.setPaperSize(QSizeF(composition.paperWidth(),composition.paperHeight()),QPrinter.Millimeter) printer.setFullPage(True) printer.setColorMode(QPrinter.Color) printer.setResolution(composition.printResolution()) #Use painter to send output to printer pdfPainter = QPainter(printer) paperRectMM = printer.pageRect(QPrinter.Millimeter) paperRectPixel = printer.pageRect(QPrinter.DevicePixel) composition.render(pdfPainter,paperRectPixel,paperRectMM) pdfPainter.end()
def _exportCompositionAsPDF(self, composition, filePath): """ Render the composition as a PDF file. """ printer = QPrinter() printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(filePath) printer.setPaperSize( QSizeF(composition.paperWidth(), composition.paperHeight()), QPrinter.Millimeter) printer.setFullPage(True) printer.setColorMode(QPrinter.Color) printer.setResolution(composition.printResolution()) #Use painter to send output to printer pdfPainter = QPainter(printer) paperRectMM = printer.pageRect(QPrinter.Millimeter) paperRectPixel = printer.pageRect(QPrinter.DevicePixel) composition.render(pdfPainter, paperRectPixel, paperRectMM) pdfPainter.end()
def handlePrintPdf(self): printer = QPrinter() pdffile = 'test.pdf' printer.setResolution(96) printer.setPageSize(QPrinter.Letter) printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(pdffile) printer.setPageMargins(5, 5, 5, 10, QPrinter.Millimeter) document = self.makeTableDocument() document.setPageSize(QSizeF(printer.pageRect().size())) document.print_(printer)
def __init__(self, parent=None, fakeStartup=False, filename=None): ''' Constructor ''' self._fakeStartup = fakeStartup super(DrumBurp, self).__init__(parent) self._state = None self._asciiSettings = None self._printer = None self.setupUi(self) self.scoreScene = None self.paperBox.blockSignals(True) self.paperBox.clear() self._knownPageHeights = [] printer = QPrinter() printer.setOutputFileName("invalid.pdf") for name in dir(QPrinter): attr = getattr(QPrinter, name) if (isinstance(attr, QPrinter.PageSize) and name != "Custom"): self.paperBox.addItem(name) printer.setPaperSize(attr) self._knownPageHeights.append(printer.pageRect().height()) self._pageHeight = printer.paperRect().height() self.paperBox.blockSignals(False) settings = self._makeQSettings() self.recentFiles = [ unicode(fname) for fname in settings.value("RecentFiles").toStringList() if os.path.exists(unicode(fname)) ] if filename is None: filename = (None if len(self.recentFiles) == 0 else self.recentFiles[0]) self.filename = filename self.addToRecentFiles() self.updateRecentFiles() self.songProperties = QDisplayProperties() # Create scene self.scoreScene = QScore(self) self.restoreGeometry(settings.value("Geometry").toByteArray()) self.restoreState(settings.value("MainWindow/State").toByteArray()) self.statusbar.addPermanentWidget(QFrame()) self.availableNotesLabel = QLabel() self.availableNotesLabel.setMinimumWidth(250) self.statusbar.addPermanentWidget(self.availableNotesLabel) self._infoBar = QLabel() self.statusbar.addPermanentWidget(self._infoBar) self._initializeState() self.setSections() QTimer.singleShot(0, self._startUp) self.actionCheckOnStartup.setChecked( settings.value("CheckOnStartup").toBool())
def __init__(self, parent = None, fakeStartup = False, filename = None): ''' Constructor ''' self._fakeStartup = fakeStartup super(DrumBurp, self).__init__(parent) self._state = None self._asciiSettings = None self._printer = None self.setupUi(self) self.scoreScene = None self.paperBox.blockSignals(True) self.paperBox.clear() self._knownPageHeights = [] printer = QPrinter() printer.setOutputFileName("invalid.pdf") for name in dir(QPrinter): attr = getattr(QPrinter, name) if (isinstance(attr, QPrinter.PageSize) and name != "Custom"): self.paperBox.addItem(name) printer.setPaperSize(attr) self._knownPageHeights.append(printer.pageRect().height()) self._pageHeight = printer.paperRect().height() self.paperBox.blockSignals(False) settings = self._makeQSettings() self.recentFiles = [unicode(fname) for fname in settings.value("RecentFiles").toStringList() if os.path.exists(unicode(fname))] if filename is None: filename = (None if len(self.recentFiles) == 0 else self.recentFiles[0]) self.filename = filename self.addToRecentFiles() self.updateRecentFiles() self.songProperties = QDisplayProperties() # Create scene self.scoreScene = QScore(self) self.restoreGeometry(settings.value("Geometry").toByteArray()) self.restoreState(settings.value("MainWindow/State").toByteArray()) self.statusbar.addPermanentWidget(QFrame()) self.availableNotesLabel = QLabel() self.availableNotesLabel.setMinimumWidth(250) self.statusbar.addPermanentWidget(self.availableNotesLabel) self._infoBar = QLabel() self.statusbar.addPermanentWidget(self._infoBar) self._initializeState() self.setSections() QTimer.singleShot(0, self._startUp) self.actionCheckOnStartup.setChecked(settings.value("CheckOnStartup").toBool())
def on_stampa_triggered(self, checked=None): """Slot launched when the user click on the "stampa" button""" if checked is None: return printer = QPrinter() print_dialog = QPrintDialog(printer, self) if print_dialog.exec_() == QDialog.Accepted: printer.setOrientation(QPrinter.Landscape) painter = QPainter() painter.begin(printer) geometry = self.ui_calendar.Table.geometry() self.ui_calendar.Table.setGeometry(printer.pageRect()) self.ui_calendar.Table.render(painter) self.ui_calendar.Table.setGeometry(geometry) painter.end()
def makeTableDocument(self): printer = QPrinter() document = QTextDocument() document.setDefaultStyleSheet("table {border:1px; border-color:teal}") document.setDefaultStyleSheet("h1, h2, h3 {color:teal}") document.setDocumentMargin(0.0) document.setPageSize(QSizeF(printer.pageRect().size())) header = ''' <html> <body> <div style="line-height:2.5"> <h1>Desmond International College</h1> <h2>Km4, Happiness Street, Kafanchan</h2> <h2>Kaduna, Nigeria</h2> </div> <div> <h2 style='display:block; text-align:center; word-spacing:10vw; text-transform: uppercase; margin-top:25px; margin-bottom:15px'><u>STUDENT DATA TABLE</u></h2> </div> </body> </html> ''' #print(dir(document)) cursor = QTextCursor(document) rows = self.table.rowCount() columns = self.table.columnCount() cursor.insertHtml(header) table = cursor.insertTable(rows + 1, columns) formats = table.format() formats.setHeaderRowCount(1) table.setFormat(formats) formats = cursor.blockCharFormat() formats.setFontWeight(QFont.Bold) for column in range(columns): cursor.setCharFormat(formats) cursor.insertText(self.table.horizontalHeaderItem(column).text()) cursor.movePosition(QTextCursor.NextCell) for row in range(rows): for column in range(columns): cursor.insertText(self.table.item(row, column).text()) cursor.movePosition(QTextCursor.NextCell) return document
def main(): app = QApplication(sys.argv) # Preparing the pdf doc = QTextDocument() printer = QPrinter() printer.setOutputFileName("KabitGurdas.pdf") printer.setOutputFormat(QPrinter.PdfFormat) # Setting page size as A5 printer.setPaperSize(QPrinter.A5); # page margin printer.setPageMargins(12, 16, 12, 20, QPrinter.Millimeter) doc.setPageSize(QSizeF(printer.pageRect().size())) painter = QPainter() painter.begin( printer ) # Set poem book and get each poem in pdf book = kb() for KabitNumber in range(1,676): # Add text in html to page doc.setHtml(book.getKabitHTML(KabitNumber)) doc.defaultFont().setPointSize(20) # A new page printer.newPage() # Create a QPainter to draw our content doc.drawContents(painter)#,printer.pageRect().translated( -printer.pageRect().x(), -printer.pageRect().y() )) #QTextDocument.drawContents(QPainter, QRectF rect=QRectF()) doc.print_(printer) # Done. painter.end()
class Printer(BasePrinter): FONT_NAME = 'Courrier' def __init__(self, *args, **kwargs): BasePrinter.__init__(self, *args, **kwargs) self.page_number = 0 self.printer = QPrinter(QPrinter.HighResolution) ## todo: remove-me self.printer.setOutputFileName("ufwi_log-page.pdf") self.printer.setOutputFormat(QPrinter.NativeFormat) #self.printer.setOrientation(QPrinter.Landscape) self.printer.setPaperSize(QPrinter.A4) self.printer.setResolution(100) def _init_painter(self): self.painter = QPainter(self.printer) self.painter.setRenderHint(QPainter.Antialiasing) self.painter.setBackgroundMode(Qt.OpaqueMode) self.painter.setBrush(Qt.white) self.painter.setFont(QFont(self.FONT_NAME, 9)) fillrect = QRect(0, 0, self.printer.pageRect().width(), self.printer.pageRect().height()) self.painter.fillRect(fillrect, self.painter.brush()) self.page_number = 1 self._draw_header() self._draw_footer() self.drawCentralTitle(self.title) if self.logo: self.painter.drawImage(QPoint(self.width() / 2 - self.logo.width() / 2, self.height() / 2 + QFontMetrics(self.painter.font()).height() + self.height() / 4 - self.logo.height() / 2), self.logo) def _draw_header(self): if not self.header_enabled: return h = -self.headerHeight() self.drawText(QDateTime.currentDateTime().toString('yyyy-MM-dd hh:mm'), h, Qt.AlignLeft) h += self.drawText(self.interval_label, h, Qt.AlignRight) self.drawText(self.title, h, Qt.AlignLeft) self.drawText(self.enterprise, h, Qt.AlignRight) self.painter.drawLine(0, self.headerHeight() - 1, self.printer.pageRect().width(), self.headerHeight() - 1) def _draw_footer(self): if not self.footer_enabled: return self.painter.drawLine(10, self.printer.pageRect().height() - self.footerHeight(), self.printer.pageRect().width() - 10, self.printer.pageRect().height() - self.footerHeight()) h = self.height() + 1 #self.drawText('topleft', h, Qt.AlignLeft) h += self.drawText(u'© 2008-2010 EdenWall', h, Qt.AlignRight, size=9) self.drawText(unicode(self.page_number), h, Qt.AlignHCenter) #self.drawText('bottomright', h, Qt.AlignRight) def headerHeight(self): if self.header_enabled: return 40 else: return 0 def footerHeight(self): if self.footer_enabled: return 40 else: return 0 def height(self): return self.printer.pageRect().height() - self.headerHeight() - self.footerHeight() def width(self): return self.printer.pageRect().width() def showDialog(self, parent): dialog = QPrintDialog(self.printer, parent) if dialog.exec_() != QPrintDialog.Accepted: return False self._init_painter() return True def end(self): self.painter.end() def newPage(self): self.printer.newPage() self.page_number += 1 self._draw_header() self._draw_footer() def drawCentralTitle(self, text): self.painter.setBackgroundMode(Qt.TransparentMode) f = QFont(self.FONT_NAME, 22) f.setWeight(QFont.Bold) self.painter.setFont(f) height = QFontMetrics(self.painter.font()).height() self.painter.drawText(QRect(0, self.printer.pageRect().height() * 0.5, self.printer.pageRect().width(), height), Qt.AlignHCenter | Qt.AlignVCenter, text) self.painter.setFont(QFont(self.FONT_NAME, 10)) def drawHCenteredTitle(self, text, vpos): self.painter.setBackgroundMode(Qt.TransparentMode) self.painter.setFont(QFont(self.FONT_NAME, 18)) height = QFontMetrics(self.painter.font()).height() self.painter.drawText(QRect(0, self.headerHeight() + vpos, self.printer.pageRect().width(), height), Qt.AlignHCenter | Qt.AlignVCenter, text) self.painter.setFont(QFont(self.FONT_NAME, 10)) return height def drawText(self, text, vpos, halign=Qt.AlignLeft, size=10, width=None): self.painter.setBackgroundMode(Qt.TransparentMode) self.painter.setFont(QFont(self.FONT_NAME, size)) height = QFontMetrics(self.painter.font()).height() if width is None: width = self.printer.pageRect().width() self.painter.drawText(QRect(0, self.headerHeight() + vpos, width, height), halign | Qt.AlignVCenter, text) return height def drawFragment(self, frag_widget, vpos, len_frags): # Display it on half the page scale = 1 single_frag = False if frag_widget.pos == len_frags - 1 and frag_widget.pos % 2 == 0: scale = 2 single_frag = True y = self.headerHeight() + vpos width = self.printer.pageRect().width() * 0.8 * scale height = self.printer.pageRect().height() * 0.5 * 0.8 x = self.printer.pageRect().width() * 0.1 if single_frag: if frag_widget.view.__class__.__name__ != "TreeFragmentView": x = -(width - self.printer.pageRect().width()) / 2. else: width = width / 2. rect = QRect(x, y, width, height) # Temporary remove stylesheet to avoid to print background. stylesheet_save = frag_widget.styleSheet() frag_widget.setStyleSheet('') frag_widget.getView().printMe(self.painter, rect) frag_widget.setStyleSheet(stylesheet_save)
class MainWindow(QMainWindow): def __init__(self): super(QMainWindow, self).__init__() self._TITLE = 'Equilibrium Simulator 2015' self.setGeometry(0, 22, 1200, 400) self.setWindowTitle(self._TITLE) self._showorhide = "Show " self._printbox = None self._printer = QPrinter() self._Squares = [] # Menu bar self.MenuBar = self.menuBar() self.filemenu = self.MenuBar.addMenu('File') self.optionsmenu = self.MenuBar.addMenu('Options') self.aboutmenu = self.MenuBar.addMenu('About') # File - New newfile = QAction(QIcon('exit.png'), 'New', self) newfile.setStatusTip('Create a new file') self.filemenu.addAction(newfile) newfile.triggered.connect(self.shownew) # File - Open openfile = QAction(QIcon('open.png'), 'Open', self) openfile.setStatusTip('Open a file') self.filemenu.addAction(openfile) openfile.triggered.connect(self.showopen) # File - Save savefile = QAction(QIcon('save.png'), 'Save', self) savefile.setStatusTip('Save the current file') self.filemenu.addAction(savefile) savefile.triggered.connect(self.save) # File - Save as saveasfile = QAction(QIcon('save.png'), 'Save as', self) saveasfile.setStatusTip('Save the current file as a different file') self.filemenu.addAction(saveasfile) saveasfile.triggered.connect(self.showsaveas) # File - Print printfile = QAction(QIcon('save.png'), 'Print', self) printfile.setStatusTip('Print the displayed reactions') self.filemenu.addAction(printfile) printfile.triggered.connect(self.showprint) # File - Exit exitaction = QAction(QIcon('exit.png'), '&Exit', self) exitaction.setStatusTip('Exit the program') exitaction.triggered.connect(qApp.quit) self.filemenu.addAction(exitaction) # Options - Edit Conditions editconds = QAction(QIcon('exit.png'), 'Edit Conditions', self) editconds.setStatusTip('Edit the conditions of the current reaction') editconds.triggered.connect(self.editcd) self.optionsmenu.addAction(editconds) # About - Version version = QAction(QIcon('exit.png'), 'Version 1.1', self) version.setStatusTip('The version of this program you are using') # Widget of editable reactions self._ReactionsWindow = ReactionWidget() self._ReactionsWindow.setGeometry(0, 20, 600, 380) self._ReactionsWindow.setParent(self) # Widget of non-editable reaction, for comparison self._ComparingProfile = ReactionProfile( self._ReactionsWindow.GetCurrentReaction(), True) self._ComparingProfile.setGeometry(600, 40, 600, 380) self._ComparingProfile.setParent(self) self.aboutmenu.addAction(version) self.show() # You should call the shownew(), showopen() etc. methods, # not the new(), open() etc. methods, as a) they do not provide user options; # b) it may lead to errors; c) the showing methods call them anyway def editcd(self): self._ReactionsWindow.EditReaction() def showopen(self): fileaddress = QFileDialog.getOpenFileName(self, "Open...", "", "Simulator Files (*.rctn)") if fileaddress != "": self.open(fileaddress) self.setWindowTitle(fileaddress + " - " + self._TITLE) def open(self, fileaddress): openfrom = open(fileaddress, "rb") loadedfile = pickle.load(openfrom) openfrom.close() file = open("last.ptr", "w") file.write(fileaddress) file.close() self._ReactionsWindow.SetOpenReactionFile(loadedfile) self.setWindowTitle(fileaddress + " - " + self._TITLE) def save(self): self._ReactionsWindow.save() def showsaveas(self): self._ReactionsWindow.showsaveas() def shownew(self): self._newfilebox = QMessageBox() self._newfilebox.setWindowTitle("Save?") self._newfilebox.setText( "Would you like to save this file before opening a new one?") self._newfilebox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) self._newfilebox.setDefaultButton(QMessageBox.Yes) if self._newfilebox.exec_() == QMessageBox.Yes: file = open("last.ptr", "w") file.write("") file.close() self.save() self.setWindowTitle(self._TITLE) self._ReactionsWindow.SetOpenReactionFile(ReactionFile()) def showprint(self): self._printbox = QPrintDialog(self) if self._printbox.exec_() == QDialog.Accepted: self.printout() def printout(self): # Page width, page height, widget width pw = self._printer.pageRect().width() ph = self._printer.pageRect().height() ww = self._ComparingProfile.width() painter = QPainter(self._printer) scale = (ww / pw) * 1.5 painter.scale(scale, scale) self._ReactionsWindow.currentWidget().render(painter) painter.translate(0, ph / 2) self._ComparingProfile.render(painter) painter.translate(pw * 0.6, -ph / 2) painter.scale(0.8, 0.8) self._ReactionsWindow.currentWidget().PrintGraph( painter, "Concentration") painter.translate(0, ph * 0.25) self._ReactionsWindow.currentWidget().PrintGraph(painter, "Rate") painter.translate(0, ph * 0.4) self._ComparingProfile.PrintGraph(painter, "Concentration") painter.translate(0, ph * 0.25) self._ComparingProfile.PrintGraph(painter, "Rate") painter.end() # GETTERS AND SETTERS def GetWindowTitle(self): return self._TITLE def SetComparingReaction(self, reaction): self._ComparingProfile.SetReaction(reaction) self._ComparingProfile.update() def GetComparingReaction(self): return self._ComparingProfile.GetReaction()
def export_all_features(self): pdf_painter = None """Export map to pdf atlas style (one page per feature)""" if VRP_DEBUG is True: QgsMessageLog.logMessage(u'exporting map', DLG_CAPTION) try: result = self.__delete_pdf() if not result is None: return result ids = [] exp = QgsExpression(self.feature_filter) if exp.hasParserError(): raise Exception(exp.parserErrorString()) exp.prepare(self.coverage_layer.pendingFields()) for feature in self.coverage_layer.getFeatures(): value = exp.evaluate(feature) if exp.hasEvalError(): raise ValueError(exp.evalErrorString()) if bool(value): if VRP_DEBUG is True: QgsMessageLog.logMessage(u'export map, feature id:{0}'.format(feature.id()), DLG_CAPTION) ids.append(feature.id()) self.coverage_layer.select(ids) bbox = self.coverage_layer.boundingBoxOfSelected() self.canvas.zoomToSelected(self.coverage_layer) if VRP_DEBUG is True: QgsMessageLog.logMessage(u'bbox:{0}'.format(bbox.toString()), DLG_CAPTION) #self.map_renderer.setExtent(bbox) #self.map_renderer.updateScale() #read plotlayout composition = QgsComposition(self.map_renderer) self.composition = composition composition.setPlotStyle(QgsComposition.Print) error, xml_doc = self.__read_template() if not error is None: return error if composition.loadFromTemplate(xml_doc) is False: return u'Konnte Template nicht laden!\n{0}'.format(self.template_qpt) #read textinfo layout self.comp_textinfo = QgsComposition(self.map_renderer) self.comp_textinfo.setPlotStyle(QgsComposition.Print) error, xml_doc = self.__read_template(True) if not error is None: return error if self.comp_textinfo.loadFromTemplate(xml_doc) is False: return u'Konnte Template nicht laden!\n{0}'.format(self.settings.textinfo_layout()) new_ext = bbox if QGis.QGIS_VERSION_INT > 20200: compmaps = self.__get_items(QgsComposerMap) if len(compmaps) < 1: return u'Kein Kartenfenster im Layout vorhanden!' compmap = compmaps[0] else: if len(composition.composerMapItems()) < 1: return u'Kein Kartenfenster im Layout vorhanden!' compmap = composition.composerMapItems()[0] self.composermap = compmap #self.composermap.setPreviewMode(QgsComposerMap.Render) #self.composermap.setPreviewMode(QgsComposerMap.Rectangle) #taken from QgsComposerMap::setNewAtlasFeatureExtent (not yet available in QGIS 2.0) #http://www.qgis.org/api/qgscomposermap_8cpp_source.html#l00610 old_ratio = compmap.rect().width() / compmap.rect().height() new_ratio = new_ext.width() / new_ext.height() if old_ratio < new_ratio: new_height = new_ext.width() / old_ratio delta_height = new_height - new_ext.height() new_ext.setYMinimum( bbox.yMinimum() - delta_height / 2) new_ext.setYMaximum(bbox.yMaximum() + delta_height / 2) else: new_width = old_ratio * new_ext.height() delta_width = new_width - new_ext.width() new_ext.setXMinimum(bbox.xMinimum() - delta_width / 2) new_ext.setXMaximum(bbox.xMaximum() + delta_width / 2) if VRP_DEBUG is True: QgsMessageLog.logMessage(u'bbox old:{0}'.format(compmap.extent().toString()), DLG_CAPTION) compmap.setNewExtent(new_ext) if VRP_DEBUG is True: QgsMessageLog.logMessage(u'bbox new:{0}'.format(compmap.extent().toString()), DLG_CAPTION) #round up to next 1000 compmap.setNewScale(math.ceil((compmap.scale()/1000.0)) * 1000.0) if VRP_DEBUG is True: QgsMessageLog.logMessage(u'bbox new (after scale):{0}'.format(compmap.extent().toString()), DLG_CAPTION) #add ORTHO after new extent -> performance if not self.ortho is None: self.ortho_lyr = self.__add_raster_layer(self.ortho, self.lyrname_ortho) self.__reorder_layers() self.comp_leg = self.__get_items(QgsComposerLegend) self.comp_lbl = self.__get_items(QgsComposerLabel) self.__update_composer_items(self.settings.dkm_gemeinde(self.gem_name)['lyrnamegstk']) if VRP_DEBUG is True: QgsMessageLog.logMessage(u'paperWidth:{0} paperHeight:{1}'.format(composition.paperWidth(), composition.paperHeight()), DLG_CAPTION) printer = QPrinter() printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(self.pdf_map) printer.setPaperSize(QSizeF(composition.paperWidth(), composition.paperHeight()), QPrinter.Millimeter) printer.setFullPage(True) printer.setColorMode(QPrinter.Color) printer.setResolution(composition.printResolution()) pdf_painter = QPainter(printer) paper_rect_pixel = printer.pageRect(QPrinter.DevicePixel) paper_rect_mm = printer.pageRect(QPrinter.Millimeter) QgsPaintEngineHack.fixEngineFlags(printer.paintEngine()) #DKM only if len(self.themen) < 1: composition.render(pdf_painter, paper_rect_pixel, paper_rect_mm) else: self.statistics = OrderedDict() try: pass #lyr = QgsVectorLayer('/home/bergw/VoGIS-Raumplanung-Daten/Geodaten/Raumplanung/Flaechenwidmung/Dornbirn/Flaechenwidmungsplan/fwp_flaeche.shp', 'flaeiw', 'ogr') #lyr.loadNamedStyle('/home/bergw/VoGIS-Raumplanung-Daten/Geodaten/Raumplanung/Flaechenwidmung/Vorarlberg/Flaechenwidmungsplan/fwp_flaeche.qml') #QgsMapLayerRegistry.instance().addMapLayer(lyr) except: QgsMessageLog.logMessage('new lyr:{0}'.format(sys.exc_info()[0]), DLG_CAPTION) #QgsMapLayerRegistry.instance().addMapLayer(lyr) cntr = 0 for thema, sub_themen in self.themen.iteritems(): if VRP_DEBUG is True: QgsMessageLog.logMessage('drucke Thema:{0}'.format(thema.name), DLG_CAPTION) if sub_themen is None: layers = self.__add_layers(thema) self.__calculate_statistics(thema, thema, layers) #no qml -> not visible -> means no map if self.__at_least_one_visible(layers) is True: if cntr > 0: printer.newPage() self.__reorder_layers() self.__update_composer_items(thema.name, layers=layers) composition.renderPage(pdf_painter, 0) QgsMapLayerRegistry.instance().removeMapLayers([lyr.id() for lyr in layers]) cntr += 1 else: QgsMapLayerRegistry.instance().removeMapLayers([lyr.id() for lyr in layers]) if not sub_themen is None: for sub_thema in sub_themen: if VRP_DEBUG is True: QgsMessageLog.logMessage(u'drucke SubThema:{0}'.format(sub_thema.name), DLG_CAPTION) layers = self.__add_layers(sub_thema) self.__calculate_statistics(thema, sub_thema, layers) #no qml -> not visible -> means no map if self.__at_least_one_visible(layers) is True: if cntr > 0: printer.newPage() self.__reorder_layers() self.__update_composer_items(thema.name, subthema=sub_thema.name, layers=layers) composition.renderPage(pdf_painter, 0) QgsMapLayerRegistry.instance().removeMapLayers([lyr.id() for lyr in layers]) cntr += 1 else: QgsMapLayerRegistry.instance().removeMapLayers([lyr.id() for lyr in layers]) #output statistics if len(self.statistics) > 0: printer.setPaperSize(QSizeF(210, 297), QPrinter.Millimeter) tabelle = self.__get_item_byid(self.comp_textinfo, 'TABELLE') if tabelle is None: self.iface.messageBar().pushMessage(u'Layout (Textinfo): Kein Textelement mit ID "TABELLE" vorhanden.', QgsMessageBar.CRITICAL) else: try: str_flaechen = '' idx = 0 for gnr, stats in self.statistics.iteritems(): comma = ', ' if idx > 0 else '' str_flaechen += u'{0}{1} ({2:.2f}m²)'.format(comma, gnr, stats[0].flaeche) idx += 1 lbls = self.__get_items(QgsComposerLabel, self.comp_textinfo) self.__update_composer_items('', labels=lbls, gnrflaeche=str_flaechen) html = tabelle.text() html += u'<table>' #gnrcnt = 0 for gnr, stats in self.statistics.iteritems(): #if gnrcnt > 0: # html += u'<tr class="abstand"><td> </td><td> </td><td> </td></tr>' html += u'<tr><th class="gnr"></th><th class="gnr">{0}</th><th class="gnr"></th></tr>'.format(gnr) #html += u'<tr class="abstand"><td> </td><td> </td><td> </td></tr>' curr_thema = '' for stat in stats: if stat.thema != curr_thema: html += u'<tr><th class="thema"></th><th class="thema">{0}</th><th class="thema"></th></tr>'.format(stat.thema) curr_thema = stat.thema for thema, subthema in stat.subthemen.iteritems(): for quelle in subthema: html += u'<tr><td class="col1">{0}</td>'.format(quelle.name) attr_val = '' attr_area = '' for text, area in quelle.txt_area.iteritems(): attr_val += u'{0}<br />'.format(text) attr_area += u'{0:.2f}m² <br />'.format(area) html += u'<td class="col2">{0}</td><td class="col3">{1}</td></tr>'.format(attr_val, attr_area) #gnrcnt += 1 html += u'</table>' tabelle.setText(html) printer.newPage() self.comp_textinfo.renderPage(pdf_painter, 0) except: msg = 'Statistikausgabe:\n\n{0}'.format(traceback.format_exc()) QgsMessageLog.logMessage(msg, DLG_CAPTION) self.iface.messageBar().pushMessage(msg, QgsMessageBar.CRITICAL) except: msg = 'export pdf (catch all):\n\n{0}'.format(traceback.format_exc()) QgsMessageLog.logMessage(msg, DLG_CAPTION) self.iface.messageBar().pushMessage(msg.replace(u'\n', u''), QgsMessageBar.CRITICAL) return msg finally: #end pdf if not pdf_painter is None: pdf_painter.end() return None
def save(self, imgName, w=None, h=None, header=None, \ dpi=150, take_region=False): ext = imgName.split(".")[-1].upper() root = self.startNode #aspect_ratio = root.fullRegion.height() / root.fullRegion.width() aspect_ratio = self.i_height / self.i_width # auto adjust size if w is None and h is None and (ext == "PDF" or ext == "PS"): w = dpi * 6.4 h = w * aspect_ratio if h>dpi * 11: h = dpi * 11 w = h / aspect_ratio elif w is None and h is None: w = self.i_width h = self.i_height elif h is None : h = w * aspect_ratio elif w is None: w = h / aspect_ratio if ext == "SVG": svg = QtSvg.QSvgGenerator() svg.setFileName(imgName) svg.setSize(QtCore.QSize(w, h)) svg.setViewBox(QtCore.QRect(0, 0, w, h)) #svg.setTitle("SVG Generator Example Drawing") #svg.setDescription("An SVG drawing created by the SVG Generator") pp = QtGui.QPainter() pp.begin(svg) targetRect = QtCore.QRectF(0, 0, w, h) self.render(pp, targetRect, self.sceneRect()) pp.end() elif ext == "PDF" or ext == "PS": format = QPrinter.PostScriptFormat if ext == "PS" else QPrinter.PdfFormat printer = QPrinter(QPrinter.HighResolution) printer.setResolution(dpi) printer.setOutputFormat(format) printer.setPageSize(QPrinter.A4) pageTopLeft = printer.pageRect().topLeft() paperTopLeft = printer.paperRect().topLeft() # For PS -> problems with margins # print paperTopLeft.x(), paperTopLeft.y() # print pageTopLeft.x(), pageTopLeft.y() # print printer.paperRect().height(), printer.pageRect().height() topleft = pageTopLeft - paperTopLeft printer.setFullPage(True); printer.setOutputFileName(imgName); pp = QtGui.QPainter(printer) if header: pp.setFont(QtGui.QFont("Verdana",12)) pp.drawText(topleft.x(),20, header) targetRect = QtCore.QRectF(topleft.x(), 20 + (topleft.y()*2), w, h) else: targetRect = QtCore.QRectF(topleft.x(), topleft.y()*2, w, h) if take_region: self.selector.setVisible(False) self.render(pp, targetRect, self.selector.rect()) self.selector.setVisible(True) else: self.render(pp, targetRect, self.sceneRect()) pp.end() return else: targetRect = QtCore.QRectF(0, 0, w, h) ii= QtGui.QImage(w, \ h, \ QtGui.QImage.Format_ARGB32) pp = QtGui.QPainter(ii) pp.setRenderHint(QtGui.QPainter.Antialiasing ) pp.setRenderHint(QtGui.QPainter.TextAntialiasing) pp.setRenderHint(QtGui.QPainter.SmoothPixmapTransform) if take_region: self.selector.setVisible(False) self.render(pp, targetRect, self.selector.rect()) self.selector.setVisible(True) else: self.render(pp, targetRect, self.sceneRect()) pp.end() ii.save(imgName)
Pun = u"punjabi" Hin = u"hindi" Tr = u"english" Ro = u"roman" # Preparing the pdf doc = QTextDocument() printer = QPrinter() printer.setOutputFileName("KabitGurdas2.pdf") printer.setOutputFormat(QPrinter.PdfFormat) printer.setPaperSize(QPrinter.A4) # page margin printer.setPageMargins(12, 16, 12, 20, QPrinter.Millimeter) doc.setPageSize(QSizeF(printer.pageRect().size())) # We have a database of 675 kabits KabitRange = range(1, 676) html = [1] * KabitRange.__len__() ch = [1] * KabitRange.__len__() count = 0 painter = QPainter() painter.begin(printer) for KabitNumber in KabitRange: # print KabitNumber Plist = GetKabitTextList(KabitNumber, Pun) Elist = GetKabitTextList(KabitNumber, Tr)
class Form(QDialog): def __init__(self, args=None,parent=None): super(Form, self).__init__(parent) self.printer = QPrinter() self.printer.setPageSize(QPrinter.A4) self.filename = '' #File name to convert lblFileName = QLabel("File Name") self.txtFileName = QLineEdit() if len(args) > 1: self.txtFileName.setText(args[1]) self.filename = args[1] self.txtFileName.setReadOnly(True) btnGetFileName = QToolButton() btnGetFileName.setText("..") getFileLayout = QHBoxLayout() getFileLayout.addWidget(lblFileName) getFileLayout.addWidget(self.txtFileName) getFileLayout.addWidget(btnGetFileName) #Code page of file lblCodePage = QLabel("Code Page") self.cmbCodePage = QComboBox() self.cmbCodePage.addItem("dos") self.cmbCodePage.addItem("windows") self.cmbCodePage.addItem("utf8") codePageLayout = QHBoxLayout() codePageLayout.addStretch() codePageLayout.addWidget(lblCodePage) codePageLayout.addWidget(self.cmbCodePage) #Printer Orientation (Portrait / Landscape) lblOrientation = QLabel("Orientation") self.cmbOrientation = QComboBox() self.cmbOrientation.addItem("portait") self.cmbOrientation.addItem("landscape") orientationLayout = QHBoxLayout() orientationLayout.addStretch() orientationLayout.addWidget(lblOrientation) orientationLayout.addWidget(self.cmbOrientation) #Buttons for save or Just quit bSave = QPushButton("Go for it") bQuit = QPushButton("Abort") buttonLayout = QHBoxLayout() buttonLayout.addWidget(bQuit) buttonLayout.addStretch() buttonLayout.addWidget(bSave) #Final Layout layout = QVBoxLayout() layout.addLayout(getFileLayout) layout.addLayout(codePageLayout) layout.addLayout(orientationLayout) layout.addLayout(buttonLayout) self.setLayout(layout) #Connections self.connect(bSave, SIGNAL("clicked()"),self.printViaQPainter) self.connect(bQuit, SIGNAL("clicked()"), self.accept) self.connect(btnGetFileName, SIGNAL("clicked()"),self.getFileName) self.setWindowTitle("dos/windows text to PDF") def getFileName(self): fd = QFileDialog(self) self.filename = fd.getOpenFileName() self.txtFileName.setText(self.filename) def printViaQPainter(self): from os.path import isfile if isfile(self.filename): lines = open(self.filename) else: return a = self.filename.split('.') s = a[-1] fname = '' for i in range(len(a)-1) : fname += a[i] fname += '.pdf' self.printer.setOutputFileName(fname) self.printer.setOutputFormat(QPrinter.PdfFormat) if self.cmbOrientation.currentText() == 'landscape': self.printer.setOrientation(QPrinter.Landscape) pageRect = self.printer.pageRect() LeftMargin = 15 biggest = findBiggestLine(self.filename) bestSize = findBestFontSize(biggest,pageRect) sansFont = QFont("Courier", bestSize) sansLineHeight = QFontMetrics(sansFont).height() painter = QPainter(self.printer) page = 1 y = 20 cpage = codePage(self.cmbCodePage.currentText()) for line in lines: painter.save() painter.setFont(sansFont) y += sansLineHeight x = LeftMargin try: painter.drawText(x,y,line[:-1].decode(cpage)) except: painter.drawText(x,y,'CodePage error !!!') if y > (pageRect.height() - 54) : self.printer.newPage() y = 20 painter.restore() lines.close() self.accept()
def save(self, imgName, w=None, h=None, header=None, \ dpi=150, take_region=False): ext = imgName.split(".")[-1].upper() root = self.startNode #aspect_ratio = root.fullRegion.height() / root.fullRegion.width() aspect_ratio = self.i_height / self.i_width # auto adjust size if w is None and h is None and (ext == "PDF" or ext == "PS"): w = dpi * 6.4 h = w * aspect_ratio if h > dpi * 11: h = dpi * 11 w = h / aspect_ratio elif w is None and h is None: w = self.i_width h = self.i_height elif h is None: h = w * aspect_ratio elif w is None: w = h / aspect_ratio if ext == "SVG": svg = QtSvg.QSvgGenerator() svg.setFileName(imgName) svg.setSize(QtCore.QSize(w, h)) svg.setViewBox(QtCore.QRect(0, 0, w, h)) #svg.setTitle("SVG Generator Example Drawing") #svg.setDescription("An SVG drawing created by the SVG Generator") pp = QtGui.QPainter() pp.begin(svg) targetRect = QtCore.QRectF(0, 0, w, h) self.render(pp, targetRect, self.sceneRect()) pp.end() elif ext == "PDF" or ext == "PS": format = QPrinter.PostScriptFormat if ext == "PS" else QPrinter.PdfFormat printer = QPrinter(QPrinter.HighResolution) printer.setResolution(dpi) printer.setOutputFormat(format) printer.setPageSize(QPrinter.A4) pageTopLeft = printer.pageRect().topLeft() paperTopLeft = printer.paperRect().topLeft() # For PS -> problems with margins # print paperTopLeft.x(), paperTopLeft.y() # print pageTopLeft.x(), pageTopLeft.y() # print printer.paperRect().height(), printer.pageRect().height() topleft = pageTopLeft - paperTopLeft printer.setFullPage(True) printer.setOutputFileName(imgName) pp = QtGui.QPainter(printer) if header: pp.setFont(QtGui.QFont("Verdana", 12)) pp.drawText(topleft.x(), 20, header) targetRect = QtCore.QRectF(topleft.x(), 20 + (topleft.y() * 2), w, h) else: targetRect = QtCore.QRectF(topleft.x(), topleft.y() * 2, w, h) if take_region: self.selector.setVisible(False) self.render(pp, targetRect, self.selector.rect()) self.selector.setVisible(True) else: self.render(pp, targetRect, self.sceneRect()) pp.end() return else: targetRect = QtCore.QRectF(0, 0, w, h) ii= QtGui.QImage(w, \ h, \ QtGui.QImage.Format_ARGB32) pp = QtGui.QPainter(ii) pp.setRenderHint(QtGui.QPainter.Antialiasing) pp.setRenderHint(QtGui.QPainter.TextAntialiasing) pp.setRenderHint(QtGui.QPainter.SmoothPixmapTransform) if take_region: self.selector.setVisible(False) self.render(pp, targetRect, self.selector.rect()) self.selector.setVisible(True) else: self.render(pp, targetRect, self.sceneRect()) pp.end() ii.save(imgName)
#compmap.updateItem() #emit compmap.itemChanged(); #compmap.extentChanged(); #compmap.toggleAtlasPreview() #compmap.setNewScale(compmap.scale()+1) #c.setPrintResolution(150) #print c.printResolution() c.setPrintAsRaster(False) printer = QPrinter() printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(pdf_out) printer.setPaperSize(QSizeF(c.paperWidth(), c.paperHeight()), QPrinter.Millimeter) printer.setFullPage(True) printer.setColorMode(QPrinter.Color) printer.setResolution(c.printResolution()) pdfPainter = QPainter(printer) paperRectMM = printer.pageRect(QPrinter.Millimeter) paperRectPixel = printer.pageRect(QPrinter.DevicePixel) QgsPaintEngineHack.fixEngineFlags(printer.paintEngine()) #c.renderPage(pdfPainter, 0) c.doPrint(printer, pdfPainter) pdfPainter.end() subprocess.call(('xdg-open', pdf_out)) print 'FERTIG'
class MainWindow(QMainWindow): def __init__(self): super(QMainWindow, self).__init__() self._TITLE = 'Equilibrium Simulator 2015' self.setGeometry (0, 22, 1200, 400) self.setWindowTitle(self._TITLE) self._showorhide = "Show " self._printbox = None self._printer = QPrinter() self._Squares = [] # Menu bar self.MenuBar = self.menuBar() self.filemenu = self.MenuBar.addMenu('File') self.optionsmenu = self.MenuBar.addMenu('Options') self.aboutmenu = self.MenuBar.addMenu('About') # File - New newfile = QAction(QIcon('exit.png'), 'New', self) newfile.setStatusTip('Create a new file') self.filemenu.addAction(newfile) newfile.triggered.connect(self.shownew) # File - Open openfile = QAction(QIcon('open.png'), 'Open', self) openfile.setStatusTip('Open a file') self.filemenu.addAction(openfile) openfile.triggered.connect(self.showopen) # File - Save savefile = QAction(QIcon('save.png'), 'Save', self) savefile.setStatusTip('Save the current file') self.filemenu.addAction(savefile) savefile.triggered.connect(self.save) # File - Save as saveasfile = QAction(QIcon('save.png'), 'Save as', self) saveasfile.setStatusTip('Save the current file as a different file') self.filemenu.addAction(saveasfile) saveasfile.triggered.connect(self.showsaveas) # File - Print printfile = QAction(QIcon('save.png'), 'Print', self) printfile.setStatusTip('Print the displayed reactions') self.filemenu.addAction(printfile) printfile.triggered.connect(self.showprint) # File - Exit exitaction = QAction(QIcon('exit.png'), '&Exit', self) exitaction.setStatusTip('Exit the program') exitaction.triggered.connect(qApp.quit) self.filemenu.addAction(exitaction) # Options - Edit Conditions editconds = QAction(QIcon('exit.png'), 'Edit Conditions', self) editconds.setStatusTip('Edit the conditions of the current reaction') editconds.triggered.connect(self.editcd) self.optionsmenu.addAction(editconds) # About - Version version = QAction(QIcon('exit.png'), 'Version 1.1', self) version.setStatusTip('The version of this program you are using') # Widget of editable reactions self._ReactionsWindow = ReactionWidget() self._ReactionsWindow.setGeometry(0, 20, 600, 380) self._ReactionsWindow.setParent(self) # Widget of non-editable reaction, for comparison self._ComparingProfile = ReactionProfile(self._ReactionsWindow.GetCurrentReaction(), True) self._ComparingProfile.setGeometry(600, 40, 600, 380) self._ComparingProfile.setParent(self) self.aboutmenu.addAction(version) self.show() # You should call the shownew(), showopen() etc. methods, # not the new(), open() etc. methods, as a) they do not provide user options; # b) it may lead to errors; c) the showing methods call them anyway def editcd(self): self._ReactionsWindow.EditReaction() def showopen(self): fileaddress = QFileDialog.getOpenFileName(self, "Open...", "", "Simulator Files (*.rctn)") if fileaddress != "": self.open(fileaddress) self.setWindowTitle(fileaddress+" - "+self._TITLE) def open(self, fileaddress): openfrom = open(fileaddress, "rb") loadedfile = pickle.load(openfrom) openfrom.close() file = open("last.ptr", "w") file.write(fileaddress) file.close() self._ReactionsWindow.SetOpenReactionFile(loadedfile) self.setWindowTitle(fileaddress+" - "+self._TITLE) def save(self): self._ReactionsWindow.save() def showsaveas(self): self._ReactionsWindow.showsaveas() def shownew(self): self._newfilebox = QMessageBox() self._newfilebox.setWindowTitle("Save?") self._newfilebox.setText("Would you like to save this file before opening a new one?") self._newfilebox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) self._newfilebox.setDefaultButton(QMessageBox.Yes) if self._newfilebox.exec_() == QMessageBox.Yes: file = open("last.ptr", "w") file.write("") file.close() self.save() self.setWindowTitle(self._TITLE) self._ReactionsWindow.SetOpenReactionFile(ReactionFile()) def showprint(self): self._printbox = QPrintDialog(self) if self._printbox.exec_() == QDialog.Accepted: self.printout() def printout(self): # Page width, page height, widget width pw = self._printer.pageRect().width() ph = self._printer.pageRect().height() ww = self._ComparingProfile.width() painter = QPainter(self._printer) scale = (ww / pw) * 1.5 painter.scale(scale, scale) self._ReactionsWindow.currentWidget().render(painter) painter.translate(0, ph/2) self._ComparingProfile.render(painter) painter.translate(pw * 0.6, -ph/2) painter.scale(0.8, 0.8) self._ReactionsWindow.currentWidget().PrintGraph(painter, "Concentration") painter.translate(0, ph*0.25) self._ReactionsWindow.currentWidget().PrintGraph(painter, "Rate") painter.translate(0, ph * 0.4) self._ComparingProfile.PrintGraph(painter, "Concentration") painter.translate(0, ph * 0.25) self._ComparingProfile.PrintGraph(painter, "Rate") painter.end() # GETTERS AND SETTERS def GetWindowTitle(self): return self._TITLE def SetComparingReaction(self, reaction): self._ComparingProfile.SetReaction(reaction) self._ComparingProfile.update() def GetComparingReaction(self): return self._ComparingProfile.GetReaction()
compmap.setPreviewMode(QgsComposerMap.Render) #compmap.updateItem() #emit compmap.itemChanged(); #compmap.extentChanged(); #compmap.toggleAtlasPreview() #compmap.setNewScale(compmap.scale()+1) #c.setPrintResolution(150) #print c.printResolution() c.setPrintAsRaster(False) printer = QPrinter() printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(pdf_out) printer.setPaperSize(QSizeF(c.paperWidth(), c.paperHeight()), QPrinter.Millimeter) printer.setFullPage(True) printer.setColorMode(QPrinter.Color) printer.setResolution(c.printResolution()) pdfPainter = QPainter(printer) paperRectMM = printer.pageRect(QPrinter.Millimeter) paperRectPixel = printer.pageRect(QPrinter.DevicePixel) QgsPaintEngineHack.fixEngineFlags(printer.paintEngine()) #c.renderPage(pdfPainter, 0) c.doPrint(printer,pdfPainter) pdfPainter.end() subprocess.call(('xdg-open', pdf_out)) print 'FERTIG'