Skip to content
Back to skills

Pdf

ASecurity

Read, extract text, fill forms, and overlay text on PDF files using pdftk and pdfjs-dist. Use when working with PDFs — extracting content, filling fillable form fields, or adding text to non-fillable PDFs via coordinate-based overlays. Handles insurance forms, applications, contracts, and any PDF document processing.

  • 71 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 29, 2026
businessgobashnode

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned May 29, 2026

npx -y skills add FDU-INS/Insurance-Skills --skill pdf --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pdf?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pdf
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/fdu-ins-pdf/badge)](https://www.skillsdirectory.com/skills/fdu-ins-pdf)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: pdf
description: Read, extract text, fill forms, and overlay text on PDF files using pdftk and pdfjs-dist. Use when working with PDFs — extracting content, filling fillable form fields, or adding text to non-fillable PDFs via coordinate-based overlays. Handles insurance forms, applications, contracts, and any PDF document processing.
---

# PDF Skill

## Dependencies

- `pdftk` — PDF toolkit for form operations, stamping, merging, splitting
- `pdfjs-dist` — Mozilla's PDF.js for text extraction (npm, already installed)
- `google-chrome` — Available at `/usr/bin/google-chrome` for generating overlay PDFs from HTML

> **Note:** `pdfjs-dist` text extraction returns empty for scanned/image-based PDFs. For those, burst into individual pages with `pdftk` and view in the browser to read content visually.

## Quick Reference

### Extract text from a PDF
```bash
node /home/jenn/clawd/skills/pdf/scripts/pdf-extract.js <file.pdf>
```

### List fillable form fields
```bash
pdftk <file.pdf> dump_data_fields
```

### Fill a fillable PDF form
Create an FDF file with field values, then:
```bash
pdftk <form.pdf> fill_form <data.fdf> output <filled.pdf> flatten
```

To generate a blank FDF template from a form:
```bash
pdftk <form.pdf> generate_fdf output <template.fdf>
```

Edit the FDF template, setting `/V` values for each field. For text fields use `/V (value)`. For buttons/checkboxes use `/V /OptionName`. For Choice/dropdown fields use `/V (OptionText)` matching one of the `FieldStateOption` values.

> **Important:** Always use `generate_fdf` first to get the template, then edit the copy. Hand-crafted FDF files may fail to parse — pdftk is picky about the format (needs the binary header bytes from the template).

### Overlay text on non-fillable PDFs
For PDFs without form fields, generate an HTML overlay and stamp it:

1. Create an HTML file with absolutely positioned text matching PDF coordinates
2. Convert to PDF using Chrome: `google-chrome --headless --disable-gpu --print-to-pdf=overlay.pdf --no-margins overlay.html`
3. Stamp onto original: `pdftk original.pdf multistamp overlay.pdf output filled.pdf`

Use `scripts/pdf-overlay.js` to generate the overlay HTML:
```bash
node /home/jenn/clawd/skills/pdf/scripts/pdf-overlay.js <config.json> <output.html>
```

The config.json format (`totalPages` must match the source PDF page count for `multistamp` to work correctly):
```json
{
  "pageWidth": 612,
  "pageHeight": 792,
  "totalPages": 7,
  "pages": [
    {
      "page": 1,
      "fields": [
        {"x": 200, "y": 150, "text": "Boardwise", "fontSize": 10},
        {"x": 200, "y": 175, "text": "123 Main St", "fontSize": 10}
      ]
    }
  ]
}
```

Coordinates are in PDF points (72 points = 1 inch). Origin is top-left.

To find the right coordinates, screenshot the PDF page and estimate positions based on the layout, or use `scripts/pdf-coords.js` to get text positions from the existing PDF as reference points.

### Reading scanned/image PDFs
When `pdf-extract.js` returns empty pages, the PDF contains scanned images, not text. To read:

1. Burst into individual pages: `pdftk input.pdf burst output page_%02d.pdf`
2. Open each page in the browser (openclaw profile) and screenshot to read visually
3. Zoom out with `document.body.style.zoom = '0.35'` to see full page in Chrome PDF viewer

### Fillable form workflow (end-to-end)

```bash
# 1. Check if form has fields
pdftk form.pdf dump_data_fields

# 2. Generate FDF template
pdftk form.pdf generate_fdf output template.fdf

# 3. Copy and edit the template with values
cp template.fdf filled.fdf
# Edit filled.fdf — replace /V () with /V (Your Value) for text fields
# Replace /V /Off with /V /OptionName for buttons/checkboxes

# 4. Fill the form
pdftk form.pdf fill_form filled.fdf output filled.pdf

# 5. Optionally flatten (makes fields non-editable)
pdftk form.pdf fill_form filled.fdf output filled.pdf flatten
```

### Other pdftk operations
```bash
# Merge PDFs
pdftk a.pdf b.pdf cat output merged.pdf

# Split pages
pdftk input.pdf cat 1-3 output pages1-3.pdf

# Rotate pages
pdftk input.pdf cat 1-endeast output rotated.pdf

# Get PDF info
pdftk input.pdf dump_data

# Add password
pdftk input.pdf output protected.pdf owner_pw secret

# Remove password
pdftk protected.pdf input_pw secret output unlocked.pdf

# Stamp (overlay on every page)
pdftk input.pdf stamp overlay.pdf output stamped.pdf

# Multistamp (page-matched overlay)
pdftk input.pdf multistamp overlay.pdf output stamped.pdf

# Burst into individual pages
pdftk input.pdf burst output page_%02d.pdf
```

Files in this skill

  • SKILL.md4.5 KB
  • package-lock.json10.5 KB
  • package.json297 B
  • scripts/pdf-coords.js1.4 KB
  • scripts/pdf-extract.js716 B
  • scripts/pdf-fill-overlay.js2.1 KB
  • scripts/pdf-fill-tool.py1.7 KB
  • scripts/pdf-overlay.js2.3 KB
  • tools.yml2.1 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.