在工作中,每个月都会要遇到报账的情况,在现如今很多都是使用电子发票,获得的电子发票很多都是PDF格式,偶尔也有图片格式的。而且还是一张发票一个pdf文档,在打印贴票时,就需要一个文档一个文档的打开打印,十分的不便捷。
当然也可以使用某某PDF的编辑工具,把文档合并成一个文档。找了好几个工具不是有广告,就是要收费(有钱人,请飘过)。操,求人不如求己,自己搞一个。
点击选择文件夹后,选择文件,文件夹选择后,按钮变为合并功能
def btn_click(self, event):
id = event.GetId()
if id == 5:
btn_lab = self.btn.GetLabelText()
if btn_lab == '选择':
dlg = wx.DirDialog(self, u"选择文件夹", style=wx.DD_DEFAULT_STYLE)
if dlg.ShowModal() == wx.ID_OK:
self.folder_path = dlg.GetPath() # 文件夹路径
dlg.Destroy()
self.txt.SetLabelText("选择路径:" + self.folder_path)
self.btn.SetLabelText('合并')
else:
self.txt.SetLabelText('合并开始...')
self.pdf_merge()
self.txt.SetLabelText('合并完成:' + os.path.join(self.folder_path, 'pdf_merge.pdf'))
self.btn.SetLabelText('选择')
def pdf_file_list(self):
"""
获取文件夹中所有的.pdf类型的文件路径,包含子文件夹
:return:
"""
# 判断文件夹路径是否存在
assert os.path.exists(self.folder_path), 'The folder path does not exist'
pdf_paths = list()
for root, dirs, files in os.walk(self.folder_path):
for file in files:
if file.endswith('.pdf'):
pdf_paths.append(os.path.join(root, file))
return pdf_paths
def pdf_merge(self, merge_name='pdf_merge.pdf'):
"""
:param merge_name: 合并后的文件名
:return:
"""
print('PDF合并开始...')
pdf_lst = self.pdf_file_list()
file_merger = PdfFileMerger()
for pdf in pdf_lst:
# 合并pdf文件
file_merger.append(pdf)
# 合并后的文件导出
file_merger.write(os.path.join(self.folder_path, merge_name))
print('PDF合并完成')
import wx
import os
from PyPDF2 import PdfFileMerger
class PDFGuiFrame(wx.Frame):
"""
@描述:PDF合并工具
@作者: MAX
"""
def __init__(self, folderPath='./'):
self.folder_path = folderPath
super().__init__(None, title='PDF合并工具', size=(400, 100))
self.Center()
# 创建一个面板
panel = wx.Panel(parent=self)
# 面板中添加一个文本控件
self.txt = wx.StaticText(parent=panel, label="默认路径:" + self.folder_path)
self.btn = wx.Button(parent=panel, label='选择', id=5, pos=(150, 20))
self.Bind(wx.EVT_BUTTON, self.btn_click, None, id=5)
def btn_click(self, event):
id = event.GetId()
if id == 5:
btn_lab = self.btn.GetLabelText()
if btn_lab == '选择':
dlg = wx.DirDialog(self, u"选择文件夹", style=wx.DD_DEFAULT_STYLE)
if dlg.ShowModal() == wx.ID_OK:
self.folder_path = dlg.GetPath() # 文件夹路径
dlg.Destroy()
self.txt.SetLabelText("选择路径:" + self.folder_path)
self.btn.SetLabelText('合并')
else:
self.txt.SetLabelText('合并开始...')
self.pdf_merge()
self.txt.SetLabelText('合并完成:' + os.path.join(self.folder_path, 'pdf_merge.pdf'))
self.btn.SetLabelText('选择')
def pdf_file_list(self):
"""
获取文件夹中所有的.pdf类型的文件路径,包含子文件夹
:return:
"""
# 判断文件夹路径是否存在
assert os.path.exists(self.folder_path), 'The folder path does not exist'
pdf_paths = list()
for root, dirs, files in os.walk(self.folder_path):
for file in files:
if file.endswith('.pdf'):
pdf_paths.append(os.path.join(root, file))
return pdf_paths
def pdf_merge(self, merge_name='pdf_merge.pdf'):
"""
:param merge_name: 合并后的文件名
:return:
"""
print('PDF合并开始...')
pdf_lst = self.pdf_file_list()
file_merger = PdfFileMerger()
for pdf in pdf_lst:
# 合并pdf文件
file_merger.append(pdf)
# 合并后的文件导出
file_merger.write(os.path.join(self.folder_path, merge_name))
print('PDF合并完成')
class App(wx.App):
def OnInit(self):
frame = PDFGuiFrame()
frame.Show()
return True
if __name__ == '__main__':
app = App()
app.MainLoop()
PDF合并工具