lo scopo è generale al volo un file pdf secondo la richiesta del client.
Utilizza i componenti synapse.
sock come si può dedurre è il Socket
Sock:TTCPBlockSocket;

Non sono ancora riuscito a capire l'origine del problema :
su Mozilla funzione e visualizza il pdf su IE lo invia al browser come testo, incluso l'header. Il file pdf è poi integro con %PDF etc...

La procedure che genera il pdf e lo invia è qui sotto.
La chiamata di esempio è
http://www.mondobimbi.com:9090/catal...?fornitore=CHE

Codice PHP:
procedure TTCPHttpThrd.Catalogo (URIstring);
var
  
THandle;
  
size longInt;
  
ninteger;
  
buf pointer;
  
DIR_PROGDIR_TETEX  string;
begin

    DIR_PROG  
:= iniFile.ReadString('Pdf''Directory programmi''/home/sergio/latex');
    if 
DIR_PROG <> '' then
        
if DIR_PROG[length(DIR_PROG)] <> '/' then DIR_PROG := DIR_PROG '/';

    
DIR_TETEX  := iniFile.ReadString('Pdf''Directory teTeX''');
    if 
DIR_TETEX <> '' then
    
if DIR_TETEX[length(DIR_TETEX)] <> '/' then DIR_TETEX := DIR_TETEX '/';

    
// separa l'uri
    
:= Pos('?'uri);
    
uri := Copy(urip+1Length(uri)-p);

    
SetCurrentDir(DIR_PROG);

    
// genera il file .tex
    
with TGeneraPdf.Create('pdf') do
    
begin
        Catalogo
('Catalogo'uri);
        
Free;
    
end;

    
// chiama il motore teTeX
    
shell(DIR_TETEX 'pdflatex prova1.tex');
    
// sistema l'indice
    
shell(DIR_TETEX 'makeindex prova1.tex');
    
// riavvia il motore in modo che inserisca l'indice
    
shell(DIR_TETEX 'pdflatex prova1.tex');

    
// l'output è il file pdf
    
:= FileOpen(DIR_PROG 'prova1.pdf'fmOpenread);

    
// determino la dimensione
    
size := FileSeek(F0fsfromEnd);

    
getmem(bufsize);

    
FileSeek(F0fsfromBeginning);
    
FileRead(Fbuf^, size);

    
FileClose(F);


    
// headers è un TStringList
    
headers.Add('Content-type: application/pdf');
    
headers.Add('Content-length: ' IntTostr(Size));
    
headers.Add('Content-Disposition: inline; filename=catalogo.pdf');
    
headers.Add('Connection: close');
    
headers.Add('Date: ' Rfc822DateTime(now));
    
headers.Add('Server: ProSim');
    
headers.Add('');
    
// invia l'headear
    
for := 0 to headers.count do
        
Sock.sendstring(headers[n] + CRLF);

    
// invia il buffer
    
Sock.SendBuffer(bufsize);
    
    
freemem(bufsize);

end
spero che qualcuno capisca dove sia l'errore
grazie
sergio