Rcerca fulltext

lunedì 26 gennaio 2009 - 11.30

maui.80 Profilo | Junior Member

Buongiorno a tutti, ho questo tipo di problema:
devo realizzare una ricerca fulltext su file pdf, vorrei poter, al click sulla ricerca, aprire i file pdf, vedere se all'interno del testo c'è la chiave di ricerca, se la risposta è affermativa proporre il documento nell'elenco.
Per far ciò ho bisogno di una libreria che mi estragga il testo da un file pdf e lo inserisca in un campo longtxt di una tabella mysql.

Qualcuno sa darmi una dritta?!

grazie mille
MAURO

balfaz Profilo | Expert

guarda un po questo link, non è esattamente quello che cerchi ma magari ti da una dritta
http://blogs.dotnethell.it/freeteo/Ricercare-del-testo-dentro-ad-un-file-PDF__14654.aspx

"Che in questo 2009 i nostri codici possano sconvolgere il mondo."

maui.80 Profilo | Junior Member

non c'è qualcosa in vb.net?

grazie del link, mi serve per darmi un'idea

maui.80 Profilo | Junior Member

sto riscrivendo la procedura in vb.net....

Dim reader As New iTextSharp.text.pdf.PdfReader(percorsofileprova) Dim sb As New StringBuilder() Dim i As Integer = 1 Dim numpagine As Integer numpagine = reader.NumberOfPages While i <= numpagine Dim bytes() As Byte = reader.GetPageContent(i) Dim inserire As Boolean = False Dim c As Char For Each item In bytes c = item If c = "(" Then inserire = True Continue For End If If c = ")" Then inserire = False End If If inserire = True Then sb.Append(c) End If Next 'foreach (byte item in bytes) ' { ' c = (char)item; 'If (c = "(") Then ' inserire = true; ' continue; 'End If ' If (c = ")") Then ' inserire = false; ' End If 'If inserire = True Then ' sb.Append(c) ' End If i = i + 1 End While sb.ToString()

mi manca la parte del for each

balfaz Profilo | Expert

ricorda che comunque avrai bisogno dell'iTextsharp.dll
ti do questo link comunque
http://sourceforge.net/projects/itextsharp/



"Che in questo 2009 i nostri codici possano sconvolgere il mondo."

maui.80 Profilo | Junior Member

questo ce l'ho già....il mio problema è riuscire a convertire i singoli byte estratti e riconoscere quali inserire...cioè il ciclo foreach in C trasformarlo in VB

foreach (byte item in bytes) { c = (char)item; if (c == '(') { inserire = true; continue; //--- sta cominciando una parola salto la tonda } if (c == ')') inserire = false; //--- finita la parola if(inserire) sb.Append(c); } }

balfaz Profilo | Expert

prova a fare in questa maniera, e vediamo un po
Dim itm As Byte For Each itm In bytes c = CStr(itm) If C = "" Then inserire = True Continue For End If If C = ")" Then inserire = False If inserire Then SB.append(c) End If End If Next
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."

maui.80 Profilo | Junior Member

il codice l'ho fatto così anche io quindi è ok....il problema penso che sia legato a:

c = CStr(itm)

nel senso che itm è un byte e devo ottenere la stringa o carattere corrispondente facendo un cast dal tipo byte a string o char cosa che non sono ancora riuscito a fare, ho provato anche con getString di System.Text.Encoding , ma nulla.

balfaz Profilo | Expert

prova cosi
BitConverter.ToString(itm)

proprio per non lasciare perdere
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."

maui.80 Profilo | Junior Member

ho risolto in questo modo!

c = System.Text.Encoding.ASCII.GetChars(bytes, item, 1)

ora testo la procedura se effettivamente estra il testo da un pdf.....

comunque grazie

balfaz Profilo | Expert

benissimo facci sapere

"Che in questo 2009 i nostri codici possano sconvolgere il mondo."

maui.80 Profilo | Junior Member

HO RIFATTO LA PROCEDURA IN QUESTO MODO E FUNZIONA:

Dim reader As New iTextSharp.text.pdf.PdfReader(percorsofileprova) Dim sb As New StringBuilder() Dim i As Integer = 1 Dim numpagine As Integer Dim item As Byte Dim ascii As New ASCIIEncoding() Dim start As Integer, lun As Integer, stopp As Integer, luntot As Integer Dim stringappoggio As String = "" numpagine = reader.NumberOfPages While i <= numpagine Dim bytes() As Byte = reader.GetPageContent(i) Dim inserire As Boolean = False Dim c As String c = ascii.GetString(bytes) luntot = c.Length start = 1 Do Until start = -1 If inserire = False Then start = c.IndexOf("(", start) inserire = True Else stopp = c.IndexOf(")", start) lun = stopp - start - 1 stringappoggio = stringappoggio & c.Substring(start + 1, lun) inserire = False start = stopp End If Loop i = i + 1 End While TextBox1.Text = stringappoggio

GRAZIE MILLE PER IL CONTRIBUTO IMPORTANTE

CIAO
MAURO

balfaz Profilo | Expert

Pregox

"Che in questo 2009 i nostri codici possano sconvolgere il mondo."

maui.80 Profilo | Junior Member

Sorpresa......funziona tutto in locale senza problemi, una volta pubblicato non funziona più, penso sia un discorso legato alla libreria itextsharp.dll, ne sai per caso qualcosa?!

balfaz Profilo | Expert

SIP, purtroppo la libreria dell'itext supera i livelli di sicurezza che ti da (vediamo un po se induvino....) ARUBA, loro consigliano di fare una classe completa con questa libreria in maniera d'avere questa dll con i permessi necessari, questo mi lo hanno detto con un ticket che avevo aperto già un anno fa, ti consiglio di aprire un ticket e vedere cosa ti consigliano loro. Se mai fammi sapere la loro risposta e ci arrangiamo per trovare una soluzione
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."

maui.80 Profilo | Junior Member

Sto provando la stessa libreria aperta da una buona anima, alla quale hanno tolto dei blocchi nelle classi e ricompilata...sembra funzionare...se funziona metto link.

TI FACCIO SAPERE

CIAO
MAURO

---------------------------------------------------
fate click col tasto destro sul link qui sotto (salva oggetto con nome)

http://www.evald80.altervista.org/iTextSharp_Aruba.zip

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5