2014-10-08 3 views
1

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

Все работает нормально в обычном приложении 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; 

Edit: Я также попытался выключая «показать прогресс» на QuickReport, как предложено в другом потоке. Написание кода для исключения исключений показывает, что он действительно выбрасывает его. Появится сообщение «В настоящее время не выбран принтер по умолчанию». Таким образом, это заставляет меня думать, что пользователь локальной системы, в котором работает служба, не имеет установленных принтеров и что это проблема.

+1

[Создание PDF с быстрыми отчетами за веб-сервером Delphi] (http://stackoverflow.com/questions/401743/generating-pdf-with-quick-reports-behind-a-delphi-web-server) – bummi

+0

Do вы начинаете свою службу с привилегий corect, чтобы записать ее в файлы? В Windows XP это не проблема, но в Windows Vista и новее существует несколько профилей привилегий, в которых запускаются службы. Они были реализованы для повышения безопасности путем ограничения того, что может сделать каждое устройство. – SilverWarior

+0

Bummi: Я уже прочитал эту тему. Похоже, что он смог ее решить, но предоставленная информация не дает никаких указаний о том, как это сделать. –

ответ

1

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

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

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

+0

Изменен мой сервис для запуска из локальной учетной записи пользователя вместо учетной записи локальной системы по умолчанию. Убедитесь, что на локальной учетной записи установлен принтер. Я не пытаюсь ничего печатать, но кажется, что QuickReport нуждается/проверяет принтеры, даже если я только конвертирую отчет в PDF. Мне удалось создать PDF сейчас. Спасибо за помощь. –

+0

Требуется ли Quickreport для печати на холсте? –

Смежные вопросы