Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Buscar una cadena en un archivo pdf (https://www.clubdelphi.com/foros/showthread.php?t=92505)

adebonis 15-11-2017 17:40:43

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.

mRoman 15-11-2017 19:10:32

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 !

roman 15-11-2017 19:56:07

Cita:

Empezado por adebonis (Mensaje 522534)
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

ecfisa 15-11-2017 20:58:16

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 :)

adebonis 17-11-2017 09:53:01

Gracias todos. El codigo de roman funciona perfectamente.


La franja horaria es GMT +2. Ahora son las 00:32:52.

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