9702
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3
|
# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4
|
# |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7
|
Module implementing an info widget showing data of a PDF document. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10
|
from PyQt6.QtCore import Qt, pyqtSlot, QFileInfo |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11
|
from PyQt6.QtPdf import QPdfDocument |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
from PyQt6.QtWidgets import QWidget, QFormLayout, QLabel |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
from eric7.Globals import dataString |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
class PdfInfoWidget(QWidget): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
Class implementing an info widget showing data of a PDF document. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
def __init__(self, document, parent=None): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
@param document reference to the PDF document object |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27
|
@type QPdfDocument |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28
|
@param parent reference to the parent widget (defaults to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29
|
@type QWidget (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31
|
super().__init__(parent) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33
|
self.__document = document |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35
|
self.__layout = QFormLayout(self) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36
|
self.__layout.setRowWrapPolicy(QFormLayout.RowWrapPolicy.WrapLongRows) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37
|
self.__layout.setFieldGrowthPolicy( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38
|
QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
self.__layout.setFormAlignment( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41
|
Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43
|
self.__layout.setLabelAlignment(Qt.AlignmentFlag.AlignRight) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
self.__infoLabels = { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
"filePath": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
"fileSize": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
"title": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
"subject": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
"author": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
"creator": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
"producer": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
"pages": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
"creationDate": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55
|
"modificationDate": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56
|
"keywords": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
"security": QLabel(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
} |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
for label in self.__infoLabels.values(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
label.setWordWrap(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61
|
self.__layout.addRow(self.tr("File Path:"), self.__infoLabels["filePath"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
self.__layout.addRow(self.tr("File Size:"), self.__infoLabels["fileSize"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
self.__layout.addRow(self.tr("Title:"), self.__infoLabels["title"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64
|
self.__layout.addRow(self.tr("Subject:"), self.__infoLabels["subject"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65
|
self.__layout.addRow(self.tr("Author:"), self.__infoLabels["author"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66
|
self.__layout.addRow(self.tr("Created with:"), self.__infoLabels["creator"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67
|
self.__layout.addRow(self.tr("Creator:"), self.__infoLabels["producer"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68
|
self.__layout.addRow(self.tr("Pages:"), self.__infoLabels["pages"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
self.__layout.addRow(self.tr("Created at:"), self.__infoLabels["creationDate"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
self.__layout.addRow( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
self.tr("Last Modified at:"), self.__infoLabels["modificationDate"] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73
|
self.__layout.addRow(self.tr("Keywords:"), self.__infoLabels["keywords"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
self.__layout.addRow(self.tr("Security:"), self.__infoLabels["security"]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
#self.__layout.addRow(self.tr(""), self.__infoLabels[""]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
# TODO: add more info labels |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78
|
self.setLayout(self.__layout) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
self.__document.statusChanged.connect(self.__populateInfoLabels) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
self.__document.pageCountChanged.connect(self.__handlePageCountChanged) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
self.__document.passwordChanged.connect(self.__handlePasswordChanged) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
@pyqtSlot(QPdfDocument.Status) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85
|
def __populateInfoLabels(self, status): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87
|
Private slot to populate the info labels upon a change of the document status. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89
|
@param status document status |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
@type QPdfDocument.Status |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92
|
ready = status == QPdfDocument.Status.Ready |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94
|
self.__infoLabels["title"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95
|
self.__document.metaData(QPdfDocument.MetaDataField.Title) if ready else "" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97
|
self.__infoLabels["subject"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98
|
self.__document.metaData(QPdfDocument.MetaDataField.Subject) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99
|
if ready |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100
|
else "" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102
|
self.__infoLabels["author"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103
|
self.__document.metaData(QPdfDocument.MetaDataField.Author) if ready else "" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105
|
self.__infoLabels["creator"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106
|
self.__document.metaData(QPdfDocument.MetaDataField.Creator) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107
|
if ready |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108
|
else "" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
self.__infoLabels["producer"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
self.__document.metaData(QPdfDocument.MetaDataField.Producer) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112
|
if ready |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113
|
else "" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115
|
self.__infoLabels["pages"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116
|
str(self.__document.pageCount()) if ready else "" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118
|
self.__infoLabels["creationDate"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
self.__document.metaData(QPdfDocument.MetaDataField.CreationDate).toString( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120
|
"yyyy-MM-dd hh:mm:ss t" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121
|
) if ready |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
else "" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
self.__infoLabels["modificationDate"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125
|
self.__document.metaData( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
QPdfDocument.MetaDataField.ModificationDate |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127
|
).toString("yyyy-MM-dd hh:mm:ss t") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128
|
if ready |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129
|
else "" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131
|
self.__infoLabels["keywords"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132
|
self.__document.metaData(QPdfDocument.MetaDataField.Keywords) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133
|
if ready |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134
|
else "" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137
|
if ready: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138
|
self.__handlePasswordChanged() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140
|
self.__infoLabels["security"].setText("") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142
|
@pyqtSlot(int) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143
|
def __handlePageCountChanged(self, pageCount): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145
|
Private slot to handle a change of the page count. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147
|
@param pageCount changed page count |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148
|
@type int |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150
|
self.__infoLabels["pages"].setText(str(pageCount)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153
|
def __handlePasswordChanged(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155
|
Private slot to handle a change of the password. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157
|
self.__infoLabels["security"].setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158
|
self.tr("Encrypted") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159
|
if self.__document.password() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160
|
else self.tr("Not Encrypted") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163
|
def setFileName(self, filename): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165
|
Public method to set the file name info. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167
|
@param filename DESCRIPTION |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168
|
@type TYPE |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170
|
self.__infoLabels["filePath"].setText(filename) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171
|
if filename: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172
|
fi = QFileInfo(filename) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173
|
fileSize = fi.size() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174
|
self.__infoLabels["fileSize"].setText(dataString(fileSize)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176
|
self.__infoLabels["fileSize"].setText("") |