PDF转OFFICE
功能概述
将PDF文件高质量转换为Word (.docx)、PPT (.pptx)、Excel (.xlsx) 格式,保留原文档的文字、图片、表格、超链接等全部特性。
触发条件
- 用户说"PDF转Word"、"PDF转PPT"、"PDF转Excel"、"PDF转换"等
- 用户提供PDF文件并要求转换为可编辑格式
- 用户需要批量转换多个PDF文件
依赖安装
转换前需确保以下Python包已安装。使用WorkBuddy管理的Python虚拟环境:
# 安装依赖(优先使用清华镜像加速)
<C:/Users/admin/.workbuddy/binaries/python/envs/default/Scripts/pip.exe> install pdf2docx PyMuPDF pdfplumber python-pptx openpyxl Pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
运行时使用:
<C:/Users/admin/.workbuddy/binaries/python/envs/default/Scripts/python.exe>
转换流程
第一步:确定输出格式
根据用户需求确定输出格式:
- 用户说"转Word" → 输出 .docx
- 用户说"转PPT" → 输出 .pptx
- 用户说"转Excel" → 输出 .xlsx
- 用户未指定 → 默认转为 Word
第二步:执行转换
使用 scripts/convert_pdf.py 脚本执行转换。该脚本支持所有三种格式,并自动处理大文件分批转换。
单文件转换
<C:/Users/admin/.workbuddy/binaries/python/envs/default/Scripts/python.exe> <skill_dir>/scripts/convert_pdf.py <input.pdf> <output_path> --format <word|ppt|excel>
示例:
# PDF转Word
python convert_pdf.py "C:/input.pdf" "C:/output.docx" --format word
# PDF转PPT
python convert_pdf.py "C:/input.pdf" "C:/output.pptx" --format ppt
# PDF转Excel
python convert_pdf.py "C:/input.pdf" "C:/output.xlsx" --format excel
批量转换
python convert_pdf.py --batch <input_directory> --output-dir <output_directory> --format <word|ppt|excel>
第三步:处理大文件
当PDF超过30页时,单次转换可能因内存不足失败。脚本内置分批转换功能,自动将PDF按每15页一批进行转换,然后合并结果。分批大小可通过 --batch-size 参数调整:
python convert_pdf.py "large.pdf" "output.docx" --format word --batch-size 15
第四步:输出结果
- 转换完成后,告知用户输出文件路径和文件大小
- 如有转换失败,报告失败页码和原因
- 使用
present_files向用户展示输出文件
各格式转换特性
详细的支持矩阵见 references/conversion_quality.md。
PDF → Word
- 使用
pdf2docx库,完整保留文字样式、段落格式、图片、表格、超链接、页眉页脚 - 支持自动生成目录
PDF → PPT
- 每页PDF转为一张幻灯片
- 保留文字、图片、形状
- 使用
python-pptx生成
PDF → Excel
- 提取PDF中的表格数据
- 每页表格转为一个Sheet
- 使用
pdfplumber提取表格
注意事项
- 加密PDF需要先解密才能转换
- 扫描版PDF(纯图片)转换后为图片,无法编辑文字,需配合OCR
- 输出文件默认保存到当前工作目录,除非用户指定其他路径
- 转换大量文件时建议使用批量模式
支付宝付费改造契约(PAYSKILL)
本技能为付费技能(PAYSKILL)。调用遵循支付宝 AI 生意画像契约,由平台调度层执行 probe → pay → complete → ack 流程:
- probe(探测):平台调用前先探测是否已持有本技能的支付宝有效订阅 / 付费凭证。已付费则直接放行。
- 402 Payment-Needed:未付费时,脚本向标准输出返回 HTTP 状态
402与Payment-Needed标记,提示用户通过支付宝完成付费(pay),平台据此唤起付费页。 - complete(扣费确认):用户在支付宝完成扣费后,平台下发
Payment-Proof(付费凭证)。 - ack(验签放行):平台携带
Payment-Proof重试本次调用;scripts/payment_gate.py验签该凭证,确认有效后放行主流程。
订阅持久化与幂等:
- 付费状态缓存在本地
.pay_cache/state.json,避免每次调用重复付费(订阅持久化)。 - 同一
Payment-Proof在 24h 幂等窗口内仅生效一次,避免重复扣费。
现金流改造后的调用套路:
用户调用 → 平台 probe →
未付费:下发 402 Payment-Needed → 支付宝 pay → complete → 下发 Payment-Proof
已付费/携带 Proof:脚本 ack 验签 → 放行主流程
> 本契约由 SkillHUB 平台调度层解析,脚本本地仅处理 402 / 验签 / 持久化 三环节;付费本体交给支付宝。
支付宝 AI 按量付费(Machine Pay / A2M)改造说明
本 Skill 已按支付宝官方 A2M 协议改造为 Pay Skill,付费闸口位于 scripts/payment_gate.py,统一调用云端计费服务 https://pay.pembroli.cn/api/resource。
付费流程
- 未付费调用时,服务端返回 HTTP 402 +
Payment-Needed头,携带金额、商户、订单号及 RSA2 签名。 - 买家侧
payment_gate.py收到 402 后引导用户完成支付,平台回传Payment-Proof。 - 客户端携带
Payment-Proof重试资源端点。
验付调用
服务端收到 Payment-Proof 后,调用支付宝验付接口(alipay.aipay.agent.payment.verify)核验凭证有效性(trade_no、out_trade_no、active 状态),验证失败返回 400,验证通过才进入资源发放。
履约确认
资源发放成功后,服务端异步调用履约确认接口(alipay.aipay.agent.fulfillment.confirm,trade_no)回执,标记本笔订单已履约;并按 out_trade_no 做幂等,重复请求直接返回已缓存结果,杜绝重复收费。
幂等与缓存
买家侧按 slug 本地缓存 Payment-Proof(24h TTL),有效期内免重复支付;服务端按订单号幂等,保证同一笔订单只履约一次。