Создать 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 это так).