Confronti il testo di due PDF e trovi le pagine modificate
Confronti due PDF senza passare continuamente da una finestra all’altra né affidarsi a un controllo visivo.
Esegui gratis nel browser
Fornisca il testo estratto da ogni documento come una stringa per pagina: lo strumento indica esattamente quali numeri di pagina differiscono. Ogni pagina modificata riceve una sintesi breve e deterministica con il conteggio delle parole aggiunte o rimosse. Vengono inoltre segnalate le pagine presenti in una sola versione. Il confronto non usa la rete, conserva l’ordine e rifiuta qualsiasi documento privo di testo estratto.
Prepari il testo conservando la struttura delle pagine
Parta dal testo già estratto da entrambi i file PDF. Invii ogni documento come un elenco ordinato in cui la prima stringa rappresenta la pagina uno, la seconda la pagina due e così via. Conservare questi confini è essenziale, perché il risultato segnala le differenze per numero di pagina anziché trattare il documento come un unico blocco continuo. Gli strumenti di estrazione possono produrre spazi, tabulazioni o interruzioni di riga ripetuti; il confronto normalizza quindi gli spazi prima di stabilire se il testo è cambiato. In questo modo una pagina non viene segnalata solo perché un estrattore ha disposto diversamente una frase. Lo strumento non esegue il riconoscimento ottico dei caratteri, non apre i PDF e non deduce confini mancanti. Se un documento acquisito non contiene un livello testuale, esegua prima l’OCR e fornisca qui il risultato pagina per pagina. Controlli la qualità quando caratteri, colonne o tabelle alterano l’ordine di lettura. Entrambi gli input devono contenere almeno una pagina con testo diverso da soli spazi; in caso contrario viene restituito un errore.
Comprenda come vengono sintetizzate le pagine modificate
Lo strumento confronta le posizioni corrispondenti dopo aver normalizzato gli spazi. Un testo normalizzato identico non genera differenze. Quando una pagina cambia, la sintesi divide le due versioni in parole, ne confronta la frequenza senza distinguere maiuscole e minuscole e indica quante parole sono state rimosse o aggiunte. Un’anteprima mostra fino a cinque parole rimosse e cinque aggiunte, così è semplice notare un importo, una data, il nome di una parte o un termine contrattuale aggiornato. I conteggi conservano le ripetizioni: eliminare due occorrenze dello stesso termine produce due rimozioni. Se le parole coincidono ma cambia l’ordine, l’uso delle maiuscole o la punteggiatura, la pagina resta contrassegnata come modificata e la sintesi ne spiega il motivo. È una diagnosi concisa, non una patch carattere per carattere. Non interpreta l’importanza semantica né sostiene che formulazioni diverse abbiano lo stesso significato. Usi i numeri indicati per indirizzare una revisione umana.
Interpreti le pagine mancanti e usi il risultato con cautela
I documenti non hanno sempre la stessa lunghezza. Quando un input contiene posizioni aggiuntive, ogni pagina in più viene segnalata come presente soltanto nel PDF A o nel PDF B, insieme al numero di parole estratte. Il risultato principale include i totali delle pagine, un elenco ordinato di quelle differenti, un elemento dettagliato per ogni differenza e un indicatore di uguaglianza utile per l’automazione. L’output è adatto ai controlli di pubblicazione, ai flussi di approvazione, alla convalida degli archivi e ai processi di acquisizione documentale. Un indicatore vero significa che il testo normalizzato coincide pagina per pagina; non dimostra che immagini, annotazioni, firme, colori, caratteri, metadati, livelli nascosti o posizioni siano identici. Al contrario, differenze di estrazione possono dipendere dalla codifica del PDF anziché da una revisione editoriale intenzionale. Per verifiche importanti, usi il rapporto per localizzare le differenze testuali, quindi esamini le pagine originali applicando il giudizio giuridico, finanziario o operativo appropriato.
Casi d'uso
Rivedere un contratto modificato
Individui le pagine la cui formulazione estratta è cambiata prima di esaminare le clausole interessate negli originali.
Controllare un rapporto prima della pubblicazione
Confronti bozza e versione finale per rilevare importi, date, etichette o pagine aggiunte e rimosse per errore.
Automatizzare il controllo delle versioni
Usi l’indicatore di uguaglianza e l’elenco delle pagine diverse per inviare solo i PDF modificati all’approvazione manuale.
Domande frequenti
Lo strumento accetta direttamente file PDF?
No. Accetta testo già estratto, organizzato come una stringa per pagina.
Che cosa accade se un input è vuoto?
La richiesta fallisce per input non valido. Ogni PDF deve contenere almeno una pagina con testo diverso da soli spazi.
Interruzioni di riga e spazi ripetuti sono considerati modifiche?
No. Gli spazi vengono normalizzati prima del confronto, quindi le differenze di disposizione dovute all’estrazione sono ignorate.
Può rilevare differenze visive o di formattazione?
No. Confronta solo il testo estratto e non esamina immagini, tipografia, annotazioni, firme, metadati o geometria.
Come vengono segnalate le pagine aggiunte o rimosse?
Una posizione senza corrispondenza risulta presente solo nel PDF A o B, insieme al conteggio delle parole estratte.
Quanto costa un confronto?
Ogni richiesta API costa $0.002. L’implementazione deterministica nel browser funziona anche senza chiamate di rete.
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/compare-text \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages_a":["Quarterly report\nRevenue was $2.4 million.","Operating expenses were $1.1 million."],"pages_b":["Quarterly report\nRevenue was $2.7 million.","Operating expenses were $1.1 million."]}'const res = await fetch("https://api.kit.forhosting.com/pdf/compare-text", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages_a": [
"Quarterly report\nRevenue was $2.4 million.",
"Operating expenses were $1.1 million."
],
"pages_b": [
"Quarterly report\nRevenue was $2.7 million.",
"Operating expenses were $1.1 million."
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/compare-text",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages_a": [
"Quarterly report\nRevenue was $2.4 million.",
"Operating expenses were $1.1 million."
],
"pages_b": [
"Quarterly report\nRevenue was $2.7 million.",
"Operating expenses were $1.1 million."
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/compare-text", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages_a":["Quarterly report\\nRevenue was $2.4 million.","Operating expenses were $1.1 million."],"pages_b":["Quarterly report\\nRevenue was $2.7 million.","Operating expenses were $1.1 million."]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages_a":["Quarterly report\nRevenue was $2.4 million.","Operating expenses were $1.1 million."],"pages_b":["Quarterly report\nRevenue was $2.7 million.","Operating expenses were $1.1 million."]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/compare-text", 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
{
"pages_a": [
"Quarterly report\nRevenue was $2.4 million.",
"Operating expenses were $1.1 million."
],
"pages_b": [
"Quarterly report\nRevenue was $2.7 million.",
"Operating expenses were $1.1 million."
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.compare_text",
"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. |