[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MYH1FBK1PMTYV2RF925A4Z":3,"skill-same:01M6MYH1FBK1PMTYV2RF925A4Z":92},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":63,"commitSha":64,"skillDirectory":65,"forksCount":66,"repositoryHtmlUrl":67,"repositoryHomepageUrl":68,"ownerHtmlUrl":69,"ownerBlogUrl":6,"ownerDescription":70,"updatedAt":71,"install":72,"resources":85},"01M6MYH1FBK1PMTYV2RF925A4Z","pdf",null,"Read, merge, split, extract text\u002Ftables from, and fill PDF forms. Adapted from Anthropic's document skills patterns.","qingjiuzys\u002Fanycode","qingjiuzys","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F142193034?v=4","01M6MXYJGE1SJ5ZVPWKQYPX4TD","qingjiu","01M6MXYJM8F2KJ3RRQZJNXHZJW",2,"MIT","https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode\u002Fblob\u002Fmain\u002Fskills-starter\u002Fpdf\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"PDF","only","fill","split","read-only","output","form","false","forms","document","files","read","workspace","表格","text","文本","markdown","office","merge","writing","2026-11-10 10:12:30",false,"---\nname: pdf\ndescription: Read, merge, split, extract text\u002Ftables from, and fill PDF forms. Adapted from Anthropic's document skills patterns.\ndescription_zh: 读取、合并、拆分、提取文本\u002F表格、填写 PDF 表单（参考 Anthropic 官方文档技能模式）。\nname_zh: PDF 处理\ncategory: office\nversion: 1.0.0\nmode: executable\napproval: read-only-unless-writing-output\nchannel_capabilities: [files, markdown]\nprovides_capabilities: [pdf.read, pdf.manipulate, pdf.form]\npriority: 100\npermissions:\n  read_dirs: [workspace]\n  write_dirs: [workspace]\n  network: false\n---\n\n# pdf\n\n> **中文**：PDF 全能处理——提取文本与表格、合并\u002F拆分\u002F旋转页面、填写表单域、生成简单 PDF。\n> **English**: Full PDF handling — text\u002Ftable extraction, merge\u002Fsplit\u002Frotate, form filling, simple generation.\n\n## When to use\n\n- 用户给出 `.pdf` 文件并要求阅读、总结、抽取数据、转换格式。\n- 需要合并多个 PDF、拆分章节、旋转\u002F删除页面。\n- 需要填写可填写表单（AcroForm）或基于模板生成 PDF。\n- 不适用：扫描件 OCR（无文本层时先说明需要 OCR，可调用 STT\u002FOCR 能力若可用）、复杂版式重排（建议改走 anycode-pdf 或 anycode-docx）。\n\n## Workflow\n\n1. **Inspect first**：用 `run info \u003Cfile>` 查看页数、是否加密、是否含表单域\u002F文本层。\n2. **Extract**：\n   - 文本：`run text \u003Cfile> [--pages 1-3]`\n   - 表格：优先 `pdfplumber`（`run tables \u003Cfile>`），无 pdfplumber 时退化为文本抽取并说明。\n3. **Manipulate**：\n   - 合并：`run merge a.pdf b.pdf -o out.pdf`\n   - 拆分：`run split \u003Cfile> --pages 2-5 -o part.pdf`\n   - 旋转：`run rotate \u003Cfile> --pages 1 --angle 90 -o out.pdf`\n4. **Forms**：`run fields \u003Cfile>` 列出表单域；`run fill \u003Cfile> --json data.json -o filled.pdf`（填写后保留可编辑表单域并刷新外观；如需真正扁平化，用 `run merge filled.pdf -o flat.pdf` 前先用 `qpdf --flatten-annotations` 或打印导出）。\n5. **Generate**（简单场景）：用 reportlab 写段落\u002F表格；中文必须注册 CJK 字体（run 脚本内置 `STSong-Light`）。\n\n## Quality contract\n\n- 抽取内容必须标注来源页码；找不到时明确说明，**不得编造**。\n- 加密 PDF 需要密码时向用户索取，不尝试爆破。\n- 输出文件写入工作区 `output\u002F` 或用户指定路径，完成后回报绝对路径与页数。\n- 合并\u002F拆分前后校验页数守恒（sum(inputs) == pages(output)），不一致时报告。\n\n## Failure recovery\n\n- 无文本层（`text` 输出为空）→ 提示扫描件，建议 OCR 或提供文字版。\n- 缺 pypdf\u002Freportlab\u002Fpdfplumber → `pip install pypdf reportlab pdfplumber`（或 `uv run --with pypdf ...`），失败则降级为纯文本方案并说明受限项。\n- 表单域名未知 → 先 `run fields` 列出，再与用户字段做映射，映射结果随输出一起给出。\n","# pdf\n\n> **中文**：PDF 全能处理——提取文本与表格、合并\u002F拆分\u002F旋转页面、填写表单域、生成简单 PDF。\n> **English**: Full PDF handling — text\u002Ftable extraction, merge\u002Fsplit\u002Frotate, form filling, simple generation.\n\n## When to use\n\n- 用户给出 `.pdf` 文件并要求阅读、总结、抽取数据、转换格式。\n- 需要合并多个 PDF、拆分章节、旋转\u002F删除页面。\n- 需要填写可填写表单（AcroForm）或基于模板生成 PDF。\n- 不适用：扫描件 OCR（无文本层时先说明需要 OCR，可调用 STT\u002FOCR 能力若可用）、复杂版式重排（建议改走 anycode-pdf 或 anycode-docx）。\n\n## Workflow\n\n1. **Inspect first**：用 `run info \u003Cfile>` 查看页数、是否加密、是否含表单域\u002F文本层。\n2. **Extract**：\n   - 文本：`run text \u003Cfile> [--pages 1-3]`\n   - 表格：优先 `pdfplumber`（`run tables \u003Cfile>`），无 pdfplumber 时退化为文本抽取并说明。\n3. **Manipulate**：\n   - 合并：`run merge a.pdf b.pdf -o out.pdf`\n   - 拆分：`run split \u003Cfile> --pages 2-5 -o part.pdf`\n   - 旋转：`run rotate \u003Cfile> --pages 1 --angle 90 -o out.pdf`\n4. **Forms**：`run fields \u003Cfile>` 列出表单域；`run fill \u003Cfile> --json data.json -o filled.pdf`（填写后保留可编辑表单域并刷新外观；如需真正扁平化，用 `run merge filled.pdf -o flat.pdf` 前先用 `qpdf --flatten-annotations` 或打印导出）。\n5. **Generate**（简单场景）：用 reportlab 写段落\u002F表格；中文必须注册 CJK 字体（run 脚本内置 `STSong-Light`）。\n\n## Quality contract\n\n- 抽取内容必须标注来源页码；找不到时明确说明，**不得编造**。\n- 加密 PDF 需要密码时向用户索取，不尝试爆破。\n- 输出文件写入工作区 `output\u002F` 或用户指定路径，完成后回报绝对路径与页数。\n- 合并\u002F拆分前后校验页数守恒（sum(inputs) == pages(output)），不一致时报告。\n\n## Failure recovery\n\n- 无文本层（`text` 输出为空）→ 提示扫描件，建议 OCR 或提供文字版。\n- 缺 pypdf\u002Freportlab\u002Fpdfplumber → `pip install pypdf reportlab pdfplumber`（或 `uv run --with pypdf ...`），失败则降级为纯文本方案并说明受限项。\n- 表单域名未知 → 先 `run fields` 列出，再与用户字段做映射，映射结果随输出一起给出。\n",{"mode":49,"name":5,"name_zh":50,"version":51,"approval":52,"category":41,"priority":53,"description":7,"permissions":54,"description_zh":57,"channel_capabilities":58,"provides_capabilities":59},"executable","PDF 处理","1.0.0","read-only-unless-writing-output",100,{"network":45,"read_dirs":55,"write_dirs":56},[36],[36],"读取、合并、拆分、提取文本\u002F表格、填写 PDF 表单（参考 Anthropic 官方文档技能模式）。",[34,40],[60,61,62],"pdf.read","pdf.manipulate","pdf.form","main","a31592a8f7a5864cc8bdb58534b0262134d84454","skills-starter\u002Fpdf",1,"https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode","anycode.work","https:\u002F\u002Fgithub.com\u002Fqingjiuzys","learning ai.... ","2026-09-12 18:08:54",{"source":8,"skillName":5,"commands":73,"prompt":83,"zipAvailable":84},[74,77,80],{"tool":75,"command":76},"npx","npx skills add qingjiuzys\u002Fanycode --skill pdf",{"tool":78,"command":79},"bunx","bunx skills add qingjiuzys\u002Fanycode --skill pdf",{"tool":81,"command":82},"pnpm","pnpm dlx skills add qingjiuzys\u002Fanycode --skill pdf","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode\u002Fblob\u002Fmain\u002Fskills-starter\u002Fpdf\u002FSKILL.md",true,[86],{"path":87,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":90,"sourceHtmlUrl":91},"run","OTHER","其他",8185,"https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode\u002Fblob\u002Fmain\u002Fskills-starter\u002Fpdf\u002Frun",[93,106,117,134,144,155],{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":44},"01M6MYMFCKSXF6HM0J9F6XGTSW","weekly-report-ab-market-stub","https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fab-fixtures\u002Fmarket-reference\u002Fweekly-report-ab\u002FSKILL.md",[],[99,100,101,102,103,104,105],"report","Weekly Report","Market","ab","weekly","stub","weekly report ab market stub",{"skillNo":107,"name":108,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":114,"publishedAt":44},"01M6MYMBRT8GWGJ2GJRM1KGC4K","report-csv-ab-market-stub","https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fab-fixtures\u002Fmarket-reference\u002Freport-csv-ab\u002FSKILL.md",[111],{"categoryNo":112,"categoryName":113,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000004","电子表格",[102,99,115,101,104,116],"csv","report csv ab market stub",{"skillNo":118,"name":119,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":130,"publishedAt":44},"01M6MYM7WNEQ9JBFQZ18HHFJYY","office-pptx-ab-market-stub","https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fab-fixtures\u002Fmarket-reference\u002Foffice-pptx-ab\u002FSKILL.md",[122,125],{"categoryNo":123,"categoryName":124,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":126,"categoryName":127,"taxonomyType":128,"taxonomyTypeDesc":129},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[41,101,102,104,131,132,133],"office pptx","office pptx ab market stub","pptx",{"skillNo":135,"name":136,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":44},"01M6MYM47EAQXDGS0J299DJQGR","novel-writer-ab-market-stub","https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fab-fixtures\u002Fmarket-reference\u002Fnovel-writer-ab\u002FSKILL.md",[],[101,140,102,141,142,104,143],"writer","novel","novel writer","novel writer ab market stub",{"skillNo":145,"name":146,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":150,"publishedAt":44},"01M6MYM0D7WBHBV5RACEJKS38G","meeting-minutes-ab-market-stub","https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fab-fixtures\u002Fmarket-reference\u002Fmeeting-minutes-ab\u002FSKILL.md",[149],{"categoryNo":126,"categoryName":127,"taxonomyType":128,"taxonomyTypeDesc":129},[151,152,101,102,153,104,154],"minutes","meeting minutes","meeting","meeting minutes ab market stub",{"skillNo":156,"name":157,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":44},"01M6MYKWFKNCR46ADQJ77EHZ85","md-to-pdf-ab-market-stub","https:\u002F\u002Fgithub.com\u002Fqingjiuzys\u002Fanycode\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fab-fixtures\u002Fmarket-reference\u002Fmd-to-pdf-ab\u002FSKILL.md",[160],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[101,162,102,104,163,24],"md to pdf","md to pdf ab market stub"]