PyQt4應用程式的PDF檢視器

华科云商小雪發表於2024-03-14

最近因為專案需要建立一個基於PyQt4的PDF檢視器應用程式,正常來說,我們可以使用PyQt4的QtWebKit模組來顯示PDF檔案。那麼具體怎麼實現呢 ?以下就是我寫的一個簡單的示例程式碼,演示如何建立一個PyQt4應用程式的PDF檢視器:

1、問題背景

我想編寫一個Python+Qt4應用程式,該應用程式需要時不時地彈出一個視窗,以顯示PDF文件並允許一些非常基本的操作,包括滾動瀏覽不同頁面和列印文件。

我已經找到了用於建立PDF檔案的ReportLab,但沒有關於PDF檢視器的任何資訊。是否有任何可以幫助到我的資訊。我真的希望存在像QWebView小部件之類的東西...

2、解決方案

您可以使用Poppler庫來實現此目的。

Poppler是一個用於渲染PDF文件的庫。它提供了許多有用的功能,包括:

  • 將PDF文件渲染到記憶體或X11視窗

  • 允許使用者滾動、平移和縮放文件

  • 允許使用者列印文件

Poppler庫可以與Python繫結在一起,以便在Python應用程式中使用。

以下是一個使用Poppler庫在PyQt4應用程式中建立PDF檢視器的示例程式碼:


import 
PyQt4

from PyQt4 import QtCore, QtGui

from poppler import Document, Page

class PDFViewer( QtGui. QMainWindow):
def __init__( self):
super(). __init__()

self. setWindowTitle( "PDF Viewer")

self. document = None
self. page = None

self. viewer = QtGui. QGraphicsView()
self. setCentralWidget( self. viewer)

self. open_action = QtGui. QAction( "Open", self)
self. open_action. triggered. connect( self. open_file)

self. print_action = QtGui. QAction( "Print", self)
self. print_action. triggered. connect( self. print_document)

self. toolbar = QtGui. QToolBar()
self. toolbar. addAction( self. open_action)
self. toolbar. addAction( self. print_action)

self. addToolBar( self. toolbar)

def open_file( self):
filename, _ = QtGui. QFileDialog. getOpenFileName( self, "Open PDF File")

if filename:
self. document = Document. load( filename)
self. page = self. document. get_page( 0)

self. viewer. setScene( QtGui. QGraphicsScene())
self. viewer. scene(). addItem( QtGui. QGraphicsPixmapItem( QtGui. QPixmap. fromImage( self. page. render())))

def print_document( self):
if self. document:
printer = QtGui. QPrinter()
printer. setOutputFileName( "output.pdf")

painter = QtGui. QPainter()
painter. begin( printer)

for i in range( self. document. num_pages):
page = self. document. get_page( i)
painter. drawPixmap( QtCore. QPoint(), QtGui. QPixmap. fromImage( page. render()))

painter. end()

if __name__ == "__main__":
app = QtGui. QApplication([])
viewer = PDFViewer()
viewer. show()
app. exec_()

這段程式碼首先建立了一個PDF檢視器視窗。然後,它建立了一個開啟檔案操作和一個列印文件操作。當使用者單擊開啟檔案操作時,將開啟一個檔案對話方塊,以便使用者可以選擇要開啟的PDF檔案。當使用者選擇一個檔案後,該檔案將被載入到PDF檢視器中。當使用者單擊列印文件操作時,將開啟一個列印對話方塊,以便使用者可以選擇要列印的PDF文件。

這段程式碼使用了Poppler庫的Python繫結來渲染PDF文件。Poppler庫提供了許多有用的功能,包括將PDF文件渲染到記憶體或X11視窗、允許使用者滾動、平移和縮放文件以及允許使用者列印文件。

執行這段程式碼將顯示一個簡單的PyQt4 PDF檢視器應用程式,可以在視窗中檢視指定的PDF檔案。PyQt4已經比較老舊,建議升級到PyQt5或PyQt6以獲得更好的效能和功能支援。如有更多的問題可以留言討論。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3008916/,如需轉載,請註明出處,否則將追究法律責任。

相關文章