Domanda

Ho un file molto grande PDF (200.000 KB o più), che contiene una serie di pagine che contengono nulla, ma le tabelle. Mi piacerebbe analizzare in qualche modo queste informazioni utilizzando Ruby, e importare i dati risultanti in un database MySQL.

Qualcuno sa di qualsiasi metodo per tirare i dati fuori del PDF? I dati sono formattati nel seguente modo:

Nome | indirizzo | Cash Segnalato | Anno Segnalato | Titolare Nome

A volte il campo Nome trabocca nel campo dell'indirizzo, nel qual caso vengono visualizzate le colonne rimanenti sulla riga seguente.

A causa della disposizione irregolare, mi è stato bloccato sul calcolare questo fuori. Per lo meno, qualcuno mi potrebbe puntare a una libreria PDF rubino per questo compito?

UPDATE: ho fornito informazioni non corrette per sbaglio! La dimensione effettiva del file è di 300 MB, oppure 300.000 KB. Ho fatto il cambiamento di cui sopra per riflettere questo.

È stato utile?

Soluzione

presumo si può Copy'n'Paste frammenti di testo senza problemi quando il PDF viene aperto in Acrobat Reader o qualche altro PDF Viewer?

Prima di provare ad analizzare e il testo estratto tali file mostro di programmazione (anche se è di 200 MByte solo - per il semplice testo in tabelle che è huuuuge, a meno che non si dispone di 200000 pagine ...), vorrei procedere in questo modo:

  1. Prova a disinfettare il file prima da ri-distillazione di esso.
  2. Prova con diversi strumenti CLI per estrarre il testo in un file .txt.

Si tratta di una questione di minuti. Scrivere un programma Ruby per fare questo certamente è una questione di ore, giorni o settimane (a seconda della vostra conoscenza riguardo la struttura interna PDF fileformat ... ho il sospetto che non si ha molta esperienza di quella ancora).

Se "2." opere, a metà strada si può essere fatto già. Se funziona, si sa anche che facendo a livello di codice con Ruby è un lavoro che può in linea di principio essere risolti. Se "2." non funziona, si sa che può essere estremamente difficile da raggiungere a livello di codice.

Disinfettare il 'Monster.pdf':

Suggerisco di usare Ghostscript . È inoltre possibile utilizzare Adobe Acrobat Distiller se si ha accesso ad esso.

gswin32c.exe ^
  -o Monster-PDF-sanitized ^
  -sDEVICE=pdfwrite ^
  -f Monster.pdf

(Sono curioso quanto quel singolo comando renderà la vostra strizzacervelli output PDF rispetto all'ingresso.)

Testo estratto da PDF:

Suggerisco di prima pdftotext.exe prova ( dalla gente xpdf ). Ci sono altri, un po 'metodi più scomodi disponibili anche, ma questo potrebbe fare il lavoro già:

pdftotext.exe ^
   -f 1 ^
   -l 10 ^
   -layout ^
   -eol dos ^
   -enc Latin1 ^
   -nopgbrk ^
   Monster-PDF-sanitized.pdf ^
   first-10-pages-from-Monster-PDF-sanitized.txt

Questo non estrarrà tutte le pagine ma solo 1-10 (per prova di concetto, per vedere se funziona affatto). Per estrarre da ogni pagina, basta lasciare fuori il parametro -f 1 -l 10. Potrebbe essere necessario modificare la codifica modificando il parametro -enc ASCII7 (o UTF-8, UCS-2).

Se questo non funziona il modo in cui quick'n'easy (perché, come talvolta accade, un po 'di carattere negli usi PDF originali "codifica personalizzato vettore") si dovrebbe fare una nuova domanda, che descrive i dettagli della vostra scoperte così lontano. Allora avete bisogno di ricorrere calibri più grandi per abbattere il problema.

Altri suggerimenti

  

Per lo meno, potrebbe puntare a nessuno   me di una libreria di Ruby PDF per questo   compito?

Se non è stato fatto, si dovrebbe verificare le due domande precedenti: " Rubino: Reading I file PDF ," e " rubino pdf parsing gemma / biblioteca ." PDF Reader :: , PDF :: Toolkit e Docsplit sono alcune delle librerie suggerite relativamente popolari. C'è anche un suggerimento di utilizzare JRuby e alcuni Java PDF biblioteca parser .

Non so se qualcuno di queste soluzioni è in realtà adatto per il vostro problema, in particolare che avete a che fare con questi file PDF enormi. Quindi, a meno che qualcuno offre una risposta più informativo, forse è necessario selezionare una libreria o due e li porterà a fare un giro di prova.

Questo sarà un compito difficile, come PDF resi non hanno il concetto di rappresentazione tabellare, solo linee e testo in posizioni predeterminate. Può non essere possibile determinare quali sono righe e quali sono le colonne, ma può dipendere dal PDF stesso.

Le librerie Java sono il più robusto, e possono fare di più di un semplice testo estratto. Quindi mi sento di guardare in JRuby e iText o PDFBox.

Controlla se vi siano contenuti strutturati in formato PDF. Ho scritto un articolo del blog che spiega questo a http://www.jpedal.org/PDFblog/? p = 410

In caso contrario, sarà necessario costruirlo.

Forse biblioteca Prawn rubino? link testuale

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top