extractor de texto de un PDF
Re: extractor de texto de un PDF
Huyyyyyyyyyy el programita lee tu pdf pero lo estoy escuchando
esta largo escucho el contenido del PDF
por que pasas eso
Saluditos
esta largo escucho el contenido del PDF
por que pasas eso
Saluditos
Que es mejor que programar? creo que nada
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: extractor de texto de un PDF
Paralo desde el administrador de tareas. Se puede parar por programación, pondré un ejemplo
Re: extractor de texto de un PDF
si ya lo pare
de pronto inicio a escucharse el audio del texto del PDf que me mandaste
pero no creo el TXT
Saluditos
de pronto inicio a escucharse el audio del texto del PDf que me mandaste
pero no creo el TXT
Saluditos
Que es mejor que programar? creo que nada
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: extractor de texto de un PDF
El fichero debe estar en el directorio raiz de C:
Puedes cambiar el lugar en donde quieras que se cree modificando mi programa, busca por CurDrive()
Puedes cambiar el lugar en donde quieras que se cree modificando mi programa, busca por CurDrive()
Re: extractor de texto de un PDF
si el archivito pdf esta en c:
pero sigo escuchándolo y si uso otro pdf se atora
Saluditos
pero sigo escuchándolo y si uso otro pdf se atora
Saluditos
Que es mejor que programar? creo que nada
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: extractor de texto de un PDF
El que lo lea es algo que no es necesario, lo hice solo por probarlo, con llamar a la funcion GetText() consigues que se cree el fichero de texto
Re: extractor de texto de un PDF
Hola
Me imagino que lo que se escucha es el curl.txt pero no lo encuentro en C: y por ningún lado como si estuviera invisible
Saluditos
Me imagino que lo que se escucha es el curl.txt pero no lo encuentro en C: y por ningún lado como si estuviera invisible
Saluditos
Que es mejor que programar? creo que nada
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: extractor de texto de un PDF
Tienes permisos de escritura en C:\ ?
Quita la llamada a hb_CurDrive() en el código y asi se creará en donde estes ejecutando el EXE, o ponle el path que desees
Quita la llamada a hb_CurDrive() en el código y asi se creará en donde estes ejecutando el EXE, o ponle el path que desees
Re: extractor de texto de un PDF
okis ya por fin lo puedo ver
ahora probare con un documento de los que tengo que sacar datos
y te comento
ya use un pdf que me dieron de ejemplo y el txt sale con pura basura
Saluditos
ahora probare con un documento de los que tengo que sacar datos
y te comento
ya use un pdf que me dieron de ejemplo y el txt sale con pura basura
Saluditos
Que es mejor que programar? creo que nada
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: extractor de texto de un PDF
Aida,
Algo que descubrí hace unos dias es que el contenido de un PDF es semi ascii, asi que puedes abrirlo con tu editor de código fuente (yo uso el visor del Total Commander) y busca por "/Filter /FlateDecode". Si no aparece, busca por "/Filter" y mira cual es la siguiente palabra.
De un PDF a otro el "filtro" que se use puede cambiar. El código que yo he publicado es para analizar el filtro /FlateDecode solamente y aun asi en ese pdf que te envié, descubri que habia que hacer una conversion posterior. Igual en tus PDFs no hace falta.
Junto al fichero TXT que se crea, se crea un archivo ".out" qu contiene el texto tal cual, sin ninguna interpretación. Igual ahi se ve bien.
Algo que descubrí hace unos dias es que el contenido de un PDF es semi ascii, asi que puedes abrirlo con tu editor de código fuente (yo uso el visor del Total Commander) y busca por "/Filter /FlateDecode". Si no aparece, busca por "/Filter" y mira cual es la siguiente palabra.
De un PDF a otro el "filtro" que se use puede cambiar. El código que yo he publicado es para analizar el filtro /FlateDecode solamente y aun asi en ese pdf que te envié, descubri que habia que hacer una conversion posterior. Igual en tus PDFs no hace falta.
Junto al fichero TXT que se crea, se crea un archivo ".out" qu contiene el texto tal cual, sin ninguna interpretación. Igual ahi se ve bien.
Re: extractor de texto de un PDF
a si esta
"/Filter /FlateDecode/length 7146/type/xobject
no me sale ningun achivito ".out"
Saluditos
"/Filter /FlateDecode/length 7146/type/xobject
no me sale ningun achivito ".out"
Saluditos
Que es mejor que programar? creo que nada
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Re: extractor de texto de un PDF
Aida,
entre las librerías del maestro William Morales,
tenemos una forma, de convertir pdf a txt
una vez en texto se puede extraer los datos
yo lo he hecho con archivos de hasta de 1500 paginas
si te interesa estamos en el skype o envianos un correo.
Saludos..
entre las librerías del maestro William Morales,
tenemos una forma, de convertir pdf a txt
una vez en texto se puede extraer los datos
yo lo he hecho con archivos de hasta de 1500 paginas
si te interesa estamos en el skype o envianos un correo.
Saludos..
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: extractor de texto de un PDF
Aida,
Si me envias por email uno de tus pdfs le echo un vistazo a ver si hay algo diferente
Si me envias por email uno de tus pdfs le echo un vistazo a ver si hay algo diferente
Re: extractor de texto de un PDF
Hola Antonio
ya te mande el PDF a tu box privado de facebook
cuidate mucho
Saluditos
ya te mande el PDF a tu box privado de facebook
cuidate mucho
Saluditos
Que es mejor que programar? creo que nada
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Atropellada pero aqui ando
I love Fivewin
séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: extractor de texto de un PDF
Aida,
Prueba con esta versión. A mi me genera un fichero c:\curl.out en donde esta el texto
No copio el resultado aqui por confidencialidad de los datos, si quieres te lo envio por email o facebook
Prueba con esta versión. A mi me genera un fichero c:\curl.out en donde esta el texto
No copio el resultado aqui por confidencialidad de los datos, si quieres te lo envio por email o facebook
Code: Select all
#include "FiveWin.ch"
function Main()
local oVoice := TOleAuto():New( "Sapi.SPVoice" )
local cText := GetText( "c:\curl.pdf" )
oVoice:Speak( "c:\curl.txt", 4 )
return nil
function GetText( cPdfFile )
local cPDF := MemoRead( cPdfFile )
local nStart := At( "stream", cPDF )
local nEnd := At( "endstream", cPDF )
local cBuf := Replicate( Chr( 0 ), ( nEnd - nStart ) * 10 )
local cText, nResult, cTemp
local hFile, cResult := ""
local n := 1
if ! File( hb_CurDrive() + ":\" + cFileNoExt( cPdfFile ) + ".out" )
hFile = fcreate( hb_CurDrive() + ":\" + cFileNoExt( cPdfFile ) + ".out", "wb" )
else
hFile = fopen( hb_CurDrive() + ":\" + cFileNoExt( cPdfFile ) + ".out", "wb" )
endif
while "stream" $ cPDF
nStart = At( "stream", cPDF )
nEnd = At( "endstream", cPDF )
if nStart == 0
cPDF = ""
exit
endif
cBuf = Replicate( Chr( 0 ), ( nEnd - nStart ) * 10 )
cText = SubStr( cPDF, nStart + 6, nEnd - nStart )
if Left( cText, 1 ) == Chr( 0x0d ) .and. ;
SubStr( cText, 2, 1 ) == Chr( 0x0a )
nStart += 2
elseif Left( cText, 1 ) == Chr( 0x0a )
nStart++
endif
if SubStr( cText, nEnd - 2, 1 ) == Chr( 0x0d ) .and. ;
SubStr( cText, nEnd - 1, 1 ) == Chr( 0x0a )
nEnd -= 2
elseif SubStr( cText, nEnd - 1, 1 ) == Chr( 0x0a )
nEnd--
endif
HB_ZUNCOMPRESS( SubStr( cPDF, nStart + 6, nEnd - nStart ), @cBuf, @nResult )
cTemp = cBuf
/*
while "[" $ cTemp
// OutputDebugString( "dentro del bucle Translate" + CRLF )
if ! "]" $ cTemp
exit
endif
cResult += Translate( SubStr( cTemp, At( "[", cTemp ), At( "]", cTemp ) - At( "[", cTemp ) + 1 ) )
cTemp = SubStr( cTemp, At( "]", cTemp ) + 1 )
end
*/
// OutputDebugString( Str( Len( cPDF ) ) )
// OutputDebugString( If( Empty( cPDF ), " * Empty", " * not empty" ) + CRLF )
ProcessOutput( hFile, cBuf )
cPDF = SubStr( cPDF, nEnd + Len( "endstream" ) + 1 )
end
// OutputDebugString( "done" )
FClose( hFile )
MemoWrit( hb_CurDrive() + ":\" + cFileNoExt( cPdfFile ) + ".txt", cResult )
return cResult
function Translate( cText )
local cCode, cResult := ""
local nStart, nEnd, n
cText = SubStr( cText, 2, Len( cText ) - 2 )
while "<" $ cText
nStart = At( "<", cText )
nEnd = At( ">", cText )
cCode = SubStr( cText, nStart + 1, nEnd - nStart - 1 )
for n = 1 to Len( cCode ) step 4
cResult += Chr( hb_HextoNum( SubStr( cCode, n, 4 ) ) )
next
if nEnd != 0
cText = SubStr( cText, nEnd + 1 )
else
cText = ""
endif
end
return cResult + " "
#pragma BEGINDUMP
#include <hbapi.h>
#include <wtypes.h>
#define oldchar 15
float ExtractNumber(const char* search, int lastcharoffset)
{
float flt=-1.0;
int i = lastcharoffset;
char buffer[oldchar+5];
while (i>0 && search[i]==' ') i--;
while (i>0 && (isdigit(search[i]) || search[i]=='.')) i--;
ZeroMemory(buffer,sizeof(buffer));
strncpy(buffer, search+i+1, lastcharoffset-i);
if (buffer[0] && sscanf(buffer, "%f", &flt))
{
return flt;
}
return -1.0;
}
BOOL seen2(const char* search, char* recent)
{
if ( recent[oldchar-3]==search[0]
&& recent[oldchar-2]==search[1]
&& (recent[oldchar-1]==' ' || recent[oldchar-1]==0x0d ||
recent[oldchar-1]==0x0a)
&& (recent[oldchar-4]==' ' || recent[oldchar-4]==0x0d ||
recent[oldchar-4]==0x0a)
)
{
return TRUE;
}
return FALSE;
}
#include <hbapifs.h>
int iPos = 0;
static int xputc( unsigned char c, FILE * fo )
{
return hb_fsWriteAt( ( HB_FHANDLE ) fo, &c, 1, iPos++ );
}
void ProcessOutput(FILE* file, char* output, size_t len)
{
//Are we currently inside a text object?
BOOL intextobject = FALSE;
//Is the next character literal (e.g. \\ to get a \ character or \( to get ( ):
BOOL nextliteral = FALSE;
//() Bracket nesting level. Text appears inside ()
int rbdepth = 0;
//Keep previous chars to get extract numbers etc.:
char oc[oldchar];
int j;
size_t i;
for (j=0; j<oldchar; j++)
oc[j]=' ';
for( i=0; i<len; i++)
{
unsigned char c = output[i];
if (intextobject)
{
if (rbdepth==0 && seen2("TD", oc))
{
//Positioning.
//See if a new line has to start or just a tab:
float num = ExtractNumber(oc,oldchar-5);
if (num>1.0)
{
xputc(0x0d, file);
xputc(0x0a, file);
}
if (num<1.0)
{
xputc('\t', file);
}
}
if (rbdepth==0 && seen2("ET", oc))
{
//End of a text object, also go to a new line.
intextobject = FALSE;
xputc(0x0d, file);
xputc(0x0a, file);
}
else if (c=='(' && rbdepth==0 && !nextliteral)
{
int num;
//Start outputting text!
rbdepth=1;
//See if a space or tab (>1000) is called for by looking
//at the number in front of (
num = ExtractNumber(oc,oldchar-1);
if (num>0)
{
if (num>1000.0)
{
xputc('\t', file);
}
else if (num>100.0)
{
xputc(' ', file);
}
}
}
else if (c==')' && rbdepth==1 && !nextliteral)
{
//Stop outputting text
rbdepth=0;
}
else if (rbdepth==1)
{
//Just a normal text character:
if (c=='\\' && !nextliteral)
{
//Only print out next character no matter what. Do not interpret.
nextliteral = TRUE;
}
else
{
nextliteral = FALSE;
if ( ((c>=' ') && (c<='~')) || ((c>=128) && (c<255)) )
{
xputc(c, file);
}
}
}
}
//Store the recent characters for when we have to go back for a number:
for (j=0; j<oldchar-1; j++) oc[j]=oc[j+1];
oc[oldchar-1]=c;
if (!intextobject)
{
if (seen2("BT", oc))
{
//Start of a text object:
intextobject = TRUE;
}
}
}
}
HB_FUNC( PROCESSOUTPUT )
{
ProcessOutput( ( FILE * ) hb_parnl( 1 ), ( char * ) hb_parc( 2 ), hb_parclen( 2 ) );
}
#pragma ENDDUMP