|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2006 - 2022 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing the printer functionality. |
|
8 """ |
|
9 |
|
10 from PyQt6.QtCore import QTime, QDate, Qt, QCoreApplication, QMarginsF |
|
11 from PyQt6.QtGui import QColor, QPageLayout |
|
12 from PyQt6.QtPrintSupport import QPrinter |
|
13 from PyQt6.Qsci import QsciPrinter |
|
14 |
|
15 import Preferences |
|
16 |
|
17 |
|
18 class Printer(QsciPrinter): |
|
19 """ |
|
20 Class implementing the QsciPrinter with a header. |
|
21 """ |
|
22 def __init__(self, mode=QPrinter.PrinterMode.ScreenResolution): |
|
23 """ |
|
24 Constructor |
|
25 |
|
26 @param mode mode of the printer (QPrinter.PrinterMode) |
|
27 """ |
|
28 super().__init__(mode) |
|
29 |
|
30 self.setMagnification(Preferences.getPrinter("Magnification")) |
|
31 if Preferences.getPrinter("ColorMode"): |
|
32 self.setColorMode(QPrinter.ColorMode.Color) |
|
33 else: |
|
34 self.setColorMode(QPrinter.ColorMode.GrayScale) |
|
35 if Preferences.getPrinter("FirstPageFirst"): |
|
36 self.setPageOrder(QPrinter.PageOrder.FirstPageFirst) |
|
37 else: |
|
38 self.setPageOrder(QPrinter.PageOrder.LastPageFirst) |
|
39 self.setPageMargins(QMarginsF( |
|
40 Preferences.getPrinter("LeftMargin") * 10, |
|
41 Preferences.getPrinter("TopMargin") * 10, |
|
42 Preferences.getPrinter("RightMargin") * 10, |
|
43 Preferences.getPrinter("BottomMargin") * 10), |
|
44 QPageLayout.Unit.Millimeter |
|
45 ) |
|
46 printerName = Preferences.getPrinter("PrinterName") |
|
47 if printerName: |
|
48 self.setPrinterName(printerName) |
|
49 self.time = QTime.currentTime().toString(Qt.DateFormat.RFC2822Date) |
|
50 self.date = QDate.currentDate().toString(Qt.DateFormat.RFC2822Date) |
|
51 self.headerFont = Preferences.getPrinter("HeaderFont") |
|
52 |
|
53 def formatPage(self, painter, drawing, area, pagenr): |
|
54 """ |
|
55 Public method to generate a header line. |
|
56 |
|
57 @param painter the paint canvas (QPainter) |
|
58 @param drawing flag indicating that something should be drawn |
|
59 @param area the drawing area (QRect) |
|
60 @param pagenr the page number (int) |
|
61 """ |
|
62 fn = self.docName() |
|
63 |
|
64 header = QCoreApplication.translate( |
|
65 'Printer', '{0} - Printed on {1}, {2} - Page {3}' |
|
66 ).format(fn, self.date, self.time, pagenr) |
|
67 |
|
68 painter.save() |
|
69 painter.setFont(self.headerFont) # set our header font |
|
70 painter.setPen(QColor(Qt.GlobalColor.black)) # set color |
|
71 if drawing: |
|
72 fm = painter.fontMetrics() |
|
73 try: |
|
74 fmWidth = fm.horizontalAdvance(header) |
|
75 except AttributeError: |
|
76 fmWidth = fm.width(header) |
|
77 painter.drawText( |
|
78 area.right() - fmWidth, |
|
79 area.top() + painter.fontMetrics().ascent(), header) |
|
80 area.setTop(area.top() + painter.fontMetrics().height() + 5) |
|
81 painter.restore() |