PDA

Ver la Versión Completa : llamada post con indy ,enlace con webbrowser


Galahad
05-04-2015, 18:46:49
Hola, buenas tardes...

Estoy haciendo una peticion 'post' con los componentes indy a una página web de la agencia tributaria.
Dicha página devuelve, en caso de que sea correcta la llamada con todos los parámetros una página web con un archivo pdf
con una serie de datos fiscales, en caso de que sea incorrecta o el servicio no esté disponible devuelve una página html indicando el error.
La llamada funciona perfectamente, devuelve un memorystream al cual accedo con un webbrowser y me encuentro con el archivo pdf o la página html,
el problema es que necesitaria 'saber' antes de hacer el wb.navigate,, si el documento que voy a visualizar es de un tipo o de otro.
He estado mirando de 'parsear' el documento del webbrowser,, pero no he encontrado como hacerlo.
Este es el código, a ver si a alguien se le ocurre algo.
Un saludo y gracias anticipadas.

var fS: TFileStream;
fName,ext: String;
aStream: TMemoryStream;
LHandler: TIdSSLIOHandlerSocketOpenSSL;
Params :TStringStream;
IdHTTP1 : TIdHTTP;
begin
aStream := TMemoryStream.create;
Params := TStringStream.create('');
IdHTTP1:=TIdHTTP.Create(nil);
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
IdHTTP1.IOHandler:=LHandler;
with IdHTTP1 do
begin
Request.ContentType := 'application/x-www-form-urlencoded';
try
Post( ruta, Params, aStream);
// pasamos el memorystream a un filestream
fS := TFileStream.Create(fName,fmCreate);
try
astream.SaveToStream(fS);
finally
fS.Free;
end;
if fileExists(fname)then
begin
wb := TWebBrowser.Create( Panel2 );
TWinControl(wb).Parent := Panel2;
TWinControl(wb).Name := 'ValidAEAT';
wb.Align := alClient;
wb.Navigate( fname ); // aqui obtengo o el pdf dentro de la página o la pagina html indicando el error.

while wb.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages;
end;
except
on E: Exception do
showmessage('Se encontró un error al Validar/Procesar el fichero.');
end;

end;

Neftali [Germán.Estévez]
07-04-2015, 11:13:46
...
el problema es que necesitaria 'saber' antes de hacer el wb.navigate,, si el documento que voy a visualizar es de un tipo o de otro.
He estado mirando de 'parsear' el documento del webbrowser,, pero no he encontrado como hacerlo.

Revisa la cabecera del fichero (stream).
Se que los PDF's tienen una cabecera estandard (según la versión hay varias, pero siempre es la misma).

MaxiDucoli
11-04-2015, 10:13:54
Hola, solo tenés que revisar que el Stream tenga esta cadena en su cabecera para saber si es PDF.

%PDF- o 0025-0050-0044-0046-002D

Espero te sirva. Saludos!!