1

我正在使用 Delphi XE3 编写 Windows 服务。该服务将从数据库中读取,使用 quickreport 5.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 上的“显示进度”。编写一些代码来捕获异常表明它确实抛出了一个异常。消息是“当前没有选择默认打印机”。所以这让我相信运行该服务的本地系统用户没有安装任何打印机,这就是问题所在。

4

1 回答 1

1

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

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

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

于 2014-10-08T19:33:34.097 回答