如何使用 idhttpserver 为浏览器响应 pdf?
How to respond with a pdf for browser with idhttpserver?
我有一个用 delphi7 制作的服务器应用程序,我正在使用 idhttpserver,当我网站的用户通过 GET 传递参数请求报告时,我希望用报告的 pdf 版本响应这个客户端,怎么可能我这样做?
您必须自己生成 PDF 报告,这超出了 Indy 的范围。只需确保以 thread-safe 方式执行此操作,因为 TIdHTTPServer
是一个使用工作线程处理客户端请求的 multi-threaded 组件。
在TIdHTTPServer.OnCommandGet
事件中,如果TIdHTTPServer.ParseParams
为真,则可以通过ARequestInfo.Params
属性访问请求的参数,否则可以手动解析ARequestInfo.QueryParams
属性。要将报告发送回客户端,您可以:
将报告保存到 .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;
将报告保存到 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;
我有一个用 delphi7 制作的服务器应用程序,我正在使用 idhttpserver,当我网站的用户通过 GET 传递参数请求报告时,我希望用报告的 pdf 版本响应这个客户端,怎么可能我这样做?
您必须自己生成 PDF 报告,这超出了 Indy 的范围。只需确保以 thread-safe 方式执行此操作,因为 TIdHTTPServer
是一个使用工作线程处理客户端请求的 multi-threaded 组件。
在TIdHTTPServer.OnCommandGet
事件中,如果TIdHTTPServer.ParseParams
为真,则可以通过ARequestInfo.Params
属性访问请求的参数,否则可以手动解析ARequestInfo.QueryParams
属性。要将报告发送回客户端,您可以:
将报告保存到
.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;
将报告保存到
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;