11import sys
22import os
3- from PyQt5 import QtGui , QtWidgets
4- from PyQt5 .QtCore import Qt
3+ from PyQt6 import QtGui , QtWidgets
4+ from PyQt6 .QtCore import Qt , QSize
5+ from PyQt6 .QtPdf import QPdfDocument , QPdfDocumentRenderOptions
56
67# Set up logging
78from qtvcp import logger
89LOG = logger .getLogger (__name__ )
910
10- try :
11- import popplerqt5
12- LIB_BAD = False
13- except :
14- LIB_BAD = True
15- LOG .warning ('PDFViwer - Is python3-poppler-qt5 installed?' )
16-
1711class PDFView (QtWidgets .QScrollArea ):
1812 def __init__ (self , parent = None ):
1913 super (PDFView , self ).__init__ (parent )
@@ -24,10 +18,12 @@ def __init__(self, parent=None):
2418 self .vbox = QtWidgets .QVBoxLayout ()
2519 self .widget .setLayout (self .vbox )
2620 self ._zoom = 1.0
27-
28- if LIB_BAD :
29- label = QtWidgets .QLabel ('<b>Missing python3-poppler-qt5 module</b>' )
30- self .vbox .addWidget (label )
21+ self .doc = None
22+ self ._render_opts = QPdfDocumentRenderOptions ()
23+ self ._render_opts .setRenderFlags (
24+ QPdfDocumentRenderOptions .RenderFlag .Antialiasing |
25+ QPdfDocumentRenderOptions .RenderFlag .TextAntialiasing
26+ )
3127
3228 def loadSample (self , name ):
3329 n = os .path .join (os .path .dirname (__file__ ),name + '.pdf' )
@@ -39,28 +35,32 @@ def loadSample(self, name):
3935 def loadView (self , path ):
4036 filename = os .path .expanduser (path )
4137 if not os .path .exists (filename ):
42- print ('No path:' ,filename )
43-
44- if LIB_BAD :
38+ print ('No path:' , filename )
4539 return
4640
47- self .doc = doc = popplerqt5 .Poppler .Document .load (filename )
48- doc .setRenderHint (popplerqt5 .Poppler .Document .Antialiasing )
49- doc .setRenderHint (popplerqt5 .Poppler .Document .TextAntialiasing )
41+ self .doc = QPdfDocument (self )
42+ self .doc .load (filename )
5043 self .refreshPages ()
5144
5245 def refreshPages (self ):
46+ if self .doc is None :
47+ return
48+
5349 # clear layout of pages
54- for i in reversed (range (self .vbox .count ())):
50+ for i in reversed (range (self .vbox .count ())):
5551 self .vbox .itemAt (i ).widget ().setParent (None )
5652
5753 # convert pages to images in a label
58- for i in range (0 , self .doc .numPages ()):
54+ for i in range (self .doc .pageCount ()):
5955 label = QtWidgets .QLabel ()
6056 label .setScaledContents (True )
6157
62- page = self .doc .page (i )
63- image = page .renderToImage (72.0 * self ._zoom , 72.0 * self ._zoom )
58+ page_size = self .doc .pagePointSize (i )
59+ image_size = QSize (
60+ int (page_size .width () * self ._zoom ),
61+ int (page_size .height () * self ._zoom )
62+ )
63+ image = self .doc .render (i , image_size , self ._render_opts )
6464
6565 label .setPixmap (QtGui .QPixmap .fromImage (image ))
6666 self .vbox .addWidget (label )
@@ -78,23 +78,29 @@ def pdf_view(filename):
7878 """Return a Scrollarea showing the pages of the specified PDF file."""
7979 filename = os .path .expanduser (filename )
8080 if not os .path .exists (filename ):
81- print ('No path:' ,filename )
81+ print ('No path:' , filename )
82+ return None
8283
83- doc = popplerqt5 .Poppler .Document .load (filename )
84- doc .setRenderHint (popplerqt5 .Poppler .Document .Antialiasing )
85- doc .setRenderHint (popplerqt5 .Poppler .Document .TextAntialiasing )
84+ doc = QPdfDocument ()
85+ doc .load (filename )
8686
8787 area = QtWidgets .QScrollArea ()
8888 area .setWidgetResizable (True )
8989 widget = QtWidgets .QWidget ()
9090 vbox = QtWidgets .QVBoxLayout ()
9191
92- for i in range (0 , doc .numPages ()):
92+ for i in range (doc .pageCount ()):
9393 label = QtWidgets .QLabel ()
9494 label .setScaledContents (True )
9595
96- page = doc .page (i )
97- image = page .renderToImage ()
96+ page_size = doc .pagePointSize (i )
97+ image_size = QSize (int (page_size .width ()), int (page_size .height ()))
98+ render_opts = QPdfDocumentRenderOptions ()
99+ render_opts .setRenderFlags (
100+ QPdfDocumentRenderOptions .RenderFlag .Antialiasing |
101+ QPdfDocumentRenderOptions .RenderFlag .TextAntialiasing
102+ )
103+ image = doc .render (i , image_size , render_opts )
98104
99105 label .setPixmap (QtGui .QPixmap .fromImage (image ))
100106 vbox .addWidget (label )
@@ -112,7 +118,7 @@ def main():
112118 filename = argv [- 1 ]
113119 view = pdf_view (filename )
114120 view .show ()
115- sys .exit (app .exec_ ())
121+ sys .exit (app .exec ())
116122
117123if __name__ == '__main__' :
118124 main ()
0 commit comments