Un posible uso es mediante automatización escanear formularios de clientes , examenes , etc ,( código ya puesto en el foro ) y recoger los datos de estos escaneos para luego tratarlos . ( correcion automática de examenes tipo test por ejemplo )
- Code: Select all Expand view
Function extraerTextoPDF(cFilePdf)
// crearemos un objeto de tipo "pddoc" para el acceso al PDF
local numPagPDFObj := CreateObject("acroexch.pddoc")
local rutaFicheroPDF := cFilePdf
local lResultadoApertura := numPagPDFObj:Open(rutaFicheroPDF)
local numPaginas
local lResultadoCierre
local objPDF
local numeroPagina
// intentamos abrir el fichero pdf de acrobat
If !lResultadoApertura
numPagPDFObj := nil
MsgInfo( "Error al intentar abrir el fichero pdf indicado. " + ;
"Puede que no sea un PDF de adobe o que el " + ;
"fichero esté corrupto." )
Return .f.
EndIf
// obtenemos el número de páginas del documento pdf
numPaginas = numPagPDFObj:GetNumPages()
lResultadoCierre = numPagPDFObj:Close()
If !lResultadoCierre
numPagPDFObj := nil
MsgInfo( "Error al intentar cerrar el fichero pdf indicado. " )
Return .f.
EndIf
numPagPDFObj := nil
objPDF = CreateObject("acroexch.pddoc")
lResultadoApertura = objPDF:Open(rutaFicheroPDF)
For numeroPagina = 0 To numPaginas - 1
obtenerTextoPaginaPDF( numeroPagina , objPDF )
mensa("Extrayendo : " +alltrim(str( numeroPagina + 1 ))+ ;
" de " +alltrim(str( numPaginas )) )
Next
objPDF := nil
mensa()
msginfo("Nº de páginas extraídas del pdf:" +alltrim(str( numPaginas )) )
Return nil
Function obtenerTextoPaginaPDF( numPagina, ObjPDF )
local i
local pagPDF
local pagHilitelist
local resultadoHilitelist
local pagActual
local datosPDF := ""
// creamos un objeto de página pdf, desde una página especificada
pagPDF := objPDF:AcquirePage(numPagina)
// crearemos un objeto "hilitelist", lo utilizaremos para extraer el texto
pagHilitelist := CreateObject("acroexch.hilitelist")
resultadoHilitelist = pagHilitelist:Add(0, 9000)
pagActual = pagPDF:CreatePageHilite(pagHilitelist)
For i = 0 To pagActual:GetNumText() - 1
datosPDF = datosPDF + pagActual:GetText(i)
Next
msginfo( datospdf )
ExtraerDatodelTexto ( datospdf ,"orden de domiciliación:" , CRLF )
pagPDF := Nil
pagHilitelist := Nil
pagActual := Nil
Return .t.
//------------------------------------------------------------------------------
FUNCTION ExtraerDatodelTexto ( cTexto ,cTextoAntes , cTextoDespues )
LOCAL nLenTextoAntes := Len( cTextoAntes )
LOCAL nLenTextoDespues := Len( cTextoDespues )
LOCAL nInicio := At(cTextoAntes,cTexto) + nLenTextoAntes
LOCAL nFin := At(cTextoDespues,cTexto)
LOCAL cDato := ""
IF nFin == 0
nFin := nil
endif
IF nInicio != 0
cDato := SubStr( cTexto , nInicio , nFin )
ELSE
msginfo("no se encuentra el delimitador inicial")
cDato := ""
endif
msginfo( cDato )
RETURN nil