使用Delphi中的Windows服务中的QuickReport生成PDF



我正在使用DelphiXE3编写一个windows服务。该服务将从数据库中读取,使用quickreport5.05.1生成pdf。我计划使用TQRPDFDocumentFilter生成pdf。

在普通的VCL应用程序中一切都很好,但当我在windows服务中实现它时,当我执行QuickRep.Prepare.时,服务会挂起(没有任何例外)

我读到在windows服务中使用QuickReport是可能的,但我不知道如何使用。有什么建议吗?

代码在哪里:

procedure foo
var
 pdfFilter: TQRPDFDocumentFilter;
begin
  with TForm2.Create(Self) do
  begin
    ClientDataSet1.Open;
    QuickRep1.Prepare;
    pdfFilter := TQRPDFDocumentFilter.Create(GetApplicationFolder() + 'test.pdf');
    try
      QuickRep1.QRPrinter.ExportToFilter(pdfFilter);
    finally
      pdfFilter.Free;
      ClientDataSet1.Close;
    end;
  end;
end;

编辑:我还试着关闭QuickReport上的"显示进度",如另一个线程中所建议的那样。编写一些代码来捕获异常,这表明它确实抛出了一个异常。消息为"当前没有选择默认打印机"。因此,这让我相信,运行该服务的本地系统用户没有安装任何打印机,这就是问题所在。

我已经通过以下步骤解决了类似的问题(从作为Windows服务运行的Java服务器打印到共享网络打印机):

  • 以将运行服务的用户身份登录
  • 安装打印机

IIRC在Delphi应用程序中,打印机名称不区分大小写(在Java中是这样)。

最新更新