Aggiunga un segnalibro PDF e convalidi la pagina
In un PDF di 32 pagine dove Cover, Methods e Appendix puntano alle pagine 1, 8 e 27, un segnalibro Results per la pagina 18 finisce terzo. Inserisca pagine, segnalibri attuali, titolo e pagina per ottenere la struttura aggiornata. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Numero di pagine
- 32
- Titolo
- Results
- Pagina
- 18
- Quantità
- 4
- Indice inserito
- 2
Aggiunga una voce di navigazione affidabile alla struttura di un PDF senza dover indovinare se la destinazione esista o dove debba essere collocata. Indichi il numero di pagine del documento, i segnalibri attuali di primo livello, un titolo e una pagina di destinazione numerata da uno. La capacità convalida la nuova destinazione rispetto all’intervallo effettivo, controlla la struttura esistente e inserisce il segnalibro in ordine di pagina. Restituisce una nuova struttura organizzata e l’indice di inserimento, pronti per essere serializzati in una successiva fase di scrittura del PDF o verificati in un flusso documentale automatizzato.
Descriva il PDF e il segnalibro da aggiungere
Inizi dal numero totale di pagine del PDF, perché questo valore definisce tutte le destinazioni valide. Fornisca quindi la struttura attuale di primo livello come un array di record con titolo e pagina, nello stesso ordine usato dal documento. La numerazione parte da uno: pagina 1 indica la prima pagina visibile del PDF, non uno scostamento interno pari a zero.
Infine, specifichi il titolo e la pagina di destinazione del segnalibro da aggiungere. Gli spazi alle estremità del titolo vengono rimossi, così quelli introdotti per errore in un modulo o foglio di calcolo non compaiono nell’etichetta visibile. La capacità opera sulla rappresentazione della struttura e non decodifica né riscrive i byte binari del PDF.
Questa separazione la rende adatta dopo la lettura del file da parte di un parser o prima che una libreria scriva la struttura aggiornata. È ammessa una struttura vuota, quindi lo stesso formato consente di creare il primo segnalibro o ampliare un indice esistente.
Convalidi i limiti e mantenga un ordine prevedibile
Un segnalibro è utile soltanto se la destinazione può esistere. Pagina zero, numeri negativi, frazioni e valori oltre l’ultima pagina restituiscono un errore di input non valido con l’intervallo accettato. Anche i segnalibri esistenti vengono controllati secondo la stessa regola, evitando che una modifica apparentemente riuscita conservi destinazioni interrotte.
I loro titoli devono contenere testo visibile. La struttura fornita deve essere ordinata per pagina crescente; accettare un elenco disordinato renderebbe ambigua la posizione corretta e potrebbe riorganizzare in silenzio la navigazione voluta dall’autore. Dopo la convalida, l’algoritmo raggiunge il primo segnalibro di una pagina successiva e inserisce il nuovo in quel punto.
Se più segnalibri puntano già alla stessa pagina, la nuova voce viene collocata dopo di essi, preservandone l’ordine relativo. L’array di input non viene modificato.
Applichi la struttura restituita al flusso documentale
I dati restituiti non dipendono da una libreria: un’applicazione può associare ogni titolo e pagina numerata da uno agli oggetti di destinazione richiesti dal writer scelto. Questa capacità non modifica i byte del PDF, non deduce intestazioni dal testo, non crea elementi annidati e non ripara una struttura disordinata. Queste attività richiedono analisi, decisioni gerarchiche o serializzazione esterne.
Separare l’inserimento rende più chiari gli errori e impedisce di scrivere documenti con navigazione non valida. Conservi il numero di pagine della stessa versione che verrà infine scritta.
Casi d'uso
Aggiungere un capitolo appena scritto
Inserisca l’etichetta del capitolo nella pagina iniziale verificata prima che l’editor scriva il PDF aggiornato.
Automatizzare la navigazione dei report
Aggiunga un segnalibro per un’appendice o un riepilogo generato e rifiuti i modelli che calcolano una destinazione impossibile.
Esaminare le modifiche alla struttura
Mostri l’indice di inserimento e la struttura aggiornata in un’interfaccia di approvazione prima di cambiare il file originale.
Domande frequenti
Questa capacità modifica direttamente il file PDF?
No. Restituisce una rappresentazione aggiornata della struttura che un writer PDF o un flusso documentale potrà applicare.
Dove viene inserito il segnalibro se un altro usa la stessa pagina?
Viene collocato dopo tutti i segnalibri esistenti su quella pagina, conservando l’ordine fornito.
È possibile aggiungere segnalibri annidati?
No. Questa operazione mirata aggiunge un segnalibro di primo livello a una struttura ordinata per pagina.
Posso aggiungere il primo segnalibro a un PDF che non ne ha?
Sì. Una struttura vuota è valida, quindi la stessa operazione serve a creare il primo segnalibro o ad ampliare un indice lungo, senza cambiare modalità.
Che succede se i segnalibri esistenti non seguono l'ordine delle pagine?
Vengono rifiutati. I segnalibri esistenti devono andare dalla pagina più bassa alla più alta; accettare un elenco disordinato renderebbe ambigua la posizione giusta e potrebbe riordinare in silenzio la navigazione voluta dall'autore.
Strumenti correlati
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-add \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"page_count":24,"outline":[{"title":"Introduction","page":1},{"title":"Results","page":12}],"title":"Methods","page":7}'const res = await fetch("https://api.kit.forhosting.com/pdf/bookmarks-add", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"page_count": 24,
"outline": [
{
"title": "Introduction",
"page": 1
},
{
"title": "Results",
"page": 12
}
],
"title": "Methods",
"page": 7
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/bookmarks-add",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"page_count": 24,
"outline": [
{
"title": "Introduction",
"page": 1
},
{
"title": "Results",
"page": 12
}
],
"title": "Methods",
"page": 7
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/bookmarks-add", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"page_count":24,"outline":[{"title":"Introduction","page":1},{"title":"Results","page":12}],"title":"Methods","page":7}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"page_count":24,"outline":[{"title":"Introduction","page":1},{"title":"Results","page":12}],"title":"Methods","page":7}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/bookmarks-add", 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
{
"page_count": 24,
"outline": [
{
"title": "Introduction",
"page": 1
},
{
"title": "Results",
"page": 12
}
],
"title": "Methods",
"page": 7
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.bookmarks_add",
"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. |
Note tecniche
Convalidi i limiti e mantenga un ordine prevedibile
La pagina richiesta deve quindi essere un intero compreso tra 1 e page_count, estremi inclusi. Senza rete, date, identificatori casuali o confronti locali, lo stesso JSON produce sempre lo stesso risultato.
Applichi la struttura restituita al flusso documentale
La risposta include page_count, il conteggio finale dei segnalibri, un inserted_index con base zero e l’intera struttura aggiornata. Usi inserted_index se un’interfaccia di revisione deve evidenziare la riga appena creata, oppure lo ignori e passi la struttura alla fase successiva. Lo strumento nel browser permette a un redattore di verificare rapidamente una destinazione prima della pubblicazione, mentre una chiamata API a $0.002 è adatta a flussi ripetibili per note legali, appendici, note di rilascio o capitoli generati.
Domande tecniche
Come vengono numerate le pagine?
La numerazione parte da uno: 1 è la prima pagina e page_count è l’ultima destinazione valida.
Che cosa accade se la pagina è fuori intervallo?
La richiesta non riesce, restituisce invalid_input e indica l’intervallo valido.
Quanto costa una richiesta API?
Una richiesta API riuscita costa $0.002; la stessa operazione deterministica è gratuita nel browser.