一键导入
pdf-vision-extractor
Extract invoice numbers, dates, amounts and other fields from scanned PDFs using Claude vision.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Extract invoice numbers, dates, amounts and other fields from scanned PDFs using Claude vision.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Review code changes and report issues by severity with actionable fixes.
Sharpen a fuzzy intention into one measurable objective string that drives the rest of the work.
Convert a Prompt Flow PRS pipeline submission to run a Microsoft Agent Framework workflow.
Build a Model Context Protocol (MCP) server that lets an LLM call into external tools and resources.
Summarize PDF documents into concise bullet-point digests.
Bump a dependency version across a pnpm workspace and update lockfile.
| name | PDF Vision Extractor |
| description | Extract invoice numbers, dates, amounts and other fields from scanned PDFs using Claude vision. |
| category | multimodal |
| tags | ["ai","documentation","javascript","llm","typescript"] |
| source | null |
| license | MIT |
| author | badhope |
| version | 0.1.0 |
| platforms | ["claude"] |
| needs_review | false |
| slug | pdf-vision-extractor |
| created | 2026-06-12 |
| updated | 2026-06-19 |
| inputs | [{"name":"pdf_path","type":"string","required":true,"description":"Local path to scanned PDF file"},{"name":"schema","type":"object","required":true,"description":"JSON schema defining fields to extract"},{"name":"pages","type":"array","required":false,"description":"Specific pages to extract from (omit for all pages)"}] |
| output | {"format":"markdown","description":"Generated content based on the user request"} |
Claude-only — This skill assumes the model has vision capability to read images in PDFs. Codex / GPT-4o vision may also work, but the prompt is tuned for Claude. Cursor / Continue using pure text path will not work.
The document is a scanned or image-based PDF (not a PDF with text layer). You need to extract several structured fields from it. Typical use cases: invoice number + date + amount, contract parties + amount, receipt merchant name + transaction ID.
The schema is specified by the caller, so the same prompt works for different forms — invoices, contracts, receipts, HSE reports.
Do NOT use for:
pdf-summarizer or extract text directly)| Field | Description |
|---|---|
pdf_path | Local path to the scanned PDF |
schema | Fields to extract. Required — without it the skill doesn't know what to extract |
pages | Which pages to read. Omit for all pages |
Schema shape:
schema:
invoice_no: { type: string, description: Invoice number }
total: { type: number, description: Total amount including tax }
currency: { enum: [CNY, USD, EUR] }
issued_at: { type: string, description: YYYY-MM-DD }
The model does not strictly follow schema types — number fields may return strings and need upstream float() conversion. This is a known limitation, not handled in v1.
JSON, shape:
{
"extracted": { /* filled per schema, omit fields not found */ },
"confidence": 0.85,
"missing": ["currency"]
}
confidence is the model's self-assessed 0-1 number, not trustworthy. Use only for sorting/filtering.
For real validation, use schema validation + business rules (amount > 0, valid date, etc.).
You have vision. The user will give you a PDF (scanned / image-based)
and a JSON schema. Look at every page they allow you to see, then
extract the requested fields.
Rules:
- Read top-to-bottom, left-to-right. Tables come in row order.
- Numbers: drop thousand separators, keep decimal point.
"$1,234.50" → 1234.50, "¥1.234,50" → 1234.50.
- Dates: always emit YYYY-MM-DD. "March 5, 2024" → 2024-03-05.
- Enum fields: pick the closest enum value, even if the doc says
it slightly differently. "RMB" → CNY.
- Missing fields: don't guess. If the doc doesn't show the field,
omit it from `extracted` and add it to `missing`.
- Multi-page: aggregate across all allowed pages, prefer the
canonical / summary line over individual line items.
Output JSON only, no prose. Schema:
{
"extracted": <object with extracted fields, matching input schema>,
"confidence": <number 0-1, your self-assessed certainty>,
"missing": [<field names you couldn't find>]
}
Be terse in confidence — 0.9+ only when the field is clearly
printed; 0.5-0.8 when partially obscured; <0.5 when you're guessing.
pdftotext extraction is more accurate, vision is wastefulInput:
pdf_path: ./invoices/2024-03-acme.pdf
schema:
invoice_no: { type: string, description: Invoice number }
issued_at: { type: string, description: Invoice date YYYY-MM-DD }
total: { type: number, description: Total amount including tax }
currency: { enum: [CNY, USD, EUR] }
vendor: { type: string, description: Seller name }
Output:
{
"extracted": {
"invoice_no": "INV-2024-03381",
"issued_at": "2024-03-15",
"total": 12750.00,
"currency": "CNY",
"vendor": "Acme Technologies Co., Ltd."
},
"confidence": 0.88,
"missing": []
}
These are the bugs that bite every new user. Check them before shipping:
Scanned image PDFs: PDFs that are images, not text.
Confidence threshold not checked: Using low-confidence extractions.
Field extraction without schema validation: Fields returned don't match expected schema.
PDF without extractable content: Encrypted or protected PDF.
Over-reliance on single extraction: Not verifying critical fields manually.