Ho convertito un rapporto di due pagine in Word per controllare qualcosa e il secondo paragrafo è tornato come questo:
Il fatturato è aumentato nel terzo organico è cresciuto di quattro, quarto dopo due tutti in supporto. I grandi rinnovi di assunzione hanno firmato in programma per il quarto trimestre di agosto. margine mantenuto piatto. è invariato a sei ruoli.
Due colonne di prosa perfettamente ordinaria, lette attraverso la grondaia riga per riga, in modo che ogni frase venga unita a quella accanto. Niente era rotto. Il convertitore ha fatto esattamente ciò che un convertitore può fare, e il divario tra quello e ciò che la frase "PDF in parola" promette è l'intero soggetto di questa guida. Ogni output citato di seguito proveniva dall'esecuzione della conversione, non dalla descrizione.
tl; dr: Un PDF memorizza i glifi alle coordinate. Non memorizza paragrafi, colonne, tabelle o intestazioni, quindi un convertitore deve dedurli dalle posizioni e alcune di queste inferenze sono sbagliate nei modi che puoi prevedere. Misurato su un rapporto di prova: due colonne interleaved riga per riga, una tabella di quattro righe appiattita a una riga di lettura "Regione Q2 Q3 EMEA 412 455 Amer 388 401 APAC 120 166" un'intestazione unita nel paragrafo sottostante e una pagina senza strato di testo non ha prodotto nulla. Quello che ottieni in modo affidabile è una prosa modificabile in ordine di pagina, che per la maggior parte dei lavori è ciò che volevi. la Convertitore da PDF a Word Lo fa nel browser, quindi il documento non viene caricato.
Cosa è memorizzato all'interno di un PDF?
Istruzioni per dipingere una pagina, non un documento.
Un flusso di contenuti di un PDF dice cose come "imposta questo font a queste dimensioni, passa a x 60, y 720, mostra questi glifi". la specifica stessa è una descrizione di un modello di pittura e gli operatori di testo si trovano accanto a quelli per disegnare linee e riempire le forme. Non c'è alcun oggetto nel file che significhi "paragrafo", nessun oggetto che significa "questa è una tabella", e nulla che registra che due blocchi di testo siano colonne anziché una ampia. Il formato è stato progettato in modo che una pagina venga stampata in modo identico ovunque e lo ottiene descrivendo la pagina come segni piuttosto che come contenuto.
Quindi un convertitore riceve un elenco di esecuzioni posizionate. pdf.js, il parser su cui gira, li restituisce esattamente come la pagina li disegna. Nel file di prova, la prima pagina ne ha prodotto 34 e la seconda pagina prodotta 4. Ogni corsa è una stringa con una X, una Y, una larghezza e un'altezza del carattere, e l'ordine in cui arrivano è l'ordine in cui è stata disegnata la pagina, che non è necessariamente l'ordine in cui li leggeresti.
Tutto ciò che un documento Word ha bisogno che un PDF non abbia, il convertitore deve ricostruire da quei quattro numeri. Quella ricostruzione è l'intero di ciò che segue, anche ovunque vada storto.
Come fa un convertitore a ricostruire i paragrafi dalle coordinate?
in due passaggi, con una soglia su ciascuno.
I primi gruppi di passaggio vengono eseguiti in linee per linea di base: le esecuzioni i cui valori Y si trovano entro la metà dell'altezza del carattere l'uno dall'altro sono di una riga. Il secondo raggruppa le linee in paragrafi in base al divario verticale tra di loro. Un gap maggiore di circa 1,45 volte la normale spaziatura delle linee inizia un nuovo paragrafo, dove "usual" è il gap mediano in quella pagina piuttosto che un numero fisso, quindi la regola si adatta a un documento impostato in 9 punti o 14 punti.
C'è una terza soglia all'interno di una linea. pdf.js spesso divide una singola parola su più esecuzioni senza spazio tra di loro, quindi unire le esecuzioni su uno spazio trasforma il "nomefile" in "f i l e n a m e". La soluzione consiste nell'inserire uno spazio solo quando lo spazio orizzontale supera un quarto dell'altezza del carattere, che è circa la larghezza di uno spazio di parole reale.
Questi tre numeri decidono quasi tutto sull'output. Quando il risultato è buono, avevano ragione. Quando un'intestazione si attacca al paragrafo sottostante, il divario era inferiore a 1,45 volte la mediana e la regola diceva un paragrafo.
Perché due colonne escono intercalate?
Perché l'unica prova per una colonna è uno spazio orizzontale e il raggruppamento della linea guarda prima alla posizione verticale.
I due blocchi nella mia pagina di prova si trovavano a X 60 e X 320, con le loro linee di base condivise. Il raggruppamento ha visto sei linee di base, ciascuna del quale trasportare il testo da entrambi i lati, e leggere ciascuna di esse. Il risultato è il paragrafo in cima a questa guida: ogni riga della colonna di sinistra seguita immediatamente dalla riga accanto ad essa.
Questo è lo stesso fallimento delle colonne criptate in OCR, e ha la stessa radice: l'ordine di lettura è un giudizio su un layout, fatto dalla geometria, da qualcosa che non può leggere.
I convertitori che gestiscono bene le colonne eseguono prima un passaggio di segmentazione della pagina, cercando una banda verticale coerente di spazi bianchi che esegue l'altezza della pagina e dividendo la pagina lì prima di qualsiasi raggruppamento di linee. Funziona su un giornale o un giornale di giornale, dove la grondaia è ampia e regolare. È meno affidabile sui casi comuni, in cui una barra laterale, una citazione di tiro o una tabella a due colonne rompono la banda.
Se il tuo documento ha colonne, la risposta pratica è controllare l'output e correggere il primo paragrafo di ogni pagina, o convertire una colonna alla volta se il documento è abbastanza lungo da valerne la pena.
Cosa succede a un tavolo?
diventa una frase.
Il mio file di test aveva una tabella di quattro righe con tre colonne. Ecco tutto dopo la conversione:
Region Q2 Q3 EMEA 412 455 AMER 388 401 APAC 120 166
Ogni valore è sopravvissuto. La struttura no. Non si può dire da quella linea che 412 è la figura Q2 di EMEA senza contare le posizioni e conoscere la forma dell'originale.
Il motivo è che la maggior parte dei PDF non contiene nemmeno tabelle. Una tabella in un PDF viene solitamente disegnata in corrispondenza di coordinate con alcune linee disegnate attorno ad esso, e le linee sono operazioni grafiche che non hanno nulla nel file che le collegano al testo che racchiudono. Un convertitore dovrebbe rilevare l'allineamento dei numeri, dedurre una griglia e decidere quali esecuzioni appartengono a quale cella, che è un problema di ricerca piuttosto che analizzare una.
Alcuni PDF portano una struttura reale, attraverso tag aggiunti per l'accessibilità, e quelli convertono molto meglio. Sono una minoranza: i PDF con tag provengono da un'esportazione attenta di Word o InDesign, non da un driver di stampa.
Se la tabella è la cosa che desideri, copiala in un foglio di calcolo a mano o converti il PDF in testo e rimodellalo lì. Un file Word convertito non ti darà celle.
Perché la mia intestazione si è fusa nel paragrafo?
Perché lo spazio sotto di esso non era abbastanza grande per inciampare la regola del paragrafo.
A pagina due del file di prova, l'intestazione "Note" si trova a 40 punti sopra il corpo del testo mentre le linee del corpo erano distanti a 18 punti di distanza. Quel divario è 2,2 volte la spaziatura della linea, che avrebbe dovuto dividerli, e non è così, perché il divario mediano su una pagina con solo quattro esecuzioni non è una stima affidabile di nulla. L'output era:
Notes Note 14 covers intercompany revenue and the treatment of
deferred items carried over from the prior year.
Questa è la forma onesta dell'intero problema. Le regole di soglia funzionano bene su una pagina con testo sufficiente per stabilire un ritmo di base e scarsamente su uno scarso. Un frontespizio, una breve nota, una copertina o un modulo spesso tornano come un paragrafo run-on.
È anche la cosa più facile da sistemare dopo il fatto. Le intestazioni sono ovvie per un lettore umano e il ritorno pressante nel posto giusto richiede un secondo, che è meno tempo di qualsiasi strumento impiegherebbe per farlo bene.
Cosa succede a una pagina scansionata?
Non esce nulla, e questo è il comportamento corretto.
La terza pagina del mio file di prova non aveva alcun livello di testo, solo un rettangolo grigio in grado di eseguire una scansione. pdf.js ha restituito zero esecuzioni e il convertitore ha prodotto zero paragrafi per questo.
La pagina è ancora conteggiata. Appare nel file Word come una pagina vuota, quindi la pagina si interrompe dopo che rimane allineata con l'originale, il che conta quando qualcuno lavora dai numeri di pagina. Un convertitore che lo ha lasciato cadere silenziosamente si sarebbe spostato ogni pagina successiva.
Un PDF le cui pagine sono tutte immagini è una scansione e nessun convertitore può estrarre da esso il testo perché non c'è testo da estrarre. Ciò di cui ha bisogno è l'OCR, che legge l'immagine delle lettere e indovina i caratteri, e che porta il suo tasso di errore. La versione misurata di quel trade è in La guida su cosa rompe l'OCR: Inclinare oltre i tre gradi è ciò che rovina una scansione, non una risoluzione.
Una regola pratica utile: apri il PDF e prova a selezionare una frase con il cursore. Se il testo evidenzia, un convertitore può leggerlo. Se ottieni un rettangolo di selezione su un'immagine, hai bisogno prima di OCR.
Cosa c'è dentro il .docx che esce?
Tre file in uno zip, e questo è davvero tutto ciò che serve.
Un .docx è un archivio convenzione di packaging aperto, standardizzato come ECMA-376: uno zip contenente parti XML più un manifesto che dice cos'è ogni parte. proprio di Microsoft Panoramica del formato Cammina le stesse tre parti. Il minimo che si apre come documento Word è di tre voci:
| Parte | proposito |
|---|---|
[Content_Types].xml |
Dichiara il tipo di supporto di ogni parte nel pacchetto |
_rels/.rels |
Punti alla parte del documento principale |
word/document.xml |
il contenuto stesso |
Tutto il resto che un file di Word di solito trasporta, stili, caratteri, temi, impostazioni, definizioni di numerazione, è facoltativo. Lasciarli fuori e il lettore applica le sue impostazioni predefinite.
Il documento di prova, 83 parole su tre pagine, è arrivato a un .docx di 1.305 byte di cui word/document.xml è 1.169 byte. L'ho aperto con il lettore di documenti di Apple, che è ciò che TextEdit e Pages usano, e ha reso intatto ogni paragrafo in ordine con l'interruzione di pagina. Un pacchetto minimo non è degradato.
Un dettaglio in quanto XML conta più di quanto sembri. Ogni corsa è scritta con xml:space="preserve". Senza di essa, una corsa che inizia o finisce con uno spazio lo perde, e ogni riga che è stata avvolta nell'originale torna con la sua ultima parola unita a quella successiva.
Cosa succede alle immagini?
Vengono eliminati e il file di parole non lo menziona.
Il pacchetto scritto qui ha tre parti e nessuna è una parte mediatica. Un logo, un grafico, una firma scansionata, uno screenshot incorporato nel rapporto: tutto andato, senza segnaposto dove si trovavano. Il testo che li circondava si chiude come se non ci fossero mai stati.
Questa è una conseguenza dello stesso design che rende l'output piccolo e affidabile. Portare un'immagine attraverso significa estrarla dal PDF, deciderne il formato, scriverlo word/media/, aggiungendo un tipo di contenuto per esso, aggiungendo una parte di relazione e posizionando un elemento di disegno nel punto giusto nel flusso. Ognuno di questi è un posto in cui un lettore può rifiutare il file e un .docx un elaboratore di testi si rifiuta di aprire è peggio di uno manca un logo.
Importa di più per i documenti in cui un'immagine è il contenuto piuttosto che la decorazione. Un grafico in un rapporto non si converte in nulla e un lettore del file Word non ha modo di sapere che c'era mai stato un grafico. Controllare l'originale insieme alla conversione quando si fa riferimento a una figura nella prosa.
Perché a volte il file si rifiuta di aprire del tutto?
I caratteri di controllo, che XML proibiscono e i PDF contengono.
Il livello di testo di un PDF raccoglie i caratteri da qualsiasi cosa lo abbia prodotto: i feed di moduli da una pipeline di stampa, byte nulli da una codifica rotta, altri codici di controllo C0 che non significano nulla in un documento. XML1.0 Non consente la maggior parte di loro, anche evaso: l'intervallo di caratteri che le specifiche autorizzate inizia alla scheda, al ritorno della nuova riga e al carrello e salta il resto del blocco C0.
Il fallimento non è grazioso. Word non avvisa né lascia cadere il personaggio, si rifiuta di aprire il file e dice che il contenuto è illeggibile. Quindi il convertitore rimuove quei caratteri prima di scrivere, piuttosto che cercare di sfuggirgli. Non avevano alcun significato nella fonte e ti costerebbero l'intero documento.
Se mai ricevi un .docx che un elaboratore di testi rifiuta come illeggibile, questa è la prima cosa da sospettare, ed è per questo che un convertitore che scrive XML a mano deve pensarci.
Dovresti convertire in Word o in testo normale?
Word Se hai intenzione di modificarlo, invia un messaggio di testo se lo elabori.
Condividono la stessa estrazione. La differenza è solo ciò che viene scritto alla fine: uno scrive i paragrafi in uno zip di XML, l'altro li scrive in un file .txt.
| Vuoi | maneggiare | perché |
|---|---|---|
| Modifica la prosa e inviala | PDF a Word | struttura del paragrafo, interruzioni di pagina, qualcosa che un collega può aprire |
| Cerca, grep o alimentalo a uno script | PDF in testo | Nessun markup in mezzo |
| Mantieni esattamente il layout | Nessuno dei due | Modifica il PDF o ottieni il file originale |
| Leggi una scansione | OCR prima | non esiste un livello di testo da estrarre |
La terza fila è quella con cui vale la pena sedersi. Se il layout è ciò che conta, la conversione in Word è la direzione sbagliata, perché la conversione è dove si perde il layout. Chiedi a chi ha inviato il PDF per il file da cui è stato esportato. Ci vuole un messaggio ed è l'unico approccio che mantiene la formattazione.
Quanto tempo impiega la conversione?
Abbastanza a lungo per leggere il file, e non più.
Non esiste un passaggio di codifica e nessuna elaborazione delle immagini. Il lavoro analizza la struttura del PDF, estraendo il contenuto di testo di ogni pagina, raggruppando le esecuzioni e serializzando XML in uno zip. Il file di prova ha richiesto alcuni millisecondi, il che non è un numero utile perché era di tre pagine. Un rapporto di duecento pagine è delimitato da pdf.js che lo analizza, che è più o meno lineare nel numero di pagine e veloce.
Quello che noti su un documento di grandi dimensioni è la memoria, perché l'intero file è conservato nella scheda del browser insieme alla struttura analizzata. Questo è il vero soffitto qui piuttosto che la velocità.
Cosa dovresti controllare nell'output?
Quattro cose, nell'ordine probabilmente si sbagliano.
- Il primo paragrafo di ogni pagina. È qui che si presentano le unite di interleaving e di intestazione.
- qualsiasi tavolo. Conferma che i numeri sono presenti, quindi accetta che la griglia è sparita e ricostruiscila se ne hai bisogno.
- parole sillabate alle estremità della riga. Una parola spezzata su una riga nel PDF torna con il trattino nel mezzo di essa.
- Conteggio pagine. Dovrebbe corrispondere all'originale, comprese le pagine vuote o scansionate.
Quell'elenco richiede un minuto su un documento di dieci pagine ed è la differenza tra un file su cui puoi inviare e uno che contiene silenziosamente una frase impiombata.
Perché questo viene eseguito nel browser?
Poiché i documenti che le persone convertono sono contratti, dichiarazioni, lettere, risultati medici e cose in embargo.
La conversione è un'analisi e una zip, entrambe le quali un browser fa perfettamente. Il file viene letto dal tuo disco nella pagina, analizzato lì con pdf.js compilato per il web, assemblato in un .docx in memoria e restituito come download. Nessuna richiesta porta il documento, nulla viene archiviato su un server e nulla esiste per nessuno da eliminare in seguito.
L'alternativa abituale è un sito che prende il tuo PDF, lo converte su una macchina di cui non sai nulla e ti invia un link per email. per un volantino pubblico che va bene. Per un contratto di lavoro è una decisione che non ti è stato chiesto di prendere consapevolmente.
Il costo è la memoria della scheda su file molto grandi e nessun OCR lato server per le pagine scansionate. Entrambi sono limiti visibili piuttosto che silenziosi, che è il commercio che vale la pena avere.



