我用 AI 做了一个PDF转Word神器:解决排版烦恼

张开发
2026/6/26 5:17:53 15 分钟阅读
我用 AI 做了一个PDF转Word神器:解决排版烦恼
你有没有遇到过这种情况PDF 改不了想改一页内容结果重排半小时表格一复制全乱我被这个问题折磨了很久。所以我干了一件事自己做了一个 PDF 转 Word 的工具然后把它上线了。同时我也把项目的 GitHub 仓库开源了。我发现有些技术用户其实 不想用现成的服务更愿意自己捣鼓代码所以我把源码放在了GitHub上。在线体验网站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修改 FormOptionsoptions.MultipartBodyLengthLimit 104857600教训生产环境文件大小要提前规划四 异步处理 生命周期冲突问题在 Controller 中调用异步服务出现 “对象为空” 和 “生命周期冲突” 居然犯了这种错误之前我还专门写过生命周期冲突的相关博客文章结果自己犯了☺原因-直接注入 Scoped 服务到 Singleton 或后台任务解决方案使用 IServiceScopeFactory.CreateScope() 在后台任务中创建服务实例使用 using 创建临时作用域教训异步任务和后台队列要注意服务生命周期三、技术总结后端技术用途说明ASP.NET Core 8Web API 框架提供控制器、路由、JWT 授权、文件上传接口Entity Framework Core数据访问与 SQL Server 对接实现账户、文件映射、充值记录 CRUDSQL Server数据库存储账户、文件映射、充值记录、日志IOptionsMonitor / Configuration配置管理管理 Python 路径、支付配置、速率限制等身份认证与安全技术用途说明JWT (JSON Web Token)用户认证保护上传/下载接口确保每个请求有用户身份Authorization Attributes权限控制[Authorize] 控制 API 权限Rate Limiting Middleware频率控制限制请求频率保护接口安全文件处理技术用途说明Python 3.12及相关的库pdf2docxPDF → 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 环境SwaggerAPI 文档方便测试上传、下载接口和 JWT 调用扩展与中间件技术用途说明FileCleanupService / RateLimitCleanupService后台服务清理过期文件和过期速率限制记录RequestDurationMiddleware性能监控记录每次请求耗时便于优化部署注意事项需要手动创建 logs、uploads 文件夹并在安全属性中为 IIS 用户设置控制权限同时还需要手动复制 pdf_to_word.py 文件到项目目录配置文件中YiPayConfig 需要自己去找一个易支付平台对接Jwt 自己生成一个不低于32位的keyPythonConfig 注意本地环境和服务器环境 python 解释器的位置MailSendServiceConfig 需要自己去QQ邮箱申请 SMTP给应用池用户访问 Python 权限假设 Python 安装路径C:\Users\Administrator\AppData\Local\Programs\Python\Python312在 PowerShell以管理员身份执行$pythonPathC:\Users\Administrator\AppData\Local\Programs\Python\Python312$aclGet-Acl$pythonPath$permissionIIS AppPool\填应用程序池名称,ReadAndExecute,ContainerInherit,ObjectInherit,None,Allow$ruleNew-ObjectSystem.Security.AccessControl.FileSystemAccessRule$permission$acl.AddAccessRule($rule)Set-Acl$pythonPath$acl这会给 IIS 应用池身份用户读取和执行 Python 的权限。给 uploads 文件夹权限假设 uploads 文件夹在C:\inetpub\PDFtoWord\uploads同样用 PowerShell 给应用池写入权限$uploadsPathC:\inetpub\PDFtoWord\uploads$aclGet-Acl$uploadsPath$permissionIIS AppPool\填应用程序池名称,Modify,ContainerInherit,ObjectInherit,None,Allow$ruleNew-ObjectSystem.Security.AccessControl.FileSystemAccessRule$permission$acl.AddAccessRule($rule)Set-Acl$uploadsPath$acl注意如果 uploads 文件夹不存在需要先手动创建。四、如果你也想做一个赚钱的小项目给几个我现在的建议不要一开始做复杂系统我这个项目本质就一个功能PDF → Word尽快上线别等完美能用就上线五、最后如果你刚好有这个需求可以试一下支持一下也行https://open.clipflow.top/如果你是开发者也可以直接拿源码自己部署已经帮你踩完坑了如果你也在做副业 / 想做赚钱项目可以一起交流我也在摸索阶段​

更多文章