Elenchi i segnalibri PDF con pagine e livelli
Trasformi l’albero della struttura di un PDF in un elenco di segnalibri pulito e ordinato, facile da controllare, verificare, esportare o inserire in un altro flusso.
Esegui gratis nel browser
Funziona nel tuo browser: gratis, senza registrazione, i file non escono dal tuo dispositivo.
Ogni elemento restituito contiene il titolo, il livello gerarchico numerato da uno e la pagina di destinazione, anch’essa numerata da uno. La visita conserva l’ordine della struttura e colloca ogni figlio subito dopo il genitore. Le strutture vuote vengono rifiutate esplicitamente, quindi l’assenza di un sommario non può essere scambiata per un risultato riuscito ma privo di dati.
Converta una struttura annidata in righe utili
I segnalibri PDF sono normalmente rappresentati come un albero. I capitoli occupano il livello superiore, le sezioni si trovano sotto i capitoli e i titoli minori possono proseguire per altri livelli. Questa forma è comoda in un lettore, ma diventa scomoda quando Lei deve controllare la navigazione, creare un rapporto, confrontare due edizioni o trasferire i dati in un foglio di calcolo. La capacità visita l’albero in preordine: emette prima il genitore, poi tutti i discendenti nella sequenza originale e infine passa al fratello successivo. Ogni riga contiene titolo, livello e pagina di destinazione. Livelli e pagine iniziano da uno. L’elenco rimane fedele all’ordine di lettura visibile eliminando però l’annidamento ricorsivo. La capacità non apre né modifica il PDF; riceve la struttura già prodotta da un analizzatore o da una fase precedente di elaborazione.
Comprenda la convalida e l’ordine deterministico
Ogni segnalibro deve essere un oggetto con titolo non vuoto e pagina espressa come intero positivo. L’eventuale raccolta di figli deve essere un array di altri segnalibri. Gli spazi alle estremità del titolo vengono rimossi, mentre il testo interno resta invariato. L’algoritmo non ordina mai per alfabeto o per pagina, perché potrebbe alterare l’intenzione dell’autore. Segue invece la sequenza ricevuta e ricava il livello dalla profondità. Lo stesso input produce sempre lo stesso output, senza rete, orari, identificatori casuali o dipendenze dall’ambiente. Una struttura principale vuota genera un errore di input non valido. In questo modo un’automazione può fermarsi quando il documento non contiene segnalibri, anziché pubblicare un indice vuoto apparentemente valido. Vengono rifiutati anche figli malformati, titoli mancanti, pagine non valide, profondità eccessiva, cicli e alberi troppo grandi.
Utilizzi l’elenco nei flussi documentali
Un elenco piatto di segnalibri crea un confine semplice tra l’analisi del PDF e la logica successiva. Lei può visualizzarlo come sommario, controllare che ogni capitolo previsto sia presente, confrontare titoli e destinazioni fra versioni oppure associare pagine e sezioni per un’estrazione successiva. La risposta contiene il conteggio totale e i record ordinati, così un sistema può verificare la quantità prima di elaborare i singoli elementi. Il livello consente di ricostruire il rientro o persino l’albero, mentre la pagina agevola navigazione e calcolo degli intervalli. La capacità descrive soltanto la struttura ricevuta: non verifica che le destinazioni esistano in uno specifico PDF, non deduce titoli dal testo e non ripara collegamenti interrotti. Se l’analizzatore fornisce il numero di pagine, convalidi separatamente i limiti. L’esecuzione interattiva nel browser è gratuita; ogni richiesta API automatizzata costa $0.002 e usa la medesima logica.
Casi d'uso
Controllare la navigazione del documento
Esamini ogni segnalibro nell’ordine visibile e individui capitoli mancanti, gerarchie inattese o destinazioni errate prima della pubblicazione.
Creare un sommario
Converta l’output dell’analizzatore in righe rientrabili per livello e collegabili alle rispettive pagine.
Confrontare edizioni PDF
Produca inventari stabili di due versioni e confronti titoli, gerarchia, ordine e pagine di destinazione.
Domande frequenti
Questa capacità legge direttamente il file PDF?
No. Riceve una struttura prodotta da un analizzatore PDF e trasforma l’albero in record di segnalibri.
Quale ordine viene usato nel risultato?
Usa la visita in preordine: ogni genitore precede i figli e i fratelli mantengono la sequenza documentale fornita.
Come vengono numerati i livelli?
I segnalibri superiori hanno livello 1, i loro figli livello 2 e ogni ulteriore profondità aumenta il livello di uno.
Che cosa accade se la struttura è vuota?
La richiesta fallisce con un errore di input non valido, evitando di confondere l’assenza di segnalibri con un rapporto vuoto valido.
Viene controllata l’esistenza delle pagine?
Ogni destinazione deve essere un intero positivo, ma il confronto con il numero di pagine richiede una verifica separata.
Quanto costa una richiesta API?
Una richiesta API costa $0.002. Lei può anche eseguire gratuitamente nel browser la stessa logica deterministica.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/pdf/bookmarks-list \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"outline":[{"title":"Introduction","page":1,"children":[{"title":"Background","page":3}]},{"title":"Methods","page":8}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/bookmarks-list", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"outline": [
{
"title": "Introduction",
"page": 1,
"children": [
{
"title": "Background",
"page": 3
}
]
},
{
"title": "Methods",
"page": 8
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/bookmarks-list",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"outline": [
{
"title": "Introduction",
"page": 1,
"children": [
{
"title": "Background",
"page": 3
}
]
},
{
"title": "Methods",
"page": 8
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/bookmarks-list", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"outline":[{"title":"Introduction","page":1,"children":[{"title":"Background","page":3}]},{"title":"Methods","page":8}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"outline":[{"title":"Introduction","page":1,"children":[{"title":"Background","page":3}]},{"title":"Methods","page":8}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/bookmarks-list", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"outline": [
{
"title": "Introduction",
"page": 1,
"children": [
{
"title": "Background",
"page": 3
}
]
},
{
"title": "Methods",
"page": 8
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.bookmarks_list",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_mb | 25 |
max_pages | 200 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |