Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-11-2017
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 21
adebonis Va por buen camino
Buscar una cadena en un archivo pdf

Buenos días.

Utilizo Delphi 2007 y necesito verificar la existencia de la cadena "%%EOF" dentro de un archivo pdf, que es el indicativo de final de fichero.

Supongo que seria correcto utilizar TFileStream para leer el archivo pdf, pero no sé cómo llegar a verificar si existe la cadena en el archivo.

Si alguien puede darme alguna idea se lo agradecería.

Adolfo de Bonis.
Responder Con Cita
  #2  
Antiguo 15-11-2017
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
En ocaciones PDF maneja los archivos como imagenes....y asi es imposible buscar texto. Ahora, si el archivo en cuestion su origen es WORD o algun otro procesador y desde ahi lo convierten a PDF, entonces es posible lo q tu quieres hacer....entonces partamos desde ahi.

Como están tus archivos?...como "imagen" (scaneado) en PDF o archivo PDF con origen desde un procesador de texto?...

Ahora, en caso de que el origen del documento sea WORD o EXCEL, se puede grabar el archivo PDF como texto y apartir de ahi buscar la cadena que necesitas.

Tambien puedes consultar este link
o este otro http://www.ajpdsoft.com/modules.php?...etails&lid=202

Espero estos links resuelvan tu problema. Pos'n ahi nos avisas !
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 15-11-2017 a las 20:24:08.
Responder Con Cita
  #3  
Antiguo 15-11-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por adebonis Ver Mensaje
Buenos días.

Utilizo Delphi 2007 y necesito verificar la existencia de la cadena "%%EOF" dentro de un archivo pdf, que es el indicativo de final de fichero.

Supongo que seria correcto utilizar TFileStream para leer el archivo pdf, pero no sé cómo llegar a verificar si existe la cadena en el archivo.

Si alguien puede darme alguna idea se lo agradecería.

Adolfo de Bonis.
No me queda claro lo que buscas. La cadena %%EOF, como dices, indica el final del archivo. Entonces, debes buscar al final:

Código Delphi [-]
function EsPdf(Archivo: TFileName): Boolean;
var
  F: TFileStream;
  S: String;

begin
  F := TFileStream.Create(Archivo, fmOpenRead);

  try
    F.Seek(-6, soEnd);
    SetLength(S, 5);
    F.Read(S[1], 5);
  finally
    F.Free;
  end;

  Result := (S = '%%EOF');
end;

¿O se trata de un PDF encajado dentro de otro archivo más grande?

LineComment Saludos
Responder Con Cita
  #4  
Antiguo 15-11-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Tal como te indica roman, la cadena %%EOF se sitúa en la última línea del archivo PDF para indicar su final (PDF Reference).
Y dado que allí debe estar, no se me ocurre código más eficiente que el que te indica para hallarla.

Ahora, si desearas buscar cualquier cadena en cualquier archivo, podrías hacer:
Código Delphi [-]
function ExistsStrInFile(const SearchedStr, FileName: string): Int64;
var
  FS    : TStream;
  i, cc : Integer;
  ch    : Char;
begin
  Result := -1;
  FS := TFileStream.Create(FileName, fmOpenReadWrite);
  try
    FS.Position := 0;
    cc := 1;
    i  := 0;
    while (Result=-1) and (i < FS.Size) do
    begin
      FS.Read(ch, SizeOf(ch));
      if cc = Length(SearchedStr) then
      begin
        Result := FS.Position - Length(SearchedStr);
        Break;
      end;
      if ch = SearchedStr[cc] then
        Inc(cc)
      else
        cc := 1;
      Inc(i);
    end;
  finally
    FS.Free;
  end;
end;
la función devuelve -1 si no halla coincidencia o la posición en caso contrario, pero claramente no es eficiente para el caso anterior.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 17-11-2017
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 21
adebonis Va por buen camino
Gracias todos. El codigo de roman funciona perfectamente.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Buscar cadena en un archivo binario ZayDun Varios 10 11-10-2014 08:58:23
Funciones para limpiar y buscar una cadena en otra cadena o en un fichero xaguilars Trucos 1 29-07-2007 23:20:14
Funcion para buscar cadena dentro de otra cadena y el numero de veces flystar Varios 3 02-07-2007 23:48:08
Buscar número en cadena torito Varios 4 19-04-2004 20:05:25
Buscar cadena dentro de otra cadena doverzhoff Varios 4 27-01-2004 06:27:15


La franja horaria es GMT +2. Ahora son las 16:05:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi