{"id":"4da9e21b-2492-413e-bd7a-d4ec27510c34","entityType":"agent","slug":"clawhub-xixihaha123123123123-wps-pdf","name":"WPS PDF Processing","canonicalUrl":"https://www.xpersona.co/agent/clawhub-xixihaha123123123123-wps-pdf","canonicalPath":"/agent/clawhub-xixihaha123123123123-wps-pdf","generatedAt":"2026-10-10T21:56:44.207Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T17:24:22.690Z","emptyReason":null},"description":"当用户需要对 PDF 文件进行任何操作时，使用本技能。包括：读取或提取 PDF 中的文字/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新 PDF、填写 PDF 表单、加密/解密 PDF、提取图片，以及对扫描版 PDF 进行 OCR 识别使其可搜索。只要用户提到 .pdf 文件或希望生成 PDF，... Skill: WPS PDF Processing Owner: xixihaha123123123123 Summary: 当用户需要对 PDF 文件进行任何操作时，使用本技能。包括：读取或提取 PDF 中的文字/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新 PDF、填写 PDF 表单、加密/解密 PDF、提取图片，以及对扫描版 PDF 进行 OCR 识别使其可搜索。只要用户提到 .pdf 文件或希望生成 PDF，... Tags: document:1.0.0, latest:1.0.0, ocr:1.0.0, pdf:1.0.0 Version history: v1.0.0 | 2026-04-18T12:32:27.417Z | user Initial release Archive index: Archive v1.0.0: 4 files, 7849 bytes Files: scripts","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s172gcva854bewaha4hwd8xj4s852cyf:wps-pdf","sourceUrl":"https://clawhub.ai/xixihaha123123123123/wps-pdf","homepage":"https://clawhub.ai/xixihaha123123123123/skills/wps-pdf","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/xixihaha123123123123/wps-pdf","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/xixihaha123123123123/skills/wps-pdf","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"当用户需要对 PDF 文件进行任何操作时，使用本技能。包括：读取或提取 PDF 中的文字/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新 PDF、填写 PDF 表单、加密/解密 PDF、提取图片，以及对扫描版 PDF 进行 OCR 识别使其可搜索。只要用户提到 .pdf 文件或希望生成 PDF，..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T17:24:22.690Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T17:24:22.690Z","emptyReason":null},"stars":null,"forks":null,"downloads":1320,"packageName":null,"latestVersion":"1.0.0","tractionLabel":"1.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T17:24:22.690Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T17:24:22.690Z","lastCrawledAt":"2026-10-10T17:24:22.690Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T17:24:22.690Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.0","createdAt":"2026-04-18T12:32:27.417Z","changelog":"Initial release","fileCount":4,"zipByteSize":7849}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s172gcva854bewaha4hwd8xj4s852cyf:wps-pdf","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T21:56:44.207Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xixihaha123123123123-wps-pdf/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T17:24:22.690Z","emptyReason":null},"readme":"Skill: WPS PDF Processing\n\nOwner: xixihaha123123123123\n\nSummary: 当用户需要对 PDF 文件进行任何操作时，使用本技能。包括：读取或提取 PDF 中的文字/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新 PDF、填写 PDF 表单、加密/解密 PDF、提取图片，以及对扫描版 PDF 进行 OCR 识别使其可搜索。只要用户提到 .pdf 文件或希望生成 PDF，...\n\nTags: document:1.0.0, latest:1.0.0, ocr:1.0.0, pdf:1.0.0\n\nVersion history:\n\nv1.0.0 | 2026-04-18T12:32:27.417Z | user\n\nInitial release\n\nArchive index:\n\nArchive v1.0.0: 4 files, 7849 bytes\n\nFiles: scripts/pdf_to_md.py (6912b), skill-card.md (2312b), SKILL.md (7095b), _meta.json (126b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: pdf\ndescription: 当用户需要对 PDF 文件进行任何操作时，使用本技能。包括：读取或提取 PDF 中的文字/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新 PDF、填写 PDF 表单、加密/解密 PDF、提取图片，以及对扫描版 PDF 进行 OCR 识别使其可搜索。只要用户提到 .pdf 文件或希望生成 PDF，即使用本技能。\n---\n\n# PDF 处理指南\n\n## 工具速查\n\n| 任务                             | 推荐库     | 说明                                          |\n| -------------------------------- | ---------- | --------------------------------------------- |\n| 合并 / 拆分 / 旋转 / 水印 / 加密 | pypdf      | 轻量，纯 Python                               |\n| 提取文本 / 表格（结构化）        | pdfplumber | 精度高，支持坐标；                            |\n| 创建排版 PDF                     | reportlab  | 支持段落、表格、样式                          |\n| 扫描版 OCR / 结构化转 Markdown   | pdf-to-md  | 返回图片 + markdown；文字提取失败时的兜底方案 |\n\n---\n\n## pypdf — 基础操作\n\n```python\nfrom pypdf import PdfReader, PdfWriter\n\n# 提取文本\nreader = PdfReader(\"doc.pdf\")\ntext = \"\".join(page.extract_text() for page in reader.pages)\n\n# 合并\nwriter = PdfWriter()\nfor path in [\"a.pdf\", \"b.pdf\"]:\n    for page in PdfReader(path).pages:\n        writer.add_page(page)\nwith open(\"merged.pdf\", \"wb\") as f:\n    writer.write(f)\n\n# 拆分（每页单独保存）\nfor i, page in enumerate(reader.pages):\n    w = PdfWriter()\n    w.add_page(page)\n    with open(f\"page_{i+1}.pdf\", \"wb\") as f:\n        w.write(f)\n\n# 旋转 / 水印 / 加密 / 裁剪\npage.rotate(90)\npage.merge_page(PdfReader(\"watermark.pdf\").pages[0])\nwriter.encrypt(\"user_pass\", \"owner_pass\")\npage.mediabox.left, page.mediabox.bottom, page.mediabox.right, page.mediabox.top = 50, 50, 550, 750\n```\n\n---\n\n## pdfplumber — 文本与表格提取\n\n```python\nimport pdfplumber, pandas as pd\n\nwith pdfplumber.open(\"doc.pdf\") as pdf:\n    # 文本\n    text = pdf.pages[0].extract_text()\n    # 表格 → DataFrame\n    for t in pdf.pages[0].extract_tables():\n        if t:\n            df = pd.DataFrame(t[1:], columns=t[0])\n    # 按坐标区域提取（左、上、右、下）\n    region_text = pdf.pages[0].within_bbox((100, 100, 400, 200)).extract_text()\n```\n\n---\n\n## 注意事项\n\n- **中文字体**：reportlab 默认字体不含中文字形，生成含中文的 PDF 时必须先通过\n  `pdfmetrics.registerFont(TTFont(...))` 注册系统中文字体（如 Noto Sans\n  CJK、微软雅黑、文泉驿等），并在样式中指定该字体，否则中文会显示为乱码。\n\n## reportlab — 创建 PDF\n\n```python\nfrom reportlab.lib.pagesizes import letter\nfrom reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer\nfrom reportlab.lib.styles import getSampleStyleSheet\n\ndoc = SimpleDocTemplate(\"out.pdf\", pagesize=letter)\nstyles = getSampleStyleSheet()\ndoc.build([\n    Paragraph(\"标题\", styles[\"Title\"]),\n    Spacer(1, 12),\n    Paragraph(\"正文内容\", styles[\"Normal\"]),\n])\n```\n\n> **下标/上标**：不要用 Unicode 字符（₀¹²），改用 XML 标签：`H<sub>2</sub>O`、`x<super>2</super>`。\n\n---\n\n## OCR 与常见问题\n\n### OCR：PDF → Markdown（含图片）\n\n> **如果用 `pypdf` 或 `pdfplumber` 提取到的文字为空、极少，或出现大量乱码，必须改用此 OCR 方案。** 扫描版 PDF、拍照 PDF、图片型 PDF 均无法通过普通文本提取获得内容，OCR 是唯一可靠手段。\n\n```python\nimport sys, os\nsys.path.insert(0, os.path.join(os.getenv('skill_path'), 'pdf', 'scripts'))\nfrom pdf_to_md import parse\n\n# 结果写入 <输出目录>/content.md，图片写入 <输出目录>/images/\nparse('<PDF路径>', '<输出目录>')\n```\n\n> 适用场景：扫描版 PDF、图文混排、需要保留图片、中文内容居多。\n\n### 其他常见问题\n\n```python\n# 处理加密 PDF\nfrom pypdf import PdfReader\nreader = PdfReader(\"enc.pdf\")\nif reader.is_encrypted:\n    reader.decrypt(\"password\")\n\n# 提取嵌入图片\nfrom PIL import Image\nimport io\nfor page in reader.pages:\n    for img_obj in page.images:\n        Image.open(io.BytesIO(img_obj.data)).save(f\"{img_obj.name}.png\")\n\n# 宽容模式读取损坏 PDF\nreader = PdfReader(\"damaged.pdf\", strict=False)\n```\n\n---\n\n# PDF高级处理参考\n\n---\n\n## pypdfium2 — 渲染为图片\n\n基于 Chromium PDFium，无需 poppler 等外部依赖，适合渲染和 OCR 场景。\n\n```python\nimport pypdfium2 as pdfium\n\npdf = pdfium.PdfDocument(\"doc.pdf\")\nfor i, page in enumerate(pdf):\n    bitmap = page.render(scale=2.0)   # scale=2 ≈ 192 DPI\n    bitmap.to_pil().save(f\"page_{i+1}.png\")\n\n# 提取文本\nfor i, page in enumerate(pdf):\n    print(f\"第 {i+1} 页：{len(page.get_text())} 字符\")\n```\n\n---\n\n## pdfplumber — 精确坐标与复杂表格\n\n```python\nimport pdfplumber\n\nwith pdfplumber.open(\"doc.pdf\") as pdf:\n    page = pdf.pages[0]\n\n    # 逐字符提取含坐标信息\n    for char in page.chars[:10]:\n        print(f\"'{char['text']}' x:{char['x0']:.1f} y:{char['y0']:.1f}\")\n\n    # 复杂布局自定义策略\n    tables = page.extract_tables({\n        \"vertical_strategy\": \"lines\",\n        \"horizontal_strategy\": \"lines\",\n        \"snap_tolerance\": 3,\n        \"intersection_tolerance\": 15,\n    })\n\n    # 可视化调试表格检测结果\n    page.to_image(resolution=150).save(\"debug.png\")\n```\n\n---\n\n## reportlab — 复杂表格与多页报告\n\n```python\nfrom reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, PageBreak\nfrom reportlab.lib.styles import getSampleStyleSheet\nfrom reportlab.lib import colors\nfrom reportlab.lib.pagesizes import letter\n\ndoc = SimpleDocTemplate(\"report.pdf\", pagesize=letter)\nstyles = getSampleStyleSheet()\n\ndata = [\n    [\"产品\", \"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n    [\"Widget\", \"120\", \"135\", \"142\", \"158\"],\n    [\"Gadget\", \"85\",  \"92\",  \"98\",  \"105\"],\n]\ntable = Table(data, colWidths=[120, 60, 60, 60, 60])\ntable.setStyle(TableStyle([\n    (\"BACKGROUND\",     (0, 0), (-1,  0), colors.HexColor(\"#4472C4\")),\n    (\"TEXTCOLOR\",      (0, 0), (-1,  0), colors.white),\n    (\"FONTNAME\",       (0, 0), (-1,  0), \"Helvetica-Bold\"),\n    (\"ALIGN\",          (0, 0), (-1, -1), \"CENTER\"),\n    (\"ROWBACKGROUNDS\", (0, 1), (-1, -1), [colors.white, colors.HexColor(\"#EEF2FF\")]),\n    (\"GRID\",           (0, 0), (-1, -1), 0.5, colors.grey),\n    (\"BOX\",            (0, 0), (-1, -1), 1,   colors.black),\n]))\n\ndoc.build([\n    Paragraph(\"销售报告\", styles[\"Title\"]),\n    table,\n    PageBreak(),\n    Paragraph(\"第二页内容\", styles[\"Normal\"]),\n])\n```\n\n---\n\n## 批量处理\n\n```python\nimport glob, logging\nfrom pypdf import PdfReader, PdfWriter\n\nlogger = logging.getLogger(__name__)\n\n# 批量合并目录下所有 PDF\nwriter = PdfWriter()\nfor pdf_file in sorted(glob.glob(\"input/*.pdf\")):\n    try:\n        for page in PdfReader(pdf_file).pages:\n            writer.add_page(page)\n    except Exception as e:\n        logger.error(f\"跳过 {pdf_file}：{e}\")\nwith open(\"merged_all.pdf\", \"wb\") as f:\n    writer.write(f)\n```\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn75sj7ng3atr0ybce5905vm85853fbc\",\n  \"slug\": \"wps-pdf\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776515547417\n}\n\nFile v1.0.0:skill-card.md\n\n## Description:\n\nHelps agents process PDF files, including text and table extraction, merging, splitting, rotation, watermarking, PDF creation, form handling, encryption, image extraction, and OCR-backed PDF-to-Markdown conversion.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[xixihaha123123123123](https://clawhub.ai/user/xixihaha123123123123)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to manipulate PDFs, extract text and tables, create new PDFs, and fall back to OCR when normal text extraction fails. It is especially relevant for scanned, photographed, image-heavy, or Chinese-language PDFs that need Markdown output with local image files.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The OCR/PDF-to-Markdown path uploads complete PDFs to WPS using ambient WPS session credentials.\n\nMitigation: Use the OCR path only for PDFs approved for remote WPS processing, and avoid confidential, regulated, financial, legal, or proprietary documents unless that remote processing is explicitly acceptable.\n\nRisk: The WPS_API_BASE setting and image download behavior affect where network requests go and what files are written locally.\n\nMitigation: Review and constrain WPS_API_BASE and image download behavior before use, and run conversions in an isolated output directory.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/xixihaha123123123123/skills/wps-pdf)\n- [WPS API Base](https://api.wps.cn)\n- [WPS KDocs Web Origin](https://365.kdocs.cn)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with Python code examples; the OCR helper writes content.md and localized image files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The OCR path may create Markdown and image files and sends complete PDFs to WPS using local WPS session credentials.]\n\n## Skill Version(s):\n\n1.0.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: WPS PDF Processing Owner: xixihaha123123123123 Summary: 当用户需要对 PDF 文件进行任何操作时，使用本技能。包括：读取或提取 PDF 中的文字/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新 PDF、填写 PDF 表单、加密/解密 PDF、提取图片，以及对扫描版 PDF 进行 OCR 识别使其可搜索。只要用户提到 .pdf 文件或希望生成 PDF，... Tags: document:1.0.0, latest:1.0.0, ocr:1.0.0, pdf:1.0.0 Version history: v1.0.0 | 2026-04-18T12:32:27.417Z | user Initial release Archive index: Archive v1.0.0: 4 files, 7849 bytes Files: scripts","codeSnippets":[],"executableExamples":[{"language":"python","snippet":"from pypdf import PdfReader, PdfWriter\n\n# 提取文本\nreader = PdfReader(\"doc.pdf\")\ntext = \"\".join(page.extract_text() for page in reader.pages)\n\n# 合并\nwriter = PdfWriter()\nfor path in [\"a.pdf\", \"b.pdf\"]:\n    for page in PdfReader(path).pages:\n        writer.add_page(page)\nwith open(\"merged.pdf\", \"wb\") as f:\n    writer.write(f)\n\n# 拆分（每页单独保存）\nfor i, page in enumerate(reader.pages):\n    w = PdfWriter()\n    w.add_page(page)\n    with open(f\"page_{i+1}.pdf\", \"wb\") as f:\n        w.write(f)\n\n# 旋转 / 水印 / 加密 / 裁剪\npage.rotate(90)\npage.merge_page(PdfReader(\"watermark.pdf\").pages[0])\nwriter.encrypt(\"user_pass\", \"owner_pass\")\npage.mediabox.left, page.mediabox.bottom, page.mediabox.right, page.mediabox.top = 50, 50, 550, 750"},{"language":"python","snippet":"import pdfplumber, pandas as pd\n\nwith pdfplumber.open(\"doc.pdf\") as pdf:\n    # 文本\n    text = pdf.pages[0].extract_text()\n    # 表格 → DataFrame\n    for t in pdf.pages[0].extract_tables():\n        if t:\n            df = pd.DataFrame(t[1:], columns=t[0])\n    # 按坐标区域提取（左、上、右、下）\n    region_text = pdf.pages[0].within_bbox((100, 100, 400, 200)).extract_text()"},{"language":"python","snippet":"from reportlab.lib.pagesizes import letter\nfrom reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer\nfrom reportlab.lib.styles import getSampleStyleSheet\n\ndoc = SimpleDocTemplate(\"out.pdf\", pagesize=letter)\nstyles = getSampleStyleSheet()\ndoc.build([\n    Paragraph(\"标题\", styles[\"Title\"]),\n    Spacer(1, 12),\n    Paragraph(\"正文内容\", styles[\"Normal\"]),\n])"},{"language":"python","snippet":"import sys, os\nsys.path.insert(0, os.path.join(os.getenv('skill_path'), 'pdf', 'scripts'))\nfrom pdf_to_md import parse\n\n# 结果写入 <输出目录>/content.md，图片写入 <输出目录>/images/\nparse('<PDF路径>', '<输出目录>')"},{"language":"python","snippet":"# 处理加密 PDF\nfrom pypdf import PdfReader\nreader = PdfReader(\"enc.pdf\")\nif reader.is_encrypted:\n    reader.decrypt(\"password\")\n\n# 提取嵌入图片\nfrom PIL import Image\nimport io\nfor page in reader.pages:\n    for img_obj in page.images:\n        Image.open(io.BytesIO(img_obj.data)).save(f\"{img_obj.name}.png\")\n\n# 宽容模式读取损坏 PDF\nreader = PdfReader(\"damaged.pdf\", strict=False)"},{"language":"python","snippet":"import pypdfium2 as pdfium\n\npdf = pdfium.PdfDocument(\"doc.pdf\")\nfor i, page in enumerate(pdf):\n    bitmap = page.render(scale=2.0)   # scale=2 ≈ 192 DPI\n    bitmap.to_pil().save(f\"page_{i+1}.png\")\n\n# 提取文本\nfor i, page in enumerate(pdf):\n    print(f\"第 {i+1} 页：{len(page.get_text())} 字符\")"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: pdf\ndescription: 当用户需要对 PDF 文件进行任何操作时，使用本技能。包括：读取或提取 PDF 中的文字/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新 PDF、填写 PDF 表单、加密/解密 PDF、提取图片，以及对扫描版 PDF 进行 OCR 识别使其可搜索。只要用户提到 .pdf 文件或希望生成 PDF，即使用本技能。\n---\n\n# PDF 处理指南\n\n## 工具速查\n\n| 任务                             | 推荐库     | 说明                                          |\n| -------------------------------- | ---------- | --------------------------------------------- |\n| 合并 / 拆分 / 旋转 / 水印 / 加密 | pypdf      | 轻量，纯 Python                               |\n| 提取文本 / 表格（结构化）        | pdfplumber | 精度高，支持坐标；                            |\n| 创建排版 PDF                     | reportlab  | 支持段落、表格、样式                          |\n| 扫描版 OCR / 结构化转 Markdown   | pdf-to-md  | 返回图片 + markdown；文字提取失败时的兜底方案 |\n\n---\n\n## pypdf — 基础操作\n\n```python\nfrom pypdf import PdfReader, PdfWriter\n\n# 提取文本\nreader = PdfReader(\"doc.pdf\")\ntext = \"\".join(page.extract_text() for page in reader.pages)\n\n# 合并\nwriter = PdfWriter()\nfor path in [\"a.pdf\", \"b.pdf\"]:\n    for page in PdfReader(path).pages:\n        writer.add_page(page)\nwith open(\"merged.pdf\", \"wb\") as f:\n    writer.write(f)\n\n# 拆分（每页单独保存）\nfor i, page in enumerate(reader.pages):\n    w = PdfWriter()\n    w.add_page(page)\n    with open(f\"page_{i+1}.pdf\", \"wb\") as f:\n        w.write(f)\n\n# 旋转 / 水印 / 加密 / 裁剪\npage.rotate(90)\npage.merge_page(PdfReader(\"watermark.pdf\").pages[0])\nwriter.encrypt(\"user_pass\", \"owner_pass\")\npage.mediabox.left, page.mediabox.bottom, page.mediabox.right, page.mediabox.top = 50, 50, 550, 750\n```\n\n---\n\n## pdfplumber — 文本与表格提取\n\n```python\nimport pdfplumber, pandas as pd\n\nwith pdfplumber.open(\"doc.pdf\") as pdf:\n    # 文本\n    text = pdf.pages[0].extract_text()\n    # 表格 → DataFrame\n    for t in pdf.pages[0].extract_tables():\n        if t:\n            df = pd.DataFrame(t[1:], columns=t[0])\n    # 按坐标区域提取（左、上、右、下）\n    region_text = pdf.pages[0].within_bbox((100, 100, 400, 200)).extract_text()\n```\n\n---\n\n## 注意事项\n\n- **中文字体**：reportlab 默认字体不含中文字形，生成含中文的 PDF 时必须先通过\n  `pdfmetrics.registerFont(TTFont(...))` 注册系统中文字体（如 Noto Sans\n  CJK、微软雅黑、文泉驿等），并在样式中指定该字体，否则中文会显示为乱码。\n\n## reportlab — 创建 PDF\n\n```python\nfrom reportlab.lib.pagesizes import letter\nfrom reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer\nfrom reportlab.lib.styles import getSampleStyleSheet\n\ndoc = SimpleDocTemplate(\"out.pdf\", pagesize=letter)\nstyles = getSampleStyleSheet()\ndoc.build([\n    Paragraph(\"标题\", styles[\"Title\"]),\n    Spacer(1, 12),\n    Paragraph(\"正文内容\", styles[\"Normal\"]),\n])\n```\n\n> **下标/上标**：不要用 Unicode 字符（₀¹²），改用 XML 标签：`H<sub>2</sub>O`、`x<super>2</super>`。\n\n---\n\n## OCR 与常见问题\n\n### OCR：PDF → Markdown（含图片）\n\n> **如果用 `pypdf` 或 `pdfplumber` 提取到的文字为空、极少，或出现大量乱码，必须改用此 OCR 方案。** 扫描版 PDF、拍照 PDF、图片型 PDF 均无法通过普通文本提取获得内容，OCR 是唯一可靠手段。\n\n```python\nimport sys, os\nsys.path.insert(0, os.path.join(os.getenv('skill_path'), 'pdf', 'scripts'))\nfrom pdf_to_md import parse\n\n# 结果写入 <输出目录>/content.md，图片写入 <输出目录>/images/\nparse('<PDF路径>', '<输出目录>')\n```\n\n> 适用场景：扫描版 PDF、图文混排、需要保留图片、中文内容居多。\n\n### 其他常见问题\n\n```python\n# 处理加密 PDF\nfrom pypdf import PdfReader\nread"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75sj7ng3atr0ybce5905vm85853fbc\",\n  \"slug\": \"wps-pdf\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776515547417\n}"},{"path":"skill-card.md","content":"## Description:\n\nHelps agents process PDF files, including text and table extraction, merging, splitting, rotation, watermarking, PDF creation, form handling, encryption, image extraction, and OCR-backed PDF-to-Markdown conversion.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[xixihaha123123123123](https://clawhub.ai/user/xixihaha123123123123)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to manipulate PDFs, extract text and tables, create new PDFs, and fall back to OCR when normal text extraction fails. It is especially relevant for scanned, photographed, image-heavy, or Chinese-language PDFs that need Markdown output with local image files.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The OCR/PDF-to-Markdown path uploads complete PDFs to WPS using ambient WPS session credentials.\n\nMitigation: Use the OCR path only for PDFs approved for remote WPS processing, and avoid confidential, regulated, financial, legal, or proprietary documents unless that remote processing is explicitly acceptable.\n\nRisk: The WPS_API_BASE setting and image download behavior affect where network requests go and what files are written locally.\n\nMitigation: Review and constrain WPS_API_BASE and image download behavior before use, and run conversions in an isolated output directory.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/xixihaha123123123123/skills/wps-pdf)\n- [WPS API Base](https://api.wps.cn)\n- [WPS KDocs Web Origin](https://365.kdocs.cn)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with Python code examples; the OCR helper writes content.md and localized image files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The OCR path may create Markdown and image files and sends complete PDFs to WPS using local WPS session credentials.]\n\n## Skill Version(s):\n\n1.0.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"当用户需要对 PDF 文件进行任何操作时，使用本技能。包括：读取或提取 PDF 中的文字/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新 PDF、填写 PDF 表单、加密/解密 PDF、提取图片，以及对扫描版 PDF 进行 OCR 识别使其可搜索。只要用户提到 .pdf 文件或希望生成 PDF，... Skill: WPS PDF Processing Owner: xixihaha123123123123 Summary: 当用户需要对 PDF 文件进行任何操作时，使用本技能。包括：读取或提取 PDF 中的文字/表格、合并多个 PDF、拆分 PDF、旋转页面、添加水印、创建新 PDF、填写 PDF 表单、加密/解密 PDF、提取图片，以及对扫描版 PDF 进行 OCR 识别使其可搜索。只要用户提到 .pdf 文件或希望生成 PDF，... Tags: document:1.0.0, latest:1.0.0, ocr:1.0.0, pdf:1.0.0 Version history: v1.0.0 | 2026-04-18T12:32:27.417Z | user Initial release Archive index: Archive v1.0.0: 4 files, 7849 bytes Files: scripts","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":742,"uniquenessScore":58,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T17:24:22.690Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T17:24:22.690Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T21:56:44.207Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}