pdf generation is working, needs debuged qt-webkit for right doc size

This commit is contained in:
Bachir Soussi Chiadmi
2017-05-31 18:40:59 +02:00
parent 4db47a9259
commit 201bed35b8
4 changed files with 63 additions and 25 deletions
+10 -1
View File
@@ -40,6 +40,10 @@ class Core():
self.initDeamons() self.initDeamons()
else: else:
self.initDeamons() self.initDeamons()
head, tail = os.path.split(self.cwd)
print('tail', tail)
self.projectname = tail
def initDeamons(self): def initDeamons(self):
@@ -114,10 +118,15 @@ class Core():
def changeCWD(self, cwd): def changeCWD(self, cwd):
if not cwd == self.cwd: if not cwd == self.cwd:
self.cwd = cwd self.cwd = cwd
self._mw.setWindowTitle("Cascade "+self.cwd)
self.server.reload() self.server.reload()
self.sasscompiler.reload() self.sasscompiler.reload()
self.contentcompiler.reload() self.contentcompiler.reload()
if not self.tempcwd:
self._mw.setWindowTitle("Cascade "+self.cwd)
head, tail = os.path.split(self.cwd)
print('tail', projectname)
self.projectname = tail
self._mw.designstack.refresh() self._mw.designstack.refresh()
self._mw.contentstack.refresh() self._mw.contentstack.refresh()
+43 -14
View File
@@ -4,7 +4,7 @@
import os, re import os, re
# sys, # sys,
from PyQt5 import QtCore from PyQt5 import QtCore
from PyQt5.QtCore import QUrl, QSettings from PyQt5.QtCore import QUrl, QSettings, QSizeF
from PyQt5.QtGui import QKeySequence, QFont from PyQt5.QtGui import QKeySequence, QFont
from PyQt5.QtWidgets import QWidget, QTabWidget, QVBoxLayout, QHBoxLayout, QSplitter, QPlainTextEdit, QShortcut, QPushButton, QCheckBox from PyQt5.QtWidgets import QWidget, QTabWidget, QVBoxLayout, QHBoxLayout, QSplitter, QPlainTextEdit, QShortcut, QPushButton, QCheckBox
from PyQt5.QtWebKit import QWebSettings from PyQt5.QtWebKit import QWebSettings
@@ -13,26 +13,54 @@ from PyQt5.QtPrintSupport import QPrintPreviewDialog, QPrinter
class WebkitView(QWebView): class WebkitView(QWebView):
def __init__(self, parent, port): def __init__(self, parent, core):
self.port = port self.parent = parent
self.core = core
self.port = core.server.port
self.view = QWebView.__init__(self, parent) self.view = QWebView.__init__(self, parent)
self.setZoomFactor(1)
self.load(QUrl('http://localhost:'+str(self.port))) self.load(QUrl('http://localhost:'+str(self.port)))
self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True) self.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
# self.settings().setAttribute(QWebSettings.PluginsEnabled, True) # self.settings().setAttribute(QWebSettings.PluginsEnabled, True)
self.printer = QPrinter() self.initPDF()
self.printer.setPageSize(QPrinter.A4) # self.mainframe = self.page.mainFrame()
self.printer.setOrientation(QPrinter.Portrait) # print(self.mainframe)
self.printer.setPageMargins(10,10,10,10,QPrinter.Millimeter)
self.setFixedWidth(1000) def initPDF(self):
self.printer = QPrinter(QPrinter.HighResolution)
self.printer.setFullPage(True)
# self.printer.setPageMargins(0,0,0,0,QPrinter.Millimeter)
self.printer.setFontEmbeddingEnabled(True)
self.printer.setColorMode(QPrinter.Color)
# TODO: set the page size and orientation from doc settings
# (need to do doc settings before that)
# self.printer.setPageSize(QPrinter.A4)
self.printer.setPaperSize(QSizeF(210, 300), QPrinter.Millimeter)
# self.printer.setOrientation(QPrinter.Portrait)
self.printer.setOutputFormat(QPrinter.PdfFormat)
self.printer.setCreator('Cascade')
self.printer.setDocName(self.core.projectname)
self.printer.setOutputFileName(self.core.projectname+".pdf")
# self.setFixedWidth(1000)
def onPrint(self): def ongenPDF(self):
dialog = QPrintPreviewDialog(self.printer) # QPrinter::Custom
# dialog = QPrintPreviewDialog(self.printer)
# dialog.setWindowState(Qt.WindowMaximized) # dialog.setWindowState(Qt.WindowMaximized)
dialog.paintRequested.connect(self.print_) # dialog.paintRequested.connect(self.print_)
# dialog.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint | Qt.WindowContextHelpButtonHint) # dialog.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowMinMaxButtonsHint | Qt.WindowCloseButtonHint | Qt.WindowContextHelpButtonHint)
dialog.exec() # dialog.exec()
# TODO: open a dialogue to ask where to save the pdf
# TODO: reload webview and wait for it before printing
# TODO: addd a progress bar
# self.webview.
self.print_(self.printer)
def refresh(self):
self.initPDF()
self.reload()
class WebkitInspector(QWebInspector): class WebkitInspector(QWebInspector):
def __init__(self, parent, webkitview): def __init__(self, parent, webkitview):
@@ -149,6 +177,7 @@ class CodeEditor(QPlainTextEdit):
self.changed = True self.changed = True
i = self.tabs.currentIndex() i = self.tabs.currentIndex()
self.tabs.setTabText(i, "* "+self.tabs.tabText(i)) self.tabs.setTabText(i, "* "+self.tabs.tabText(i))
# TODO: indicate that webview needs to be reloaded
def save(self): def save(self):
if self.changed: if self.changed:
@@ -208,7 +237,7 @@ class DesignStack(QWidget):
self.webview.setLayout(self.webview.vbox) self.webview.setLayout(self.webview.vbox)
self.webview.vbox.setContentsMargins(0,0,0,0) self.webview.vbox.setContentsMargins(0,0,0,0)
self.webkitview = WebkitView(self, core.server.port) self.webkitview = WebkitView(self, core)
self.webkitinspector = WebkitInspector(self, self.webkitview) self.webkitinspector = WebkitInspector(self, self.webkitview)
@@ -267,4 +296,4 @@ class DesignStack(QWidget):
def refresh(self): def refresh(self):
self.editor.refresh() self.editor.refresh()
self.webkitview.reload() self.webkitview.refresh()
+6 -6
View File
@@ -54,7 +54,7 @@ class MainWindow(QMainWindow):
self.save_action.setShortcut("Ctrl+Shift+s") self.save_action.setShortcut("Ctrl+Shift+s")
file.addAction(self.save_action) file.addAction(self.save_action)
prnt = QAction("&Print",self) prnt = QAction("&PDF",self)
prnt.setShortcut("Ctrl+p") prnt.setShortcut("Ctrl+p")
file.addAction(prnt) file.addAction(prnt)
@@ -109,8 +109,8 @@ class MainWindow(QMainWindow):
self.openprojectdialogue() self.openprojectdialogue()
elif q.text() == "&Save Project as": elif q.text() == "&Save Project as":
self.saveprojectdialogue() self.saveprojectdialogue()
elif q.text() == "&Print": elif q.text() == "&PDF":
self.imprim() self.genPDF()
elif q.text() == "&Quit": elif q.text() == "&Quit":
self.quit() self.quit()
@@ -185,9 +185,9 @@ class MainWindow(QMainWindow):
print('Exception', e) print('Exception', e)
pass pass
def imprim(self): def genPDF(self):
print('imprim') print('PDF')
self.designstack.webkitview.onPrint() self.designstack.webkitview.ongenPDF()
def quit(self): def quit(self):
print("Quit") print("Quit")
+4 -4
View File
@@ -28,9 +28,9 @@
/** /**
* THE CODE BELOW IS REQUIRED TO MAKE HTML2PRINT WORK. * THE CODE BELOW IS REQUIRED TO MAKE HTML2PRINT WORK.
*/ */
@function mm2pt($mm){ @function mm2pt($mm){
@return $mm*2.8346pt; // @return $mm*2.8346pt;
@return $mm*1mm;
} }
/** /**
@@ -41,8 +41,8 @@
*/ */
/* the geometry of the page */ /* the geometry of the page */
$page-width: mm2pt(110); $page-width: mm2pt(200);
$page-height: mm2pt(200); $page-height: mm2pt(287);
/* the size of the crop marks based on scribus defaults */ /* the size of the crop marks based on scribus defaults */
$crop-size: mm2pt(2); $crop-size: mm2pt(2);