Ripara ora
- Trascina il file
- La riparazione avviene in locale
- Scarica il risultato
Quando Acrobat o Reader mostra "There was an error opening this document. The file is damaged and could not be repaired," non è una lamentela generica: Acrobat ha già tentato il proprio recupero silenzioso ed è fallito. Un PDF si legge dalla fine, e le strutture finali sono proprio ciò che un salvataggio difettoso o un download interrotto distruggono per primo. Trascina il file qui sopra e lo strumento analizza la reale struttura a oggetti del PDF nel tuo browser, ricostruisce la tabella dei riferimenti incrociati a partire dagli oggetti che trova e riassembla un file che si apre davvero, senza che il documento lasci mai il tuo dispositivo.
Un PDF si legge dalla fine, ed è per questo che si rompe così
Un PDF non è un flusso che si legge dall'alto verso il basso. Inizia con un'intestazione come %PDF-1.7, seguita da un corpo di oggetti numerati (ciascuno scritto come N 0 obj … endobj) che contengono le pagine, i font, le immagini e il contenuto. Dopo il corpo viene la tabella dei riferimenti incrociati (xref): un elenco con lo scostamento (offset) esatto in byte di ogni oggetto. Poi un trailer indica qual è la radice del documento e, cosa più importante, il file termina con startxref seguito da un offset in byte e dal marcatore %%EOF.
Per aprire il file, un lettore si posiziona alla fine, legge startxref per sapere dove si trova l'xref, salta fin lì e usa gli offset per individuare la radice e caricare le pagine. Tutto dipende dal fatto che quel trailer sia intatto e gli offset siano corretti. A partire da PDF 1.5, questa mappa può anche essere salvata come una cross-reference stream compressa e impacchettare molti oggetti dentro degli object stream (ObjStm): più efficiente, ma significa che un solo flusso danneggiato in coda può nascondere di colpo moltissimi oggetti.
Poiché l'indice e il trailer stanno proprio alla fine, sono le prime vittime quando un salvataggio si interrompe, un download viene troncato o un aggiornamento incrementale viene scritto male. Ecco perché i PDF "danneggiati" hanno così spesso un contenuto delle pagine perfettamente valido e una mappa rotta che punta ad esso.
Perché la riparazione integrata di Acrobat si arrende
Acrobat di norma ricostruisce un xref rotto in modo silenzioso: se gli offset non tornano, scansiona il file in cerca di marcatori obj e ricostruisce la tabella senza dirti nulla. Quindi "could not be repaired" significa che anche questo meccanismo di emergenza è fallito: il danno è andato oltre ciò che il ricostruttore di Acrobat tollera. I motivi più comuni:
La coda del file è stata troncata. Un download o una copia che si è fermato in anticipo perde del tutto l'xref, il trailer, lo startxref e il %%EOF, e forse anche gli ultimi oggetti. Un aggiornamento incrementale difettoso. I PDF vengono spesso modificati aggiungendo alla fine una nuova sezione xref e un trailer; se quell'aggiunta è corrotta, la catena degli aggiornamenti punta al posto sbagliato. Una cross-reference stream o object stream danneggiata. Quando la mappa stessa è un flusso compresso e quel flusso è corrotto, Acrobat può perdere di vista gli oggetti impacchettati al suo interno. Byte alterati durante il trasferimento: un trasferimento in modalità testo che ha cambiato i fine riga, o una sincronizzazione che ha invertito dei byte, può ugualmente scombinare gli offset finché nulla combacia più.
In tutti i casi, la conclusione utile è la stessa: gli oggetti che compongono le tue pagine di solito sono ancora presenti nel corpo; ciò che è rotto è la directory che punta ad essi.
Cosa recupera una ricostruzione più a fondo, e perché non caricare nulla
Invece di fidarsi del trailer rotto, lo strumento scansiona l'intero file in cerca di definizioni obj, annota dove ciascuna inizia davvero e ricostruisce la tabella dei riferimenti incrociati a partire da quelle posizioni reali. Poi ricollega la radice del documento e l'albero delle pagine affinché un lettore possa percorrere di nuovo le pagine, recuperando lungo il percorso i flussi di contenuto, i font incorporati e le immagini. Quando la mappa risiedeva in una cross-reference stream o object stream compressa che è sopravvissuta, legge anche quelle; quando la coda è stata troncata, recupera ogni oggetto scritto prima del taglio e assembla un PDF valido attorno ad essi. Tutto questo viene eseguito interamente nella scheda del tuo browser: senza Acrobat, senza plugin, senza andata e ritorno a un server.
I limiti onesti: il contenuto che non è mai stato scritto non può essere ripristinato, quindi se il file è stato troncato, le pagine che non erano ancora state salvate sono perse; recuperi le pagine fino al punto del taglio. Se un oggetto specifico da cui dipendono le tue pagine è finito nella zona danneggiata, quella pagina può tornare incompleta. E un PDF cifrato e protetto da password non può essere ricostruito senza la password, perché i suoi oggetti sono illeggibili finché non vengono decifrati. Ciò che la riparazione garantisce davvero è la privacy: contratti, cartelle cliniche, estratti conto e lavori non pubblicati vengono letti dal disco e riassemblati localmente, e puoi tenere d'occhio la scheda Rete (Network) e verificare che 0 byte del documento lascino mai il tuo dispositivo.
Cosa può e cosa non può riparare
Può riparare
- Un PDF il cui xref / trailer / startxref è rimasto danneggiato o troncato: la tabella viene ricostruita scansionando in cerca di definizioni obj
- File troncati da un download o una copia interrotti: viene recuperato ogni oggetto scritto prima del taglio
- Documenti rotti da un aggiornamento incrementale difettoso o da una cross-reference/object stream corrotta
- PDF che Acrobat apre solo per dire che il file è danneggiato e non può essere riparato, quando gli oggetti delle pagine sopravvivono
Non può riparare
- Pagine o oggetti che non sono mai stati scritti dopo un troncamento: quei byte non sono sul tuo disco
- PDF cifrati con password senza la password (gli oggetti non si possono leggere finché non vengono decifrati)
- Un file di 0 byte o che non contiene oggetti PDF riconoscibili
- Una pagina che dipende da un oggetto specifico finito dentro la zona danneggiata (può tornare incompleta)
Se una riparazione fallisce, ti diciamo perché (dati mancanti rispetto a struttura danneggiata), e non ti viene mai addebitato nulla per una riparazione fallita.