74 lines
2.9 KiB
Markdown
74 lines
2.9 KiB
Markdown
---
|
|
description: Fill PDF form fields interactively with live visual feedback
|
|
argument-hint: "[path-or-url]"
|
|
---
|
|
|
|
> If you need to check which tools are connected, see [CONNECTORS.md](../CONNECTORS.md).
|
|
|
|
# Fill Form
|
|
|
|
Help the user complete a fillable PDF form in the live viewer. Unlike
|
|
programmatic form tools, this gives the user **direct visual feedback**
|
|
on every field as it's filled, with easy undo/edit in the viewer.
|
|
|
|
## Why use this instead of programmatic form filling
|
|
|
|
- **Visual confirmation** — the user sees each value land in the right
|
|
box, not just a success message
|
|
- **Unnamed/unlabeled fields** — many real-world PDFs have fields with
|
|
machine names like `Text1`, `Field_7`, or no name at all. The label
|
|
("Date of Birth", "SSN") is printed **next to** the field on the
|
|
rendered page, not in the field metadata. Use `get_screenshot` to
|
|
see what each field actually is, then fill by name.
|
|
- **Easy correction** — the user can edit or clear any field directly
|
|
in the viewer, or ask you to `fill_form` again with new values
|
|
|
|
## Two approaches
|
|
|
|
### User-driven (simple, well-labeled forms)
|
|
|
|
Call `display_pdf` with `elicit_form_inputs: true`. The server detects
|
|
form fields and prompts the user to enter values **before** the viewer
|
|
opens. The filled PDF is then displayed.
|
|
|
|
### AI-assisted (complex forms, unnamed fields, or when you have context)
|
|
|
|
1. `display_pdf` (without elicit) — inspect returned `formFields`
|
|
(name, type, page, bounding box)
|
|
2. If field names are cryptic (`Text1`, `Field_7`), use `interact` →
|
|
`get_screenshot` of each page with fields. Look at the visual
|
|
labels next to each bounding box to understand what each field is.
|
|
3. For each field, either:
|
|
- Infer the value from conversation context (name, date, email)
|
|
- Ask the user, describing the field by its **visual** label
|
|
("the 'Date of Birth' box on page 1")
|
|
4. `interact` → `fill_form` with `fields: [{name, value}, ...]`
|
|
5. `interact` → `get_screenshot` of each filled page
|
|
6. Show the user, ask them to confirm or edit
|
|
|
|
## Example
|
|
|
|
> **User:** Help me fill out this W-9
|
|
>
|
|
> *You:* `display_pdf` → formFields: `f1_1`, `f1_2`, `f1_3`, `c1_1`, ...
|
|
> (cryptic names)
|
|
>
|
|
> *You:* `interact` → `get_screenshot` page 1 → see `f1_1` is next to
|
|
> "Name", `f1_2` is "Business name", `c1_1` is the "Individual" checkbox
|
|
>
|
|
> *You:* "I can see Name, Business name, Address, TIN, and tax
|
|
> classification checkboxes. I'll fill Name and Date from what I
|
|
> know — what's your TIN and business address?"
|
|
>
|
|
> *After answers:* `interact` → `fill_form` + `get_screenshot`
|
|
>
|
|
> *You:* "Here's the filled form [screenshot]. The signature line is
|
|
> still blank — want to add your signature with `/pdf-viewer:sign`?"
|
|
|
|
## Notes
|
|
|
|
- Signature fields are usually separate — fill text first, then hand
|
|
off to `/pdf-viewer:sign` for the image
|
|
- Checkbox/radio values are `true`/`false` or the option string
|
|
- The user can always drag & edit fields directly in the viewer
|