Spaces:
Runtime error
pdf‑toolkit
Extract text, read metadata, list form fields, and merge PDF files. Layout‑aware extraction that handles the messy reality of multi‑column PDFs, encrypted files, and Unicode — so agents don't have to guess.
When to Use This Toolset
- Extracting readable text from a PDF for analysis or search
- Reading PDF metadata (author, title, page count) without opening the file
- Listing fillable form fields before filling them
- Merging multiple PDFs into a single document
- Inspecting PDF structure before automated processing
Decision Tree: Which Extraction Method?
What do you need from the PDF?
├── All readable text → pdf_extract (layout‑aware via pdfplumber)
├── Tables from PDF → pdf_extract + note: pdfplumber can also extract tables
├── Just metadata → pdf_meta (fast, no page processing)
├── Form fields → pdf_form_fields (lists names, types, values)
├── Merge PDFs → pdf_merge (preserves order)
└── Split/extract pages → pdf_extract with first_page/last_page params
Process
Extracting Text
Inspect → Extract → Review
- Inspect with
pdf_metato check page count and encryption status - Extract with
pdf_extract— usefirst_page/last_pagefor large docs - Review the output for formatting issues (common in scanned PDFs, right‑to‑left text, or complex tables)
Working with Form Fields
Inspect → Map → Fill → Validate
- Inspect with
pdf_form_fieldsto list all field names, types, and current values - Map your data to the field names discovered in step 1
- Fill the form using PyPDF2's
update_page_form_field_values - Validate by re‑reading the fields to confirm values were set
Merging Documents
Collect → Order → Merge → Verify
- Collect all input PDF paths
- Order them in the sequence you want in the output
- Merge with
pdf_merge - Verify with
pdf_metato check the output page count matches the sum
Function Reference
pdf_extract
Extract readable text using layout‑aware parsing.
When to use: Whenever you need text content from a PDF — search, analysis, indexing.
Args:
filepath(str) — Path to the PDFfirst_page(int) — First page to extract (1‑based, default 1)last_page(int) — Last page to extract (0 = all pages)
Returns: {text, pages, total, range}
Gotcha: Scanned PDFs (images of text) will return empty text. You'd need OCR (not yet included).
Check pdf_meta for the producer — "scanner" or "Image" in the producer field is a clue.
pdf_meta
Read metadata without processing page content.
When to use: Quick inspection before extracting, or when you only need structural info.
Args:
filepath(str) — Path to the PDF
Returns: {filename, pages, title, author, subject, creator, producer, encrypted, file_size_bytes}
pdf_merge
Merge multiple PDFs into one, preserving page order.
When to use: Combining chapters, appendices, or separate scans into a single document.
Args:
inputs(list) — Ordered list of file paths to mergeoutput(str) — Path for the merged output PDF
Returns: {written, pages, sources}
pdf_form_fields
List all fillable form fields with types, current values, and options.
When to use: Before programmatically filling a PDF form — you need to know the field names.
Args:
filepath(str) — Path to the PDF
Returns: {has_fields, count, fields: [{name, type, value, flags, options}], filename}
Field type guide:
| Type | Meaning |
|---|---|
Tx |
Text field |
Btn |
Checkbox or radio button |
Ch |
Dropdown / choice |
Sig |
Signature field |
Common Patterns
Pattern: Extract and Analyze
pdf_meta → page count, encryption status
pdf_extract → full text
text_stats (from text-transform toolset) → readability, word count
Pattern: Form Auto‑Fill
pdf_form_fields → list of field names and types
Map data to fields
Use PyPDF2 to fill fields programmatically
pdf_form_fields → verify values were set
Pattern: Document Assembly
pdf_meta on each input → sanity check
pdf_merge → combine in order
pdf_meta on output → verify page count = sum of inputs
Guidelines
Do
- Always check
pdf_metafirst to understand encryption and page count - Use
first_page/last_pagefor large documents (100+ pages) - Verify merged output with
pdf_meta— page count should equal sum of inputs - Handle the case where
pdf_extractreturns empty text (scanned PDF)
Don't
- Don't try to extract text from password‑protected PDFs (check
encryptedinpdf_meta) - Don't assume extracted text preserves exact original layout — it's best‑effort
- Don't merge PDFs with different page sizes without checking
- Don't fill forms without first inspecting field types (checkbox vs dropdown vs text)
Limitations to Communicate
- Scanned PDFs: text extraction may return empty — mention this when it happens
- Highly formatted documents: pdfplumber does its best but may misorder text in complex layouts
- Password protection: encrypted PDFs must be unlocked before processing
- Form filling:
pdf_form_fieldslists fields; actual filling requires additional PyPDF2 calls