
Give your coding agent a repeatable playbook and Python scripts to fill PDF forms, extract tables and text, and merge, split, or create PDFs locally.
Install
npx skills add https://github.com/tfriedel/claude-office-skills --skill pdfWhat is this skill?
- Mandatory branch: run check_fillable_fields first, then follow fillable (extract_form_field_info → fill_fillable_fields)
- Bundled scripts for merge/split/rotate, watermark, password protect, OCR via pytesseract, and ReportLab or pandoc PDF cr
- Table extraction documents five approaches: pdfplumber (default and layout), pdfminer.six, Camelot lattice/stream, and t
- Form filling covers text, checkbox, radio_group, and choice fields with JSON-driven updates and visual validation screen
- Explicit rules: never use Unicode subscripts in ReportLab, validate table extraction before claiming success, prefer Lib
Adoption & trust: 585 installs on skills.sh; 725 GitHub stars; 2/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Recommended Skills
Journey fit
Document-heavy outputs land most often while you are building specs, contracts, and downloadable assets, so build/docs is the canonical shelf even though PDF tasks recur elsewhere. The skill centers on producing and manipulating document deliverables (forms, reports, ebooks)—work that maps directly to the docs subphase rather than app code or infra.
Common Questions / FAQ
Is Pdf safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Pdf
**CRITICAL: You MUST complete these steps in order. Do not skip ahead to writing code.** If you need to fill out a PDF form, first check to see if the PDF has fillable form fields. Run this script from this file's directory: `python scripts/check_fillable_fields <file.pdf>`, and depending on the result go to either the "Fillable fields" or "Non-fillable fields" and follow those instructions. # Fillable fields If the PDF has fillable form fields: - Run this script from this file's directory: `python scripts/extract_form_field_info.py <input.pdf> <field_info.json>`. It will create a JSON file with a list of fields in this format: ``` [ { "field_id": (unique ID for the field), "page": (page number, 1-based), "rect": ([left, bottom, right, top] bounding box in PDF coordinates, y=0 is the bottom of the page), "type": ("text", "checkbox", "radio_group", or "choice"), }, // Checkboxes have "checked_value" and "unchecked_value" properties: { "field_id": (unique ID for the field), "page": (page number, 1-based), "type": "checkbox", "checked_value": (Set the field to this value to check the checkbox), "unchecked_value": (Set the field to this value to uncheck the checkbox), }, // Radio groups have a "radio_options" list with the possible choices. { "field_id": (unique ID for the field), "page": (page number, 1-based), "type": "radio_group", "radio_options": [ { "value": (set the field to this value to select this radio option), "rect": (bounding box for the radio button for this option) }, // Other radio options ] }, // Multiple choice fields have a "choice_options" list with the possible choices: { "field_id": (unique ID for the field), "page": (page number, 1-based), "type": "choice", "choice_options": [ { "value": (set the field to this value to select this option), "text": (display text of the option) }, // Other choice options ], } ] ``` - Convert the PDF to PNGs (one image for each page) with this script (run from this file's directory): `python scripts/convert_pdf_to_images.py <file.pdf> <output_directory>` Then analyze the images to determine the purpose of each form field (make sure to convert the bounding box PDF coordinates to image coordinates). - Create a `field_values.json` file in this format with the values to be entered for each field: ``` [ { "field_id": "last_name", // Must match the field_id from `extract_form_field_info.py` "description": "The user's last name", "page": 1, // Must match the "page" value in field_info.json "value": "Simpson" }, { "field_id": "Checkbox12", "description": "Checkbox to be checked if the user is 18 or over", "page": 1, "value": "/On" // If this is a checkbox, use its "checked_value" value to check it. If it's a radio button group, use one of the "value" values in "radio_options". }, // more fields ] ``` - Run the `fill_fillable_fields.py` script from this file's directory to create a filled-in PDF: `python scripts/fill_fillable_fields.py <input pdf> <field_values.json> <output pdf>` This script will verify that the field IDs and values you provide are valid; if it prints error messages, correct the appropriate fields and try again. # Non-fillable fields If the PDF doesn't have fillable form fields, you'll need to visually determine where the data should be added and create text annotations. Follow the below steps *exactly*. You MUST perform all of these steps to ensure that the the form is accurately completed. Details for each step are below. - Convert the PDF to PNG images and determine field bounding boxes. - Create a JSON file with field information and validation images showing the bounding boxes. - Validate the the bounding boxes. - Use the bounding boxes to fill in the form. ## Step 1: Visual Analysis (REQUIRED) - Convert the PDF to PNG images. Run this script from this f