Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [free pascal] server http

    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

  2. #2
    il concentrarsi sul problema aiuta a risolverlo,
    mancava il codice di ritorno

    sock.SendString('HTTP/1.0 ' + IntTostr(ResultCode) + CRLF);

    prima di inviare l'header, stranamente mozillo lo accetta comunque.

    ciao
    sergio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.