Contenuto PDF: testo o grafica?

3

Esiste un test per verificare se un file PDF contiene testo o se viene creato mediante la scansione di fogli di carta?

  • testo: testo semplice che, ad esempio, posso copiare & incollare mentre sto leggendo il PDF. Testo non ricercabile / nascosto. Creato ad esempio da un wordprocessore.

  • non testo: PDF da scanner, contenente solo JPG o TIFF. Non c'è OCR, il PDF contiene solo immagini.

Non posso usare strumenti esterni, perché sto lavorando su un sistema embedded, non su linux, non su windows, non ci sono "librerie esterne". Devo lavorare sulla programmazione C nuda. Ecco perché preferisco una funzione semplice, non dipendente da librerie esterne.

C'è qualche informazione nell'intestazione del PDF?

La mia idea generale è: leggere i primi 64 Kbyte e provare a comprimere, con una libreria generica. Pdf con jpg e tiff, scansionato da carta, di solito comprime male. Pdf di testo comprime bene. Funzionerà? Ci sono metodi migliori?

    
posta Massimo 21.08.2016 - 00:36
fonte

1 risposta

4

Modificato per rispondere direttamente al requisito di Massimo che nessun codice esterno sia usato (a.k.a sviluppo di clean room).

Come minimo, si deve implementare tutta la meccanica per analizzare (ma non eseguire il rendering) la struttura del documento PDF, in base alle specifiche del PDF, come ISO32000-1:2008, PDF 1.7 (necessario per l'acquisto).

La struttura del documento PDF è un albero molto grande e profondo, paragonabile ad alcuni dei documenti XML più complicati del mondo. Lo "schema" del PDF è documentato nella specifica del formato file, nel documento collegato sopra.

Una volta arrivato al nodo "content stream" di una pagina del documento (può esserci uno o più o nidificati) o ai nodi "Form XObject", nidificati all'interno di una pagina, è possibile analizzare il suo contenuto, cercare il contenuto che è delimitato da "BT" e "ET". Ci sono molte altre cose a cui prestare attenzione, però.

I flussi di contenuti testuali sono quasi sempre compressi in Deflate (comunemente associati alla libreria "zlib"). Quindi dovrai trovare l'inizio dei flussi sgonfiati, trovare la lunghezza del flusso, decomprimerlo e cercare le stringhe all'interno.

Per trovare le immagini, devi trovare "Image XObjects" e alcuni altri che possono contenere dati di immagini.

Questa è una spiegazione incompleta ed è applicabile solo a coloro che non utilizzano librerie o strumenti.

Ci sono molti approcci. Tutti richiedono librerie o strumenti; alcuni sono open-source o con licenza libera. Altri ancora richiedono licenze commerciali per uso commerciale, incluso l'uso in servizi ospitati. Quindi una risposta rapida è no.

Tutto il flusso di contenuti, inclusi testo o immagini, sono compressi. Alcuni di questi sono compressi in Deflate, ma una dozzina di altri metodi di compressione (chiamati filtri) sono usati in PDF.

Esistono strumenti per estrarre testo semplice da PDF . PDF che contengono testo scansionato ma non riconosciuto (cioè leggibile dall'uomo, non leggibile dalla macchina) deve essere sottoposto a rendering per l'immagine e quindi OCRed .

Alcuni tipi di PDF non contengono né testo né immagini: contengono comandi di grafica vettoriale per il rendering di tratti di testo, un tratto alla volta. La lettera maiuscola "A" può essere memorizzata come più tratti, per esempio. Per questo tipo di PDF, ancora una volta è necessario eseguire il rendering di questi comandi grafici, producendo un'immagine leggibile dall'uomo e quindi OCR in un testo leggibile dalla macchina.

Non esiste un modo rapido per analizzare "l'intestazione PDF". Infatti, solo l'analisi dell'intestazione del PDF è abbastanza complicata da renderti un famoso programmatore e un amministratore delegato di un'azienda tecnologica .

Per stimare se un'attività è possibile o meno con PDF, è importante avere una vista in prima persona della struttura di un file PDF. Ecco alcuni esempi di strumenti utilizzati per ottenere una vista ad albero della struttura:

(Note: ci sono molti strumenti di questo tipo.Questa non è una pubblicità o un sostegno.Questi strumenti diagnostici sono per l'uso di un programmatore per capire una struttura PDF, non componenti software che possono essere integrati o spediti o rivenduti.)

Non ho usato Poppler ma sembra promettente.

Questa parte è off-topic ma dà un promemoria agli altri che il requisito della camera bianca può essere rilevante se, ad esempio:

  • Uno sta implementando questa funzionalità in un nuovo linguaggio di programmazione (si pensi ad alcune delle stelle nascenti, ad esempio Go and Rust).
  • Si sta implementando questo in una lingua senza creare processi esterni o chiamando funzioni in lingua straniera (come l'implementazione di questo in Javascript che viene eseguito sui browser)
  • Uno sta implementando questo in hardware, dove l'elemento computazionale di base è l'elaborazione del flusso (comprimere, decomprimere, filtrare) e la corrispondenza dei modelli di stringhe, come i firewall e la nuova architettura, ad es. Processore di automi
risposta data 21.08.2016 - 02:06
fonte

Leggi altre domande sui tag