我使用ASP.NET Core 和 Python 做了一个 PDF 转 Word 工具
你有没有遇到过这种情况:
- PDF 改不了
- 想改一页内容,结果重排半小时
- 表格一复制,全乱
我被这个问题折磨了很久。
所以我干了一件事:
👉 自己做了一个 PDF 转 Word 的工具,还顺手上线收费了。
同时,我也把项目的 GitHub 仓库开源了。
我发现,有些技术用户其实 不想用现成的服务,更愿意自己捣鼓代码,所以我把源码放在了GitHub上(其实我是感觉这个不怎么赚钱才public的)。
在线体验网站(收费版,诸位大佬,给几个钢镚吧,孩子快吃不起饭了):
👉 https://open.clipflow.top/
GitHub 开源仓库(需要自己部署和配置):
👉 https://github.com/lxy1234cn/PDFtoWordPublicVersion01/tree/YiPaySuccess
一、PDF 转 Word 的需求
如果你是学生 / 打工人,大概率遇到过:
- PDF 没法编辑
- 想改几个字还得重做
- 表格、排版一塌糊涂
最离谱的是:
👉 有时候你只是想改一页内容
结果要花 30 分钟重排版。所以还是有需求的。
二、ClipFlow 项目踩坑总结
(一) Python 调用 & IIS 部署
- 问题:本地能跑,部署到 IIS 服务器后 Python 无法执行或路径找不到
- 原因:
- Python.exe 路径写死在本地
- IIS 应用程序池权限不足
- 解决方案:
- 用配置文件 (
appsettings.json) 或环境变量指定 Python.exe 路径 - 确保应用池有执行权限
- 用配置文件 (
- 教训:部署环境和本地环境差异很大,路径硬编码容易出问题
(二) 支付系统 & 用户次数管理
- 问题:
- 在Notify 回调中粗心把 流水号 当 AccountId,存入数据库了,导致后面查不到使用次数
- 依赖注入生命周期冲突,导致服务取不到最新状态
- 解决方案:
- 修正 AccountId 与订单流水号的对应关系
- 在 Controller 内用
IServiceScopeFactory.CreateScope()创建服务范围,确保生命周期正确
- 教训:支付闭环逻辑要严谨,尤其是异步和多服务调用
(三) 文件大小限制 & Kestrel 配置
- 问题:大文件上传时失败
- 原因:ASP.NET Core 默认上传限制太小,小文件就直接进iis的缓存就欧克了,太大了服务器就不行。(其实这个问题,不是这个项目的,是我以前做图床和文件托管平台的时候,出现的。这里只是提一下)
- 解决方案:
- 修改 Kestrel 配置:
options.Limits.MaxRequestBodySize = 104857600 - 修改 FormOptions:
options.MultipartBodyLengthLimit = 104857600
- 修改 Kestrel 配置:
- 教训:生产环境文件大小要提前规划
(四) 异步处理 & 生命周期冲突
- 问题:
- 在 Controller 中调用异步服务出现 “对象为空” 和 “生命周期冲突” (居然犯了这种错误,之前我还专门写过生命周期冲突的相关博客文章,结果自己犯了☺)
- 原因:
- 直接注入 Scoped 服务到 Singleton 或后台任务
- 解决方案:
- 使用
IServiceScopeFactory.CreateScope()在后台任务中创建服务实例,使用 using 创建临时作用域
- 使用
- 教训:异步任务和后台队列要注意服务生命周期
三、技术总结
后端
| 技术 | 用途 | 说明 |
|---|---|---|
| ASP.NET Core 8 | Web API 框架 | 提供控制器、路由、JWT 授权、文件上传接口 |
| Entity Framework Core | 数据访问 | 与 SQL Server 对接,实现账户、文件映射、充值记录 CRUD |
| SQL Server | 数据库 | 存储账户、文件映射、充值记录、日志 |
| IOptionsMonitor / Configuration | 配置管理 | 管理 Python 路径、支付配置、速率限制等 |
身份认证与安全
| 技术 | 用途 | 说明 |
|---|---|---|
| JWT (JSON Web Token) | 用户认证 | 保护上传/下载接口,确保每个请求有用户身份 |
| Authorization Attributes | 权限控制 | [Authorize] 控制 API 权限 |
| Rate Limiting Middleware | 频率控制 | 限制请求频率,保护接口安全 |
文件处理
| 技术 | 用途 | 说明 |
|---|---|---|
| Python 3.12及相关的库:pdf2docx | PDF → Word 转换 | 使用自定义脚本 pdf_to_word.py 处理文件转换 |
| ConcurrentQueue + SemaphoreSlim | 队列处理 | 实现后台单任务队列,避免多用户同时处理冲突 |
| IWebHostEnvironment | 文件路径管理 | 管理上传目录 /uploads 和静态文件访问 |
支付与充值系统
| 技术 | 用途 | 说明 |
|---|---|---|
| 易支付(YiPay) | 支付通道 | 接收用户支付,支持异步通知 |
| TopUpService / Strategy 模式 | 充值管理 | 控制用户使用次数、减少重复逻辑 |
| 日志文件 | 调试与监控 | logs/debug.log 记录支付和文件操作状态 |
开发工具与环境
| 技术 | 用途 | 说明 |
|---|---|---|
| Visual Studio 2022 / VS Code | 开发 | 后端开发、调试、迁移数据库 |
| IIS / 云服务器 | 部署 | 托管 ASP.NET Core + Python 环境 |
| Swagger | API 文档 | 方便测试上传、下载接口和 JWT 调用 |
扩展与中间件
| 技术 | 用途 | 说明 |
|---|---|---|
| FileCleanupService / RateLimitCleanupService | 后台服务 | 清理过期文件和过期速率限制记录 |
| RequestDurationMiddleware | 性能监控 | 记录每次请求耗时,便于优化 |
部署注意事项:
1.需要手动创建 logs、uploads 文件夹,并在安全属性中为 IIS 用户设置控制权限;
同时还需要手动复制 pdf_to_word.py 文件到项目目录
配置文件中:
- YiPayConfig 需要自己去找一个易支付平台对接
- Jwt 自己生成一个不低于32位的key
- PythonConfig 注意本地环境和服务器环境 python 解释器的位置
- MailSendServiceConfig 需要自己去QQ邮箱申请 SMTP
- 给应用池用户访问 Python 权限
假设 Python 安装路径:
C:\Users\Administrator\AppData\Local\Programs\Python\Python312
在 PowerShell(以管理员身份)执行:
$pythonPath = "C:\Users\Administrator\AppData\Local\Programs\Python\Python312" $acl = Get-Acl $pythonPath $permission = "IIS AppPool\填应用程序池名称","ReadAndExecute","ContainerInherit,ObjectInherit","None","Allow" $rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission $acl.AddAccessRule($rule) Set-Acl $pythonPath $acl
这会给 IIS 应用池身份用户读取和执行 Python 的权限。
- 给 uploads 文件夹权限
假设 uploads 文件夹在:
C:\inetpub\PDFtoWord\uploads
同样用 PowerShell 给应用池写入权限:
$uploadsPath = "C:\inetpub\PDFtoWord\uploads" $acl = Get-Acl $uploadsPath $permission = "IIS AppPool\填应用程序池名称","Modify","ContainerInherit,ObjectInherit","None","Allow" $rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission $acl.AddAccessRule($rule) Set-Acl $uploadsPath $acl
注意:如果 uploads 文件夹不存在,需要先手动创建。
四、如果你也想做一个赚钱的小项目
给几个我现在的建议:
✔ 做“刚需工具”
比如:
- 文档处理
- 图片处理
- 格式转换
✔ 不要一开始做复杂系统
我这个项目本质就一个功能:
👉 PDF → Word
✔ 尽快上线
别等完美:
👉 能用就上线
五、最后
如果你刚好有这个需求,可以试一下(支持一下也行):
👉 https://open.clipflow.top/
如果你是开发者:
👉 也可以直接拿源码自己部署(已经帮你踩完坑了)
如果你也在做副业 / 想做赚钱项目:
👉 可以一起交流,我也在摸索阶段
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)