功能实现源码以及打包后应用文件
一、应用功能描述应用包含: 有一个pdf文件夹,将需要合并的pdf放入该文件夹中,依序读取合并 有一个exe可执行文件,双击即可执行并根据指令实现pdf合并功能二、Python代码
# Author : zxy
# Date : 2022/5/24 23:27
# Desc : 开发合并PDF功能,并打包成可执行exe文件
import os
# 使用os模块的walk函数,搜索出指定目录下的全部PDF文件
from PyPDF2 import PdfFileReader, PdfFileWriter
# 获取同一目录下的所有PDF文件的绝对路径
def getFileName(filedir):
file_list = [os.path.join(root, filespath)
for root, dirs, files in os.walk(filedir)
for filespath in files
if str(filespath).endswith('pdf')
]
return file_list if file_list else []
# 合并同一目录下的所有PDF文件
def MergePDF(filepath, outfile):
output = PdfFileWriter()
outputPages = 0
pdf_fileName = getFileName(filepath)
if pdf_fileName:
for pdf_file in pdf_fileName:
print("路径:%s"%pdf_file)
# 读取源PDF文件
input = PdfFileReader(open(pdf_file, "rb"))
# 获得源PDF文件中页面总数
pageCount = input.getNumPages()
outputPages += pageCount
print("页数:%d"%pageCount)
# 分别将page添加到输出output中
for iPage in range(pageCount):
output.addPage(input.getPage(iPage))
print("合并后的总页数:%d"%outputPages)
# 写入到目标PDF文件
outputStream = open(os.path.join(filepath, outfile), "wb")
output.write(outputStream)
outputStream.close()
print("PDF文件合并完成!")
else:
print("没有可以合并的PDF文件!")
# 主函数
if __name__ == '__main__':
while True:
print('亲爱的女士先生,很高兴为你服务!!!')
outfile1 = input('请先输入合并后的文件名:')
outfile = outfile1+'.pdf'
file_dir = r'pdf'
MergePDF(file_dir, outfile)
answer = input('是否继续合并?y/n')
if answer == 'y':
continue
else:
break
三、运行结果测试
亲爱的女士先生,很高兴为你服务!!! 请先输入合并后的文件名:3 路径:pdf1.pdf 页数:3 路径:pdf2.pdf 页数:4 合并后的总页数:7 PDF文件合并完成! 是否继续合并?y/ny 亲爱的女士先生,很高兴为你服务!!! 请先输入合并后的文件名:4 路径:pdf1.pdf 页数:3 路径:pdf2.pdf 页数:4 路径:pdf3.pdf 页数:7 合并后的总页数:14 PDF文件合并完成! 是否继续合并?y/nn四、打包
初次使用打包功能的时候,需要先下载pyinstaller包
1.将主函数生成对应的spec文件
pyi-makespec .mergepdf.py
2.修改spec文件
这里主要修改Analysis部分的pathex为项目路径,datas为打包项目中的文件夹
修改EXE部分的name为exe文件的名称,icon为exe可执行文件指定的图标
图片制作ico
......
a = Analysis(
['mergepdf.py'],
pathex=['E:\BigData\date\PyCharm\PythonStudy\action\pdf'],
binaries=[],
datas=[('pdf','pdf')],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
......
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='Pdf合并',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon='pdf.ico',
)
......
3.执行打包spec文件
pyinstaller .mergepdf.spec五、使用 1.目录一览
pdf文件夹为pdf文件放置目录
Pdf合并.exe为执行合并的应用程序
首先需要你输入合并文件后,新文件的名称
合并完成后会跟你确认是否继续合并,y是继续合并,n是退出
这里设计询问你是否继续合并是因为,方便你需要合并不同的文件,不需要关闭窗口。只需要将pdf目录下的文件删除并重新上传,然后你在应用窗口继续合并即可
因为我合并了两次,第一次是按照顺序将1->2->3,这三个合并到合并一次.pdf中。第二次是将1->2->3->合并一次,这四个文件合并到合并两次.pdf文件中
Fatal Python Error:initsencoding: unable to load the file system codec
ModuleNotFoundError: No module named encodings
这里出现上午问题的主要原因是我的python环境是3.7,使用python3.7打包的应用可能会有问题,报出No module named encodings问题。所以先打开电脑的设置->应用->应用和功能,在应用与功能中找到Python 3.7和Python Launcher这两个应用程序并卸载。然后下载新的Python3.8的安装包,重新安装,安装完成后打包即可。已经测试通过
下载路径:官网
下载路径:资源


![Python实现pdf合并功能,并打包生成应用[无Python环境下使用] Python实现pdf合并功能,并打包生成应用[无Python环境下使用]](http://www.mshxw.com/aiimages/31/932162.png)
