Estrarre testo PDF a colonne nell’ordine di lettura
Quattro blocchi mescolati di una pagina a due colonne tornano come sinistra primo, sinistra secondo, destra primo e destra secondo. Le colonne si riconoscono dai bordi sinistri simili e si leggono da sinistra a destra, dall'alto in basso. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
L’estrazione da un PDF può recuperare correttamente tutte le parole, ma consegnarle in una sequenza inutilizzabile. In una pagina a più colonne, un semplice ordinamento verticale alterna paragrafi scollegati. Questa capacità riceve blocchi e riquadri, riconosce quelli della stessa colonna, ordina le colonne da sinistra a destra e i blocchi dall’alto in basso. Il risultato contiene il testo ricostruito e l’intera geometria ordinata, affinché Lei possa verificarla o elaborarla ulteriormente.
Perché l’estrazione PDF perde l’ordine di lettura
Di norma un PDF descrive dove vengono disegnati i glifi, non la sequenza semantica in cui una persona dovrebbe leggerli. Le librerie possono quindi restituire i blocchi secondo il flusso degli oggetti, l’ordine di disegno o un ordinamento verticale globale che salta fra colonne. Un articolo su due colonne può diventare primo paragrafo sinistro, primo destro e poi secondo sinistro.
Fornisca ogni blocco con testo, coordinata sinistra, coordinata superiore, larghezza e altezza. Tutte le coordinate devono usare lo stesso sistema della pagina e `y` deve indicare il bordo superiore del blocco.
Come mantenere deterministica la rilevazione delle colonne
L’appartenenza a una colonna dipende dalla distanza fra le coordinate sinistre dei blocchi. Per impostazione predefinita, la tolleranza è un quarto della larghezza positiva mediana. Si adatta così alle scale comuni e ammette piccoli rientri o imprecisioni di estrazione.
Un valore minore separa margini appena diversi; uno maggiore unisce paragrafi rientrati o titoli alla colonna circostante. Dopo il raggruppamento, le colonne seguono la loro posizione sinistra media. I blocchi seguono posizione superiore, posizione sinistra e indice originale.
Questi criteri assicurano risultati stabili anche per riquadri con coordinate uguali. L’algoritmo non usa rete, casualità, ora corrente, OCR o modelli linguistici.
Usare il risultato ordinato nel flusso documentale
Conservi gli array strutturati per provenienza, evidenziazione, sovrapposizioni o debug; usi il testo unito per ricerca, sintesi, accessibilità o esportazione. Questa capacità non analizza file PDF e non esegue OCR: richiede i blocchi del Suo estrattore. Non riconosce inoltre tabelle, barre laterali, titoli estesi, note a piè pagina o continuazioni fra pagine.
Casi d'uso
Preparare articoli per la ricerca
Trasformi blocchi di riviste o newsletter a due colonne in testo coerente prima dell’indicizzazione.
Creare esportazioni accessibili
Produca una sequenza prevedibile per lettori di schermo o conversioni accessibili.
Verificare un flusso di estrazione
Conservi riquadri ordinati e indici di origine per spiegare la posizione di ogni paragrafo.
Domande frequenti
Questa capacità accetta un file PDF?
No. Riceve blocchi già estratti da una pagina PDF, completi dei rispettivi riquadri.
Come vengono rilevate le colonne?
Vengono raggruppati i blocchi con coordinate sinistre abbastanza vicine.
Quanto costa?
La stessa logica deterministica può funzionare anche nel browser come capacità di livello A.
Posso inviare più pagine insieme?
Invii una pagina alla volta. Le posizioni di pagine diverse non sono confrontabili se prima non le riporta lei a una scala comune, quindi mescolarle confonderebbe le colonne.
Riconosce tabelle, riquadri laterali o note a piè di pagina?
No. Ordina il testo solo per colonna e per altezza nella pagina. Tabelle, riquadri, titoli su più colonne e note a piè di pagina non vengono dedotti, quindi li segnali prima oppure regoli la tolleranza di colonna e controlli il risultato.
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/text-extract-column-order \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"blocks":[{"text":"Left heading","x":40,"y":40,"width":210,"height":20},{"text":"Right heading","x":320,"y":42,"width":210,"height":20},{"text":"Right body","x":322,"y":90,"width":208,"height":60},{"text":"Left body","x":42,"y":92,"width":208,"height":60}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/text-extract-column-order", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"blocks": [
{
"text": "Left heading",
"x": 40,
"y": 40,
"width": 210,
"height": 20
},
{
"text": "Right heading",
"x": 320,
"y": 42,
"width": 210,
"height": 20
},
{
"text": "Right body",
"x": 322,
"y": 90,
"width": 208,
"height": 60
},
{
"text": "Left body",
"x": 42,
"y": 92,
"width": 208,
"height": 60
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/text-extract-column-order",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"blocks": [
{
"text": "Left heading",
"x": 40,
"y": 40,
"width": 210,
"height": 20
},
{
"text": "Right heading",
"x": 320,
"y": 42,
"width": 210,
"height": 20
},
{
"text": "Right body",
"x": 322,
"y": 90,
"width": 208,
"height": 60
},
{
"text": "Left body",
"x": 42,
"y": 92,
"width": 208,
"height": 60
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/text-extract-column-order", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"blocks":[{"text":"Left heading","x":40,"y":40,"width":210,"height":20},{"text":"Right heading","x":320,"y":42,"width":210,"height":20},{"text":"Right body","x":322,"y":90,"width":208,"height":60},{"text":"Left body","x":42,"y":92,"width":208,"height":60}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"blocks":[{"text":"Left heading","x":40,"y":40,"width":210,"height":20},{"text":"Right heading","x":320,"y":42,"width":210,"height":20},{"text":"Right body","x":322,"y":90,"width":208,"height":60},{"text":"Left body","x":42,"y":92,"width":208,"height":60}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/text-extract-column-order", 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
{
"blocks": [
{
"text": "Left heading",
"x": 40,
"y": 40,
"width": 210,
"height": 20
},
{
"text": "Right heading",
"x": 320,
"y": 42,
"width": 210,
"height": 20
},
{
"text": "Right body",
"x": 322,
"y": 90,
"width": 208,
"height": 60
},
{
"text": "Left body",
"x": 42,
"y": 92,
"width": 208,
"height": 60
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.text_extract_column_order",
"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 | 10000 |
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
Perché l’estrazione PDF perde l’ordine di lettura
La capacità usa questa geometria per dedurre gruppi con margini sinistri simili, dispone le colonne da sinistra a destra e ordina i blocchi dall’alto in basso. `reading_order` conserva geometria e indice di origine, consentendo a Lei di controllare ogni posizione senza affidarsi a una trasformazione opaca.
Come mantenere deterministica la rilevazione delle colonne
Per geometrie insolite, specifichi `column_tolerance`.
Usare il risultato ordinato nel flusso documentale
La risposta offre più viste della stessa decisione. `columns` espone ogni colonna rilevata e i relativi blocchi ordinati. `reading_order` appiattisce le colonne nella sequenza esatta destinata al processo successivo. `text` unisce i contenuti con un separatore configurabile, che per impostazione predefinita è una riga vuota per preservare i paragrafi. Elabori una pagina PDF per richiesta, poiché coordinate di pagine diverse non sono confrontabili senza normalizzazione. Se tali strutture contano, le preclassifichi oppure regoli `column_tolerance` e controlli le assegnazioni restituite.
Domande tecniche
Che cosa accade se non vengono forniti blocchi?
La richiesta termina con `invalid_input`, perché senza blocchi non è possibile dedurre l’ordine di lettura.
Quale sistema di coordinate devo usare?
Va bene qualsiasi sistema coerente, purché `x` indichi la sinistra e `y` il bordo superiore di ogni blocco.