python 打开pdf并显示

该代码创建了一个PythonGUI应用,能够打开并显示PDF文件的第一页,支持通过上/下键切换页面。应用利用PyQt5进行窗口界面设计,PyMuPDF库用于处理PDF内容。
摘要由CSDN通过智能技术生成

功能:打开一个指定pdf文件,将pdf文件中第一页显示在窗口上。并且可以切换显示页面。
模块安装:pip install PyMuPDF
pip install PyQt5

代码:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import fitz
import sys

class PDFWindows(QMainWindow):  # 定义类继承自
    def __init__(self):
        super().__init__()  # 调用父类init方法

        self.setWindowTitle("PDF读写软件")
 
        self.setGeometry(500, 100, 600, 930)
        self.setup_ui()
  
        self.allpages=0
        self.t=0
        self.wide=600
        self.high=900
        self.pages=0
        self.fname=''
        
    def setup_ui(self):
        self.label = QLabel(self)
        self.label.move(0,30)
        
        bar = self.menuBar()
        
        filemune = bar.addMenu('文件')    
        
        file = QAction("打开",self)
        file.triggered.connect(self.showDialog)
        filemune.addAction(file)

        page_up = QAction("上一页",self)
        page_up.setShortcut(Qt.Key_Up)
        page_up.triggered.connect(self.pages_up)
        filemune.addAction(page_up)
        
        page_down = QAction("下一页",self)
        page_down.setShortcut(Qt.Key_Down)
        page_down.triggered.connect(self.pages_down)
        filemune.addAction(page_down)
        

    def showDialog(self):
        self.fname = QFileDialog.getOpenFileName(self,'选择PDF文件', 
                                                    './',
                                                    "Text Files (*.pdf)"
                                                    )
        print(self.fname)
        if self.fname[0]!="" and self.fname[1]=="Text Files (*.pdf)":
            self.image(self.fname[0])
        

    def pages_up(self):
        print("上一页")
        if self.pages>0:        
            self.pages=self.pages-1
            
            if self.fname!='':
                self.image(self.fname[0])
            else:
                print(self.fname)
        else:        
            csbox = QMessageBox(QMessageBox.Warning, self.tr("提示"), self.tr("已到第一页!"), QMessageBox.NoButton, self)
            csbox.exec_()
            
    def pages_down(self):
        print("下一页")
        if self.pages < self.allpages-1:
            self.pages=self.pages+1
            
            if self.fname!='':
                self.image(self.fname[0])
            else:
                print(self.fname)
        else:        
            csbox = QMessageBox(QMessageBox.Warning, self.tr("提示"), self.tr("已到最后一页!"), QMessageBox.NoButton, self)
            csbox.exec_()
            
    def image(self,files):  
        # 打开文件
        doc = fitz.open(files)
        self.allpages=int(doc.page_count)
        page_one = doc.loadPage(self.pages)
        page_pixmap = page_one.getPixmap()
        #将Pixmap转换为QImage
        image_format = QImage.Format_RGBA8888 if page_pixmap.alpha else QImage.Format_RGB888
        page_image = QImage(page_pixmap.samples, page_pixmap.width,
                            page_pixmap.height, page_pixmap.stride, image_format)
        width = page_image.width()
        height = page_image.height()
        pix = QPixmap.fromImage(page_image)
        trans = QTransform()
        trans.rotate(0)  
        new = pix.transformed(trans)
        self.label.setFixedSize(self.wide, self.high)
        self.label.setScaledContents(True)
        self.label.setPixmap(new)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = PDFWindows()
    window.show()
    sys.exit(app.exec_())

显示界面:
在这里插入图片描述
在这里插入图片描述

通过上下键切换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

☆程序小黑★

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值