2024年5月27日12:38:43更新
感谢大家的支持,评论我基本都有看。关于大家关心的几个问题回复如下:
1. 码农被淘汰
我觉得目前码农被淘汰的情况肯定还不会发生。我做的只是一个简单的项目,代码只有120行,就一个.py文件,整体基本就是乐高式的拼接。我理解的话,对于一些简单的程序,类似示例的这个,GPT是可以胜任的。但是对于复杂的项目,暂时还不行(代码量、问题量疯狂增加)。包括现在,GPT也没告诉我为什么我用PyQt5不行。如果没有别的解决方案,我也无法完成这个帖子。再回到这个帖子的初衷,我其实只是想试试能不能做出来。从长远来看,这个压缩工具肯定不是最优解。不少小伙伴在压缩PDF的时候可能还会选择某捷等专业的软件,所以更多是交流分享。
2. 关于怎么用GPT,为什么模型选用GPT4o
GPT在国内有很多镜像,基本上都能用。另外,也可以使用原生的GPT。想了解的话,论坛内应该能搜到一些资料。我个人建议直接在某宝上购买一个账号来体验原版。选择使用GPT4o的原因是因为它可以处理截图,而且回复速度较快。当然,当前版本的GPT3.5和GPT4也可以使用,只不过GPT4o更高效一些。
3. 至于0基础等
我没有编程经验,自己写的代码这辈子不超过100行。但我知道Python的文件后缀是.py,其他基本就无了。
4. 对话过程
- 其实就像我说的,就是提出需求,然后把命令行/cmd或者VSCode等编辑器的反馈页面截图给GPT,不断进行PDCA(Plan-Do-Check-Act)的过程。
- 基本上就是将GPT给出的代码复制粘贴到编辑器中(一字不改)。
对话过程新开一帖:不会编程的我,用GPT写了一个PDF压缩工具(对话过程)
起因
起因是某天要投标,文件必须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脚本打包成独立的可执行文件。
主要步骤
- 用户选择文件:用户通过GUI选择需要压缩的PDF文件和输出文件夹。
- 调用Ghostscript:通过Python脚本调用Ghostscript,使用适当的压缩选项对PDF进行压缩。
- 输出结果:将压缩后的PDF文件保存到用户指定的文件夹,并显示操作结果。
使用说明
- 下载并运行程序:下载打包好的可执行文件,双击运行程序。
- 选择输入文件:点击“浏览”按钮,选择需要压缩的PDF文件。
- 选择输出文件夹:点击“浏览”按钮,选择保存压缩后文件的文件夹。
- 选择压缩质量:从下拉菜单中选择合适的压缩质量(最小、中等、高、非常高)。
- 开始压缩:点击“开始压缩”按钮,等待压缩完成,程序会弹出提示框显示压缩结果。
PS-效果&使用注意:
- 我的话分别从30m压缩到9m,150m压缩到15m,楼下有个60m压缩到3m的,要看文件;
- Ghostscript的原理是压缩图像以及移除不必要的图像,所以对于一些文件压缩效果并没有那么好。
- 文件压缩完后建议对比一下,我用论坛中一个其他程序压缩后,有缺图的情况,所以一些正式的场景请压缩后检查。
- 当压缩文件过大的时候,时间会有点长。
附件