使用python代码实现 PDF 阅读器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用python代码实现 PDF 阅读器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3467字,纯文字阅读大概需要5分钟。
内容图文
![使用python代码实现 PDF 阅读器](/upload/InfoBanner/zyjiaocheng/610/dab003301c8941bdadfd6e478ab5aa9a.jpg)
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
本文章来自腾讯云 作者:Python进阶者
想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需求,资料都已经上传至文件中,可以自行下载!还有海量最新2020python学习资料。
点击查看
书籍
使用 Book 类来保存书籍信息,比如元数据、页数以及阅读与否的信息。通过 eq 特殊方法,来判断两个 book 实例是否为同一对象。
class Book: def __init__(self, fname): # 文件名 self.fname = fname # 是否被阅读 self.flag = None self._info = None self._page = 0 self.get_meta_data(self.fname) def __eq__(self, other): if hasattr(other, 'fname'): return self.fname == other.fname return False
同时阅读
通过内部维护一个 read_list 列表来实现同时阅读多本书。列表储存 book 对象,每个 book 对象都有一个 page 属性。这样,我们的程序就能记住每本书被翻到的页数了。
第二行代码,是对 read_list 进行初始化。book.flag 用来判断这本书上次关闭前是否处于阅读的状态。如果是,我们就把它放在阅读列表中。
self.read_list = [None] self.read_list.extend(book for book in self.booklist if book.flag)
左键翻页
我们重写 MyArea 类的 mousePressEvent 方法。event.pos() 函数用来获取鼠标的坐标,x() 用来获取横坐标。
width 为 MyArea 区域的宽度,如果点击鼠标左键,且鼠标位置的横坐标小于 1/3 区域宽度,那么向前翻页;大于 2/3 区域宽度,那么向后翻页。
# 鼠标左键翻页 def mousePressEvent(self, event): pos = event.pos().x() width = self.size().width() if event.button() == Qt.LeftButton: if pos > width * 2 / 3: self.right() elif pos < width / 3: self.left() sqlite3
sqlite3 是轻量型本地数据库,具有无服务器、零配置、速度快等特点。
PyReadon 启动时,会从数据库中读取图书信息。read_db 函数主要执行以下功能:
如果路径中不存在 PDF.db 数据库,那么就新建 PDF.db 数据库,并且创建一个 book_info 表格,该表格拥有三个属性 path, page, flag;
从 book_info 表格中读取数据,并创建 book 对象来接收这些数据,最后通过 yield 函数返回 book 对象。
book_db = 'PDF.db' book_info = namedtuple('info', 'path page flag') def read_db(): # 将路径更改为该文件所处路径 os.chdir(os.path.dirname(os.path.realpath(__file__))) if not os.path.exists(book_db): conn = sqlite3.connect(book_db) conn.execute("CREATE TABLE book_info(path, page, flag)") conn.close() conn = sqlite3.connect(book_db) for row in conn.execute('SELECT * FROM book_info'): info = book_info(*row) book = Book(info.path) book.page = info.page book.flag = info.flag yield book conn.close()
将数据存储到数据库中:
将书籍列表传给 save2db 函数,通过列表推导式创建 book 所在地址的列表。conn.executemany 函数将迭代生成器表达式,并获得 书籍地址、阅读页数、是否在阅读列表中 等信息,最后将这些信息存储在数据库中。
def save2db(booklist): conn = sqlite3.connect(book_db) conn.executemany("INSERT INTO book_info Values (?,?,?)", ((book.fname, book.page, book.flag) for book in booklist)) conn.commit() conn.close()
在进行存储数据之前,我们首先要将 book_info 数据库中的内容清空。
def remove_db(): conn = sqlite3.connect(book_db) conn.execute('DELETE FROM book_info') conn.commit() conn.close()
查看书籍信息
书籍支持查看右键菜单,我们使用 QMessageBox.about 函数来显示书籍信息。
elif action == item3: index = row_num * 8 + col_num # 之后改成 book book = self.booklist[index] info = book.info fmt = f'路径:{info.path}\n\n' \ f'格式:{info.format}\n\n' \ f'标题:{info.title}\n\n' \ f'作者:{info.author}\n\n' \ f'Creator:{info.creator}\n\n' \ f'Producer:{info.producer}\n\n' QMessageBox.about(self, '文档信息', fmt)
弹窗
通过 Qt Designer 设计了一个弹窗,并与主程序绑定:
info 即为弹窗,点击工具栏中的信息栏时会弹出窗口。
info = Info() reader.infobar.triggered.connect(info.show)
内容总结
以上是互联网集市为您收集整理的使用python代码实现 PDF 阅读器全部内容,希望文章能够帮你解决使用python代码实现 PDF 阅读器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。