2010-11-04 19 views
23

Dopo due giorni cercando di leggere le annotazioni da un PDF utilizzando Quartz, sono riuscito a farlo e posted my code.Ricerca PDF su iPhone

Ora mi piacerebbe fare lo stesso per un'altra domanda frequente: cercare documenti PDF con Quartz. La stessa situazione di prima, questa domanda è stata posta molte volte senza quasi nessuna risposta pratica. Quindi ho bisogno di alcuni suggerimenti prima, perché non l'ho ancora implementato io stesso.

Quello che ho cercato:

Ho provato ad utilizzare CGPDFScannerScan gestire gli operatori TJ e Tj - restituisce il testo a destra su alcuni PDF, mentre su altri documenti restituisce le lettere per lo più casuali. Forse è correlato alla codifica del testo? Qualcuno pointed out che i blocchi di testo (contrassegnati dagli operatori BT/ET) devono essere gestiti, ma non sono ancora riuscito a farlo. Qualcuno è riuscito a estrarre il testo da qualsiasi PDF?

Dopodiché, la ricerca dovrebbe essere facile memorizzando tutto il testo in un NSMutableString e utilizzando rangeOfString (se c'è un modo migliore per favore fatemelo sapere).

Ma allora come evidenziare il risultato? So che ci sono alcuni operatori per trovare le dimensioni dei glifi, quindi ho potuto calcolare il rect risultante basato su quei valori, ma ho letto le specifiche per ore ... è un casino gonfio e sto diventando pazzo. Chiunque abbia una spiegazione pratica?

Aggiornamento

utente Naveen Thunga trovato PDFKitten "un quadro di riferimento per l'estrazione di dati da file PDF in iOS". Ho appena provato la demo e sembra funzionare come pubblicizzato. Lo testerò con altri PDF e posterò presto i risultati. Come nota a margine, il codice mi sembra molto buono - se sei interessato a come funziona questa roba è davvero fantastico.

+0

Trovato questa raccolta di operatori potrebbe essere utile: http://efreedom.com/Question/1-3627745/Getting-Text-Position-Parsing-Pdf-Quartz -2D –

+0

Ehi Brainfeeder, hai trovato qualche soluzione riguardante l'evidenziazione dei risultati della ricerca? – Sarah

+0

@Sarah: No, ancora niente, ho iniziato a concentrarmi su altre cose dopo qualche giorno ... – pt2ph8

risposta

4

Questo non è un problema semplice da implementare, ma è semplice.

Per qualsiasi pagina è necessario eseguire la scansione della pagina utilizzando l'API dello scanner CGPDF. È necessario registrare i callback per gli operatori PDF che influiscono sul testo nella pagina, non solo TJ/Tj, ma anche quelli che impostano il carattere, influenzano la matrice di disegno del testo, ecc. È necessario creare una macchina a stati che si aggiorni con ogni tag rilevato + parametri. È necessario esaminare l'accounting del testo per la codifica del font corrente. Quando trovi il testo che desideri evidenziare, dovrai esaminare la matrice di disegno del testo corrente che hai aggiornato per determinare le coordinate del disegno. Leggi le specifiche PDF (la versione 1.7 è scaricabile da Adobe) per capire a quali operatori devi prestare attenzione.

La codifica dei caratteri è forse la parte più difficile poiché è possibile specificare una serie di modi per codificare e alcuni di essi sono di proprietà del font. Principalmente puoi imbrogliare e ricorrere a un sottoinsieme della codifica ANSI, ma questo si interromperà su determinati PDF che hanno strani caratteri.

Essenzialmente si sta elaborando la pagina come se si dovesse renderla.

2

ho creato utility class in Objective-C utilizzando PDF.js

che permetterà mostra così come file di ricerca PDF.

La classe di utilità consente la ricerca utilizzando Highlight all search result e le opzioni 'maiuscole/minuscole'.

hanno Cerca nell'archivio PDF in azione Link

Problemi correlati