如何使用idhttpserver为浏览器回复pdf?

时间:2016-01-19 01:05:02

标签: delphi-7 indy

我&#39;有一个在delphi7中创建的服务器应用程序,我正在使用idhttpserver,当我的网站用户通过GET传递参数请求报告时,我希望用pdf版本的报告回复此客户端,我该怎么做?< / p>

1 个答案:

答案 0 :(得分:4)

您必须自己生成PDF报告,这不是Indy的范围。请确保以线程安全的方式执行此操作,因为TIdHTTPServer是一个使用工作线程处理客户端请求的多线程组件。

TIdHTTPServer.OnCommandGet事件中,如果ARequestInfo.Params为true,则可以通过TIdHTTPServer.ParseParams属性访问请求的参数,否则您可以手动解析ARequestInfo.QueryParams属性的值。要将报告发送回客户端,您可以:

  1. 将报告保存到.pdf文件,然后调用AResponseInfo.ServeFile()方法。例如:

    procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
      ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
    begin
       // handle request parameters...
       // generate PDF to file...
       AResponseInfo.ServeFile(AContext, 'C:\path to\report.pdf');
    end;
    
  2. 将报告保存到TStream对象,将其分配给AResponseInfo.ContentStream属性(TIdHTTPServer将获得它的所有权),并设置AResponseInfo.ContentType属性到'application/pdf'。例如:

    procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
      ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
    begin
       // handle request parameters...
       AResponseInfo.ContentType := 'application/pdf';
       AResponseInfo.ContentStream := TMemoryStream.Create;
       // generate PDF into ContentStream...
    end;