PDF书籍的目录上的页码与真实页码常有出入。
我的项目可以将一次输入的真实页码与目录页码1进行关联,以后输入目录页码即可输出对应的真实页码,并自动复制到剪切板。
(业余菜鸟创作, 欢迎前辈批评指正)
import os
import pandas as pd
import pyperclip
class PdfPageNum:
"""
输入PDF目录上的页码, 输出PDF文件真实页码
"""
def __init__(self):
if not os.path.exists('page_num.xlsx'):
self.df = pd.DataFrame(index=['first_page', 'add'])
else:
self.df = pd.read_excel(io='page_num.xlsx', index_col=0, engine='openpyxl')
self.book = self.choose_book()
self.if_book_exists()
def choose_book(self):
"""
选择要查询的书籍. 如果书籍不存在, 要求输入新书信息
:return: 书名
"""
book_list = self.df.columns # 获取数据框的列名列表
num = 0 # 初始化书号
for book in book_list:
print(num, ' ', book) # 打印当前书号和对应的书名
num += 1
info = input('选择书号(输入新书名): ') # 提示用户输入书号或新书名
try:
info = int(info) # 尝试将输入转换为整数
book = book_list[info] # 根据书号获取对应的书名
except ValueError:
book = info # 如果无法转换为整数,则将输入作为新书名
return book # 返回选择的书名
def save_info(self):
"""
保存新书信息
"""
first_page = int(input('第一页的真实页码: '))
add = first_page - 1
self.df[self.book] = [first_page, add]
self.df.to_excel(excel_writer='page_num.xlsx')
print(f'《{self.book}》信息已保存。\n')
def print_real_num(self):
"""
打印目录上页码的真实页码
"""
add = self.df[self.book]['add']
page_num = int(input('查询的页码: '))
real_num = page_num + add
print(real_num)
pyperclip.copy(str(real_num))
def if_book_exists(self):
"""
判断书籍信息是否已存档, (如否则先要求书籍信息), 再查询页码
"""
if self.book not in self.df.columns:
self.save_info()
self.print_real_num()
PdfPageNum()