class HtmlWKPrint(HtmlPrint): @staticmethod def getPrintTypes(mainControl): if WKHtmlWindow: return (("html_webkit", u'HTML (Webkit)'), ) else: return () def _buildHtml(self): def getTextFromWord(word): return self.wikiDocument.getWikiPage(word).getLiveText() exporterInstance = PluginManager.getExporterTypeDict( self.mainControl, False)[u"html_single"][0](self.mainControl) # TODO Progress handler # TODO Set additional options exporterInstance.setJobData(self.wikiDocument, self.wordList, u"html_previewWK", None, False, exporterInstance.getAddOpt(None), progressHandler=None) self.tempFileSet = TempFileSet() exporterInstance.tempFileSet = self.tempFileSet exporterInstance.styleSheet = u"" htpath = self.tempFileSet.createTempFile( u"", ".html", relativeTo="").decode("latin-1") realfp = StringIO.StringIO() with open(htpath, "w") as realfp: exporterInstance.exportHtmlMultiFile(realfp=realfp, tocMode=0) return htpath # realfp.getvalue().decode("utf-8") def doPrint(self, printer, wikiDocument, wordList, printType, addopt, doPreview=False): """ To print with webkit we load the pages into a temporary frame that contains a WKHtmlWindow and use webkits print function. The frame does not need to be shown as a preview is builtin """ self.setContext(printer, wikiDocument, wordList, printType, addopt) if self.checkWebkit(): import gtk htpath = self._buildHtml() frame = None try: # Get page setup dialog data (wxPython) and translate to pyGTK psddata = self.printer.getPageSetupDialogData() tl = psddata.GetMarginTopLeft() br = psddata.GetMarginBottomRight() print_op = gtk.PrintOperation() page_setup = gtk.PageSetup() page_setup.set_top_margin(tl.y, gtk.UNIT_MM) page_setup.set_left_margin(tl.x, gtk.UNIT_MM) page_setup.set_right_margin(br.x, gtk.UNIT_MM) page_setup.set_bottom_margin(br.y, gtk.UNIT_MM) print_op.set_default_page_setup(page_setup) frame = WKPrintFrame(htpath) if doPreview: opCode = gtk.PRINT_OPERATION_ACTION_PREVIEW frame.print_full(print_op, opCode) return False else: opCode = gtk.PRINT_OPERATION_ACTION_PRINT_DIALOG result = frame.print_full(print_op, opCode) return result in (gtk.PRINT_OPERATION_RESULT_APPLY, gtk.PRINT_OPERATION_RESULT_IN_PROGRESS) finally: if frame: frame.Destroy() self._freeHtml() def doPreview(self, printer, wikiDocument, wordList, printType, addopt): """Preview is built into the print function""" self.doPrint(printer, wikiDocument, wordList, printType, addopt, doPreview=True) def checkWebkit(self): # NOTE: It would be better to check this earlier but I don't # know how to have conditions in XrcControls -- Ross if WKHtmlWindow: return True else: dlg = wx.MessageDialog(None, \ _('Error loading Webkit: try a different export format)'), \ _('Error'), wx.OK | wx.ICON_ERROR) dlg.ShowModal() return False
class HtmlWKPrint(HtmlPrint): @staticmethod def getPrintTypes(mainControl): if WKHtmlWindow: return ( ("html_webkit", 'HTML (Webkit)'), ) else: return () def _buildHtml(self): def getTextFromWord(word): return self.wikiDocument.getWikiPage(word).getLiveText() exporterInstance = PluginManager.getExporterTypeDict( self.mainControl, False)["html_single"][0](self.mainControl) # TODO Progress handler # TODO Set additional options exporterInstance.setJobData(self.wikiDocument, self.wordList, "html_previewWK", None, False, exporterInstance.getAddOpt(None), progressHandler=None) self.tempFileSet = TempFileSet() exporterInstance.tempFileSet = self.tempFileSet exporterInstance.styleSheet = "" htpath = self.tempFileSet.createTempFile( "", ".html", relativeTo="") # realfp = StringIO.StringIO() with open(htpath, "wb") as realfp: exporterInstance.exportHtmlMultiFile(realfp=realfp, tocMode=0) return htpath # realfp.getvalue().decode("utf-8") def doPrint(self, printer, wikiDocument, wordList, printType, addopt, doPreview=False): """ To print with webkit we load the pages into a temporary frame that contains a WKHtmlWindow and use webkits print function. The frame does not need to be shown as a preview is builtin """ self.setContext(printer, wikiDocument, wordList, printType, addopt) if self.checkWebkit(): import gtk htpath = self._buildHtml() frame = None try: # Get page setup dialog data (wxPython) and translate to pyGTK psddata = self.printer.getPageSetupDialogData() tl = psddata.GetMarginTopLeft() br = psddata.GetMarginBottomRight() print_op = gtk.PrintOperation() page_setup = gtk.PageSetup() page_setup.set_top_margin(tl.y, gtk.UNIT_MM) page_setup.set_left_margin(tl.x, gtk.UNIT_MM) page_setup.set_right_margin(br.x, gtk.UNIT_MM) page_setup.set_bottom_margin(br.y, gtk.UNIT_MM) print_op.set_default_page_setup(page_setup) frame = WKPrintFrame(htpath) if doPreview: opCode = gtk.PRINT_OPERATION_ACTION_PREVIEW frame.print_full(print_op, opCode) return False else: opCode = gtk.PRINT_OPERATION_ACTION_PRINT_DIALOG result = frame.print_full(print_op, opCode) return result in (gtk.PRINT_OPERATION_RESULT_APPLY, gtk.PRINT_OPERATION_RESULT_IN_PROGRESS) finally: if frame: frame.Destroy() self._freeHtml() def doPreview(self, printer, wikiDocument, wordList, printType, addopt): """Preview is built into the print function""" self.doPrint(printer, wikiDocument, wordList, printType, addopt, doPreview=True) def checkWebkit(self): # NOTE: It would be better to check this earlier but I don't # know how to have conditions in XrcControls -- Ross if WKHtmlWindow: return True else: dlg = wx.MessageDialog(None, \ _('Error loading Webkit: try a different export format)'), \ _('Error'), wx.OK | wx.ICON_ERROR) dlg.ShowModal() return False