ne ho scritto uno prima (per esigenze simili), e posso dire questo: divertiti. È un compito abbastanza complesso. Il PDF specification è grande e ingombrante. Ci sono diversi metodi per memorizzare il testo al suo interno. E il kicker è che ogni generatore di PDF è diverso nel modo in cui funziona. Quindi, mentre qualcosa come TFPDF o DOMPDF crea VERAMENTE documenti PDF di facile lettura (da un punto di vista della macchina), Acrobat crea alcuni documenti davvero infernali.
Il motivo è come scrive il testo. La maggior parte dei renderer basati su DOM - che ho usato-- scrivono l'intera linea come una stringa e la posizionano una volta (che è davvero facile da leggere). Acrobat cerca di essere più efficiente (e lo è) scrivendo solo uno o forse pochi caratteri alla volta e posizionandoli in modo indipendente. Mentre questo semplifica davvero il rendering, rende la lettura MOLTO più difficile.
Il lato positivo qui è che il formato PDF è di per sé molto semplice. Hai "oggetti" che seguono una sintassi regolare.Quindi puoi collegarli insieme per generare il contenuto. La specifica fa un buon lavoro nel descrivere il formato del file. Ma la lettura del mondo reale sta andando a prendere un po 'di potenza del cervello ...
Alcuni pezzi utili di consigli che ho dovuto imparare nel modo più duro, se hai intenzione di scrivere voi stessi:
- Adobe piace ri-mappare i caratteri. Quindi il personaggio
65
probabilmente non sarà A
... È necessario trovare un oggetto mappa e dedurre cosa sta facendo in base a quali caratteri ci sono dentro. Ed è efficiente dal momento che se un carattere non appare nel documento per quel tipo di carattere, non lo include (il che rende difficile la vita se provi a modificare un PDF a livello di programmazione) ...
- Scrivilo astratto come possibile. Scrivi classi per ogni tipo di oggetto e ogni tipo nativo (stringhe, numeri, ecc.). Lascia che quelle classi si analizzino per te. Ci sarà un bel po 'di ripetizione, ma ti risparmierai alla fine quando ti rendi conto che devi modificare qualcosa per un solo tipo specifico ...
- Scrivi per una versione specifica o due dei Specifiche PDF e applicarlo. Controlla il numero di versione, e se è più alto di quanto ti aspetti, cauzione ... E non provare a "farlo funzionare". Se si desidera supportare le versioni più recenti, suddividere le specifiche e aggiornare il parser da lì. Non provare a tentativi ed errori (non è divertente) ...
- Buona fortuna con flussi compressi. Ho scoperto che in genere non ci si può fidare degli argomenti di lunghezza per verificare cosa non si sta comprimendo. A volte (per alcuni generatori) funziona bene ... Altri è spento da uno o più byte. Ho appena tentato di svuotare se il filtro corrisponde e quindi forzare la lunghezza ...
- Durante il test delle lunghezze, non utilizzare
strlen
. Utilizzare mb_strlen($string, '8bit')
poiché compenserà set di caratteri diversi (e consentirà caratteri potenzialmente non validi in altri set di caratteri).
In caso contrario, buona fortuna ...
Dare una generosità a chiunque possa darci un esempio funzionante su come estrarre il testo di un pdf. La soluzione deve utilizzare librerie libere (no xPDF o PDF2Text) e indipendente dalla piattaforma (deve funzionare su win e unix, quindi nessun PDF2Text). Può usare la funzione exec() o shell() di PHP. – 2ndkauboy
Grazie Kau-Boy. Forse una taglia aiuterà a motivare risposte più dettagliate. – elviejo79