Nel README nascono gli argomenti Ufficio e Second brain (presenti in entrambi i gruppi, anche se vuoti): pdf, pptx e xlsx vanno sotto Ufficio, claude-obsidian, obsidian-skills e obsidian-wiki sotto Second brain. Conoscenza e note resta per graphify; ecc si affianca a superpowers. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
172 lines
9.3 KiB
Markdown
172 lines
9.3 KiB
Markdown
# pdf
|
||
|
||
- **Autore:** Anthropic
|
||
- **Repository:** [anthropics/skills](https://github.com/anthropics/skills), la raccolta di skill di esempio di Anthropic
|
||
- **Sorgente:** [skills/pdf/SKILL.md](https://github.com/anthropics/skills/blob/main/skills/pdf/SKILL.md), con le guide [forms.md](https://github.com/anthropics/skills/blob/main/skills/pdf/forms.md) e [reference.md](https://github.com/anthropics/skills/blob/main/skills/pdf/reference.md) e una cartella `scripts/`
|
||
- **Pagina su skills.sh:** [anthropics/skills/pdf](https://skills.sh/anthropics/skills/pdf)
|
||
- **Diffusione (ottobre 2026):** circa 219.700 installazioni (su skills.sh dal 20 gennaio 2026); il repository ha circa 184.900 stelle e 21.900 fork su GitHub
|
||
- **Controlli di sicurezza su skills.sh:** Gen Agent Trust Hub e Socket superati; Snyk segnala un avviso (la pagina non spiega il motivo)
|
||
- **Licenza:** proprietaria (termini in `LICENSE.txt`). Il README del repository precisa che le skill per i documenti (`docx`, `pdf`, `pptx`, `xlsx`) sono *source-available*, non open source, e che le skill del repository sono dimostrative: conviene provarle bene prima di affidarsi a loro.
|
||
|
||
## A cosa serve
|
||
|
||
Dà all'agente un metodo per lavorare sui file PDF: leggerli, unirli e dividerli, compilarli, crearne di nuovi e ripulire quelli scansionati. Invece di improvvisare ogni volta con la libreria che gli viene in mente, sceglie lo strumento indicato per ciascun compito.
|
||
|
||
## Cosa fa
|
||
|
||
### Quando si attiva
|
||
|
||
Ogni volta che la richiesta riguarda un file PDF o la sua creazione:
|
||
|
||
- leggere o estrarre testo e tabelle, leggere i metadati;
|
||
- unire più PDF in uno, dividerne uno in più file, ruotare le pagine;
|
||
- aggiungere una filigrana;
|
||
- creare un PDF nuovo;
|
||
- compilare un modulo;
|
||
- proteggere con password o togliere la password;
|
||
- estrarre le immagini incorporate;
|
||
- fare l'OCR di un PDF scansionato per renderlo ricercabile.
|
||
|
||
### Come lavora
|
||
|
||
L'agente sceglie lo strumento in base al compito:
|
||
|
||
| Compito | Strumento | Come |
|
||
|---|---|---|
|
||
| Unire | pypdf | aggiunge le pagine di ogni file a un unico file di uscita |
|
||
| Dividere | pypdf | scrive una pagina per file |
|
||
| Estrarre il testo | pdfplumber | testo pagina per pagina, con il layout |
|
||
| Estrarre le tabelle | pdfplumber | tabelle pagina per pagina; si possono convertire in pandas ed esportare in Excel |
|
||
| Creare PDF | reportlab | `Canvas` per impaginazioni semplici, `Platypus` per documenti di più pagine con testo che scorre |
|
||
| Unire da riga di comando | qpdf | opzione `--empty --pages` |
|
||
| OCR | pytesseract | prima converte le pagine in immagini con pdf2image |
|
||
| Compilare moduli | pdf-lib o pypdf | segue `forms.md` |
|
||
|
||
Esempio di unione, dalla guida:
|
||
|
||
```python
|
||
from pypdf import PdfWriter, PdfReader
|
||
|
||
writer = PdfWriter()
|
||
for pdf_file in ["doc1.pdf", "doc2.pdf", "doc3.pdf"]:
|
||
reader = PdfReader(pdf_file)
|
||
for page in reader.pages:
|
||
writer.add_page(page)
|
||
|
||
with open("merged.pdf", "wb") as output:
|
||
writer.write(output)
|
||
```
|
||
|
||
Altre operazioni previste:
|
||
|
||
- **Strumenti da riga di comando:** `pdftotext` (poppler-utils) per estrarre il testo, anche con il layout o solo un intervallo di pagine; `qpdf` per unire, dividere per intervallo, ruotare pagine e togliere una password; `pdftk` se è installato.
|
||
- **Filigrane:** carica una pagina di filigrana e la sovrappone a ogni pagina.
|
||
- **Immagini:** `pdfimages` esporta le immagini incorporate.
|
||
- **Password:** copia le pagine in un nuovo file e lo cifra con password utente e proprietario.
|
||
- **Pedici e apici:** nei PDF creati con reportlab non usa i caratteri Unicode per pedici e apici, perché i font integrati non li hanno e compaiono come quadrati neri; usa i marcatori `<sub>` e `<super>` dentro i `Paragraph`.
|
||
- **Casi avanzati:** `reference.md` copre pypdfium2, pdf-lib per JavaScript e la risoluzione dei problemi. Non l'ho letto per intero.
|
||
|
||
### Compilare i moduli
|
||
|
||
Il flusso è in `forms.md` e dipende dal tipo di PDF. Il primo passo è controllare se il modulo ha campi compilabili (`scripts/check_fillable_fields.py`).
|
||
|
||
**PDF con campi compilabili:**
|
||
|
||
1. `extract_form_field_info.py` elenca i campi (identificatore, pagina, posizione, tipo: testo, casella, gruppo di opzioni, scelta).
|
||
2. `convert_pdf_to_images.py` crea un'immagine per pagina, per capire a cosa serve ogni campo.
|
||
3. Si scrive `field_values.json` con i valori da inserire.
|
||
4. `fill_fillable_fields.py` compila il modulo; se segnala errori, si correggono e si rilancia.
|
||
|
||
**PDF senza campi compilabili:**
|
||
|
||
1. `extract_form_structure.py` estrae etichette, linee, caselle e righe.
|
||
2. Due approcci: *strutturale* (preferito, se ci sono etichette di testo utili) o *visivo* (per le scansioni, con ingrandimenti fatti con ImageMagick); si possono combinare.
|
||
3. `check_bounding_boxes.py` valida i riquadri, perché riquadri sovrapposti o troppo piccoli rovinano il testo.
|
||
4. `fill_pdf_form_with_annotations.py` scrive il testo come annotazioni.
|
||
5. Si controlla il risultato rendendolo di nuovo in immagini.
|
||
|
||
Avvertenze della guida: i passi vanno fatti in ordine; identificatori e valori devono coincidere con quelli estratti; l'estrazione strutturale riconosce solo le caselle quadrate; i sistemi di coordinate dei campi compilabili e dell'approccio strutturale hanno origini diverse, e mescolarli sposta il testo; il risultato va sempre controllato a vista.
|
||
|
||
### Da sapere
|
||
|
||
- **Requisiti:** librerie Python pypdf, pdfplumber, reportlab, pandas (per esportare le tabelle), pytesseract e pdf2image (per l'OCR); strumenti poppler-utils e qpdf, pdftk facoltativo; ImageMagick per l'approccio visivo dei moduli. Per l'OCR serve anche il programma Tesseract (installato a parte; la guida non lo spiega).
|
||
- **Script eseguiti:** per i moduli l'agente lancia gli script della cartella `scripts/` (otto file Python). Non li ho letti uno per uno.
|
||
- **Nessun accesso esterno** dichiarato: lavora sui file locali.
|
||
- **Limite di fedeltà:** estrazione e OCR non sono perfette su layout complessi o scansioni di bassa qualità; l'autore invita a verificare il risultato.
|
||
|
||
## Installazione
|
||
|
||
### Claude Code e Codex
|
||
|
||
```bash
|
||
npx skills add anthropics/skills --skill pdf -g -a codex -a claude-code
|
||
```
|
||
|
||
| Opzione | Significato |
|
||
|---|---|
|
||
| `--skill pdf` | installa solo questa skill del repository |
|
||
| `-g` | installazione globale (`~/.claude/skills/`, `~/.codex/skills/`); senza, solo nel progetto corrente (`.claude/skills/`, `.agents/skills/`) |
|
||
| `-a <agente>` | agente di destinazione, ripetibile (`claude-code`, `codex`, ...) |
|
||
| `-y` | salta le domande di conferma |
|
||
| `--copy` | copia i file invece di creare collegamenti simbolici |
|
||
|
||
Non ho trovato il comando esatto sulla pagina di skills.sh: è la forma standard dello strumento `skills`, la stessa usata per le altre schede.
|
||
|
||
Alternativa solo per Claude Code, dal marketplace di Anthropic (installa tutte le skill per i documenti: `docx`, `pdf`, `pptx`, `xlsx`):
|
||
|
||
```text
|
||
/plugin marketplace add anthropics/skills
|
||
/plugin install document-skills@anthropic-agent-skills
|
||
```
|
||
|
||
Dopo l'installazione riavvia la sessione. Claude Code la usa da solo quando la richiesta è pertinente, oppure puoi citarla ("usa la skill PDF per estrarre i campi del modulo `percorso/file.pdf`"). In Codex la richiami con `$pdf` o la vedi con `/skills`.
|
||
|
||
Gestione:
|
||
|
||
```bash
|
||
npx skills list -g # skill installate
|
||
npx skills update pdf # aggiornamento
|
||
npx skills remove pdf # rimozione
|
||
```
|
||
|
||
```text
|
||
/plugin uninstall document-skills@anthropic-agent-skills # rimozione del plugin
|
||
```
|
||
|
||
### App desktop di Claude e ChatGPT
|
||
|
||
Queste app richiedono di caricare la skill come ZIP. Preparalo così:
|
||
|
||
```bash
|
||
git clone --depth 1 https://github.com/anthropics/skills.git
|
||
cd skills/skills && zip -r ~/pdf.zip pdf
|
||
```
|
||
|
||
Lo ZIP deve contenere la cartella `pdf/` con dentro `SKILL.md` (e gli altri file della cartella: `forms.md`, `reference.md`, `scripts/`).
|
||
|
||
**Claude (desktop o web)**
|
||
|
||
1. Attiva l'esecuzione del codice in **Settings → Capabilities**.
|
||
2. Vai in **Customize → Skills → + → Create skill → Upload a skill** e scegli lo ZIP.
|
||
3. Attiva l'interruttore della skill.
|
||
|
||
**ChatGPT (desktop o web)**
|
||
|
||
1. Vai in **Skills** nella barra laterale, poi **Create → Upload from your computer**, e scegli lo ZIP o la cartella.
|
||
2. Attendi l'analisi di sicurezza di ChatGPT.
|
||
3. Richiamala con `@` nella chat.
|
||
|
||
Le skill personali caricate su desktop e web non si sincronizzano: vanno caricate su ciascuna.
|
||
|
||
> **Limite:** nelle app di chat la skill gira in un ambiente isolato con esecuzione del codice. Funziona solo se lì sono disponibili le librerie e gli strumenti elencati sopra (non l'ho verificato), e legge solo i file che alleghi alla conversazione. Il README del repository dice che le skill di esempio sono già disponibili sui piani a pagamento di Claude.ai, ma non specifica se `pdf` sia tra queste.
|
||
|
||
## Fonti
|
||
|
||
- [README di anthropics/skills](https://github.com/anthropics/skills)
|
||
- [SKILL.md di pdf](https://github.com/anthropics/skills/blob/main/skills/pdf/SKILL.md)
|
||
- [forms.md di pdf](https://github.com/anthropics/skills/blob/main/skills/pdf/forms.md)
|
||
- [Cartella skills/pdf](https://github.com/anthropics/skills/tree/main/skills/pdf) e [scripts/](https://github.com/anthropics/skills/tree/main/skills/pdf/scripts)
|
||
- [pdf su skills.sh](https://skills.sh/anthropics/skills/pdf)
|
||
- [Use skills in Claude – Claude Help Center](https://support.claude.com/en/articles/12512180-use-skills-in-claude)
|
||
- [Skills in ChatGPT – OpenAI Help Center](https://help.openai.com/en/articles/20001066-skills-in-chatgpt)
|