Generi un indice PDF a partire dai segnalibri
Trasformi la struttura dei segnalibri di un PDF in una pagina di indice uniforme, senza allineare manualmente titoli e numeri.
Esegui gratis nel browser
Fornisca i segnalibri nell’ordine del documento, indicando per ciascuno titolo, pagina di destinazione numerata da uno e livello gerarchico facoltativo. Il generatore conserva la gerarchia con i rientri, aggiunge linee puntinate leggibili e restituisce sia le voci strutturate sia il testo pronto all’uso. Le strutture vuote vengono rifiutate per rendere evidente un eventuale problema nella fase precedente.
Prepari la struttura dei segnalibri
Parta dalla struttura già estratta dal PDF. Ogni voce deve avere un titolo e un numero di pagina a base uno e deve comparire nello stesso ordine in cui il lettore la incontrerà. Aggiunga un livello quando il segnalibro dipende da un capitolo o da un’altra voce principale: il livello zero indica una destinazione principale, il livello uno applica un rientro e i livelli successivi lo aumentano. Il generatore non analizza né modifica i byte del PDF, non ricava i segnalibri dal testo e non cambia l’ordine della struttura. Questa separazione rende il risultato prevedibile e mette in evidenza i problemi nei dati. Gli spazi ripetuti e le interruzioni di riga nei titoli vengono normalizzati automaticamente. I titoli devono contenere testo visibile, le pagine devono essere numeri interi positivi e i livelli devono rientrare nell’intervallo documentato. Una struttura vuota genera un errore di input anziché una pagina bianca.
Comprenda la pagina generata
Il risultato comprende un’intestazione, un elenco normalizzato di voci, il numero totale e un campo pagina contenente il testo impaginato. Ogni riga inizia con il rientro derivato dal livello del segnalibro, prosegue con il titolo ripulito e termina con il numero di pagina. I puntini riempiono lo spazio intermedio e facilitano la consultazione. Il formattatore usa una larghezza obiettivo stabile, ma non tronca mai un titolo lungo solo per mantenere l’allineamento: conserva la dicitura completa e inserisce un separatore minimo. In questo modo tutela i nomi significativi dei capitoli e produce un risultato deterministico sia nel browser sia tramite API. Le voci strutturate riportano titolo, pagina, livello e riga finale, così Lei può usare direttamente la pagina fornita oppure applicare successivamente una tipografia personalizzata. L’intestazione predefinita è “Indice”, ma può sostituirla con un’altra dicitura non vuota su una sola riga.
Lo inserisca nel flusso PDF
Utilizzi il testo restituito come fonte per la fase che crea o inserisce una pagina fisica nel PDF. Questa capacità si concentra intenzionalmente sulla resa della struttura: non ricalcola le destinazioni dopo un inserimento, non sceglie i caratteri, non suddivide un indice lungo su più pagine e non modifica il file originale. Se l’inserimento di una nuova pagina sposta le destinazioni, corregga i valori prima di generare l’indice definitivo oppure durante l’assemblaggio. Tenere distinte queste responsabilità evita il comune errore di una pagina causato dall’aggiunta di elementi preliminari dopo la registrazione dei segnalibri. Per una pubblicazione ripetibile, estragga o mantenga la struttura, verifichi le pagine di destinazione, generi l’indice e passi il risultato alla fase di composizione. La stessa logica deterministica opera senza rete né stato memorizzato ed è adatta a controlli nel browser, pipeline di compilazione, portali documentali e test di regressione.
Casi d'uso
Crei un indice da segnalibri predisposti
Converta una struttura di capitoli ben curata in testo allineato prima di assemblare il PDF finale.
Automatizzi la pubblicazione
Generi una rappresentazione prevedibile dell’indice a ogni compilazione quando cambiano le destinazioni.
Verifichi le strutture estratte
Rifiuti subito un risultato vuoto invece di pubblicare silenziosamente una pagina di indice bianca.
Domande frequenti
Quanto costa?
L’API costa $0.002 per richiesta; la versione per browser può essere eseguita localmente in questa pagina.
Questa capacità legge il file PDF?
No. Riceve una struttura di segnalibri già disponibile e la rende come testo per l’indice.
Che cosa accade se la struttura è vuota?
La richiesta non riesce e segnala un input non valido, evitando che l’assenza di segnalibri produca una pagina ingannevole.
Come viene rappresentata la gerarchia?
Usi un livello a base zero per ogni voce. I livelli superiori aggiungono due spazi di rientro.
I titoli lunghi vengono troncati?
No. Il titolo normalizzato completo viene conservato, con almeno tre punti prima del numero di pagina.
L’inserimento aggiorna i numeri di pagina?
No. Fornisca le destinazioni finali o le corregga nella successiva fase di assemblaggio del PDF.
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/table-of-contents \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"outline":[{"title":"Introduction","page":1,"level":0},{"title":"Installation","page":4,"level":1}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/table-of-contents", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"outline": [
{
"title": "Introduction",
"page": 1,
"level": 0
},
{
"title": "Installation",
"page": 4,
"level": 1
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/table-of-contents",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"outline": [
{
"title": "Introduction",
"page": 1,
"level": 0
},
{
"title": "Installation",
"page": 4,
"level": 1
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/table-of-contents", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"outline":[{"title":"Introduction","page":1,"level":0},{"title":"Installation","page":4,"level":1}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"outline":[{"title":"Introduction","page":1,"level":0},{"title":"Installation","page":4,"level":1}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/table-of-contents", 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,
"level": 0
},
{
"title": "Installation",
"page": 4,
"level": 1
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.table_of_contents",
"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_items | 500 |
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. |