Печать в потоке
Помогите решить такую проблему:
в процедуре, я в цикле из нескольких отчетов собираю один, затем передаю сформированный отчет в поток и там либо экспортирую в .pdf либо пытаюсь вывести на печать
с экспортом проблем нет, .pdf формируются
а при выводе на печать формируются задания на принтер и остаются висеть в очереди, пока приложение не будет закрыто.
Подскажите в чем затык?
в процедуре
в потоке
в процедуре, я в цикле из нескольких отчетов собираю один, затем передаю сформированный отчет в поток и там либо экспортирую в .pdf либо пытаюсь вывести на печать
с экспортом проблем нет, .pdf формируются
а при выводе на печать формируются задания на принтер и остаются висеть в очереди, пока приложение не будет закрыто.
Подскажите в чем затык?
в процедуре
Final_Report:=TfrxReport.Create(Application);
Page := TfrxReportPage.Create(Final_Report);
Page.PrintOnPreviousPage:=True;
Final_Report.EngineOptions.SilentMode := True;
Final_Report.EngineOptions.UseFileCache := False;
Final_Report.ShowProgress := False;
Final_Report.PrepareReport(true);
...
Reestr_Report.PrepareReport(True);
Final_Report.PreviewPages.AddFrom(Reestr_Report);
...
{удалим первую пустую страницу}
Final_Report.PreviewPages.DeletePage(0);
{передаем данные в поток}
Reestr_Thread:=TReestr_Thread.Create(True);
Reestr_Thread.Active_Form := f;
Reestr_Thread.Report:= Final_Report;
Reestr_Thread.FreeOnTerminate:=true;
Reestr_Thread.Priority:=tpLower ;
Reestr_Thread.Resume;
в потоке
procedure TReestr_Thread.Execute;
const
Dir_Name = 'c:\export_pdf';
var
PDF: TfrxPDFExport;
begin
try
if (FDevice = 0) then begin //на принтер
FReport.PrintOptions.ShowDialog := False;
FReport.Print;
end else begin
// печатаем в файл
PDF := TfrxPDFExport.Create(nil);
PDF.ShowDialog := False;
PDF.ShowProgress := False;
if not DirectoryExists(Dir_Name) then
if not CreateDir(Dir_Name) then
raise Exception.Create('Cannot create '+Dir_Name);
PDF.FileName := Dir_Name+'\report_'+ IntToStr(FQuery_id) + '_' + FormatDateTime('YYYYYMMDDHHMMSS', Now) + '.pdf';
FReport.Export(PDF);
end;
finally
if Assigned(PDF) then PDF.free;
Synchronize(Form_Free);
end;
end;