Создать PDF с помощью QuickReport из службы Windows в Delphi

Я пишу Windows-сервис, используя Delphi XE3. Сервис собирается читать из базы данных, генерировать pdf с использованием quickreport 5.05.1. Я планирую сгенерировать PDF с помощью TQRPDFDocumentFilter.

Все нормально работает в обычном приложении VCL, но когда я внедряю его в службу Windows, служба зависает (без каких-либо исключений), когда я выполняю QuickRep.Prepare.

Я прочитал, что можно использовать QuickReport в службе Windows, но я не знаю, как. Какие-либо предложения?

Где код:

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, как это было предложено в другой теме. Написание некоторого кода для отлова исключения показывает, что оно действительно выдает его. Сообщение "В данный момент принтер по умолчанию не выбран". Таким образом, это заставляет меня поверить, что у пользователя локальной системы, под которым работает служба, нет установленных принтеров, и в этом проблема.

1 ответ

Решение

Я решил похожую проблему (печать на общем сетевом принтере с сервера Java, работающего в качестве службы Windows) с помощью следующих шагов:

  • войдите в систему как пользователь, который будет запускать службу
  • установить принтер

IIRC с приложениями Delphi, имя принтера не чувствительно к регистру (в Java это так).

Другие вопросы по тегам