不会编程的我,用GPT写了一个PDF压缩工具(附部分源码&成品)

查看 171|回复 10
作者:baoshan685   
起因
起因是某天要投标,文件必须30M以下,就在论坛上翻找,耗时40分钟下载几个软件仍无果,于是换了个思路,最后找到了两个解决方案:一个论坛里一个小伙伴发的在线版(有文件大小限制),另一个是某捷6.8版本的PDF处理工具。
第二天想着是不是可以借助GPT自己写一个,于是便得到了以下程序,现在回顾下整个过程。
初始需求
我的需求很简单:压缩一个PDF文件的大小到30MB以下。最初,我让GPT-4o帮我写一个简单的PDF压缩程序,使用Python实现。然而,在运行过程中,出现了找不到文件的错误:
FileNotFoundError: No such file or directory: 'input.pdf'
GPT-4o指导我检查文件路径是否正确,并确保文件存在于指定路径。
使用Ghostscript进行压缩
路径问题之后,我发现实际虽然产生了新的文件,但并没有压缩;向GPT-4o反馈后,其推荐使用Ghostscript来压缩PDF文件,因为它的压缩效果更好。我按照指导下载并安装了Ghostscript,并更新了Python脚本以调用Ghostscript进行压缩。
打包问题解决
这个时候基本基于已经能够解决我的问题了,然后我想换了设备测试,便想打包程序。
打包后在其他设备上运行时遇到了DLL加载错误:
Can't load Ghostscript DLL
GPT-4o建议我在PyInstaller打包时包含Ghostscript的bin和lib目录(之前只打包了Ghostscript程序)。于是,我更新了打包命令:
pyinstaller --onefile --add-data "D:/soft/gs10.03.1/bin/*;gs/bin" --add-data "D:/soft/gs10.03.1/lib/*;gs/lib" compress_pdf_gui.py
添加图形用户界面
为了让工具更易用,我请GPT-4o帮我用tkinter创建了一个图形用户界面(之前用PyQt5生成好像,但一直不行,不知道为什么,GPT也没能归因,只告诉我重装试试)。界面允许我选择输入和输出文件夹,并选择压缩质量。以下是部分代码:
import tkinter as tk
from tkinter import filedialog, messagebox
def browse_input_file():
    filename = filedialog.askopenfilename(filetypes=[("PDF 文件", "*.pdf")])
    if filename:
        input_path.set(filename)
def browse_output_folder():
    foldername = filedialog.askdirectory()
    if foldername:
        output_folder.set(foldername)
def start_compression():
    compress_pdf(input_path.get(), output_folder.get(), quality.get())
root = tk.Tk()
root.title("PDF 压缩工具")
解决图标和显示问题
为了让界面更美观,我希望添加一个图标,并隐藏图形用户界面之外的控制台窗口。GPT-4o告诉我,可以在代码中设置图标路径,并在打包时指定图标文件:
root.iconbitmap('D:/help/py/11.ico')
并且更新打包命令以隐藏控制台窗口:
pyinstaller --onefile --noconsole --icon="D:/help/py/11.ico" --add-data "D:/soft/gs10.03.1/bin/*;gs/bin" --add-data "D:/soft/gs10.03.1/lib/*;gs/lib" --add-data "D:/help/py/11.ico;." compress_pdf_gui.py
然而,在更换设备后,我发现程序无法找到图标文件:
_tkinter.TclError: bitmap "C:\Users\dist\compress_pdf_gui\_internal\11.ico" not defined
GPT-4o建议在打包时包含图标文件,并在运行时动态获取图标路径:
# 设置窗口图标
if getattr(sys, 'frozen', False):  # 如果程序是打包的
    icon_path = os.path.join(sys._MEIPASS, '11.ico')
else:  # 如果程序在源代码模式下运行
    icon_path = 'D:/help/py/11.ico'
root.iconbitmap(icon_path)
处理Windows安全报毒问题
我发现,Windows安全防护会报毒。GPT-4o提供了一些建议来解决这个问题,包括:
  • 使用虚拟环境打包
  • 更新PyInstaller到最新版本
  • 使用--onedir选项打包
  • 将应用程序添加到Windows Defender的排除列表
  • 使用代码签名来提高可信度

    最终,我使用--onedir选项打包,并将应用程序添加到Windows Defender的排除列表,解决了报毒问题。
    结束语
    整个过程大概2~3个小时,我从什么都没有,到有了下方的可以压缩PDF的附件,这个过程中也就是提出需求,同时把VScode、cmd和windows的一些报错反馈截图或复制发送给GPT,不断PDCA的过程。如果是有经验的开发者其实会更快,但因为我0基础,所以出了很多常识性的问题,比如相对路径、绝对路径等等;
    技术原理
    本工具主要依赖以下技术实现:
  • Python编程语言:用于编写逻辑代码。
  • Ghostscript:一个强大的PDF处理工具,用于PDF的压缩。
  • tkinter:Python的标准GUI库,用于创建用户界面。
  • PyInstaller:用于将Python脚本打包成独立的可执行文件。

    主要步骤
    [ol]
  • 用户选择文件:用户通过GUI选择需要压缩的PDF文件和输出文件夹。
  • 调用Ghostscript:通过Python脚本调用Ghostscript,使用适当的压缩选项对PDF进行压缩。
  • 输出结果:将压缩后的PDF文件保存到用户指定的文件夹,并显示操作结果。
    [/ol]
    使用说明
    [ol]
  • 下载并运行程序:下载打包好的可执行文件,双击运行程序。
  • 选择输入文件:点击“浏览”按钮,选择需要压缩的PDF文件。
  • 选择输出文件夹:点击“浏览”按钮,选择保存压缩后文件的文件夹。
  • 选择压缩质量:从下拉菜单中选择合适的压缩质量(最小、中等、高、非常高)。
  • 开始压缩:点击“开始压缩”按钮,等待压缩完成,程序会弹出提示框显示压缩结果。
    [/ol]
    PS-效果&使用注意:
    [ol]
  • 我的话分别从30m压缩到9m,150m压缩到15m,楼下有个60m压缩到3m的,要看文件;
  • Ghostscript的原理是压缩图像以及移除不必要的图像,所以对于一些文件压缩效果并没有那么好。
  • 文件压缩完后建议对比一下,我用论坛中一个其他程序压缩后,有缺图的情况,所以一些正式的场景请压缩后检查。
  • 当压缩文件过大的时候,时间会有点长。
    [/ol]
    附件
  • 度盘链接
  • 夸克链接

    文件, 图标

  • violentpig   

    高级!应该把整个聊天过程po上来一起供学习
    oldarmy   

    GPT-4o国内怎么用啊,需要科学上网么?
    cyy201   

    厉害啊!码农的危机来了
    flybird2007   

    楼主云南的,不错,GPT很有用
    fuxingjun674   

    厉害啊!60M的PDF文件压缩到了3M。
    会飞的花   

    厉害了 感谢分享
    +12027988887   

    楼主,能不能制作个 压缩工具,把300m教程视频压缩到100m以内???
    porrima223   

    lz厉害,下来试试
    SU150228   

    顺便提取pdf有数字开头的一行文字并建立pdf书签
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部