FastReports пользовательская проблема предварительного просмотра - PullRequest
0 голосов
/ 12 ноября 2010

Я столкнулся с проблемой на FastReports, он не будет правильно печататься на страницах, которые содержат корейский символ.Это случается только на принтере HP K5300 jet, T-тестировать его с помощью rave и без проблем.Я думаю, что это ошибка для быстрых отчетов.Я уже преобразовал все свои отчеты из rave в FastReports и не планирую возвращаться назад.

Я планирую получить сгенерированные страницы в виде изображений, не сохраняя их на жестком диске, а затем сгенерировать новые препараты.На этот раз сгенерированные изображения будут использованы и распечатаны.Я знаю, что это решение не хорошо.Пока это жаль, пока они ждут ответов.

Кто-нибудь знает, как получить изображения из сгенерированных страниц?

Ответы [ 2 ]

1 голос
/ 13 ноября 2010

Если вы просто хотите избежать сохранения большого количества файлов, вы можете создать новый класс экспорта для печати файла сразу после его создания и мгновенного удаления.

Вы можете создать совершенно новый класс экспорта, который печатает растровое изображение из памяти (например, используя класс TPrinter и рисуя растровое изображение непосредственно на холсте принтера) ... вы узнаете, как проверять исходный файл класса TfrxBMPExport .

Возьмем этот непроверенный код в качестве примера, который поможет вам создать новый класс для сохранения / печати / удаления:

type
  TBMPPrintExport = class(TfrxBMPExport)
  private
    FCurrentPage: Integer;
    FFileSuffix: string;
  protected
    function Start: Boolean; override;
    procedure StartPage(Page: TfrxReportPage; Index: Integer); override;
    procedure Save; override;
  end;


{ TBMPPrintExport }

procedure TBMPPrintExport.Save;
var
  SavedFileName: string;
begin
  inherited;
  if SeparateFiles then
    FFileSuffix := '.' + IntToStr(FCurrentPage)
  else
    FFileSuffix := '';
  SavedFileName := ChangeFileExt(FileName, FFileSuffix + '.bmp');
  //call your actual printing routine here.  Be sure your the control returns here when the bitmap file is not needed anymore.
  PrintBitmapFile(SavedFileName);
  try
    DeleteFile(SavedFileName);
  except
    //handle exceptions here if you want to continue if the file is not deleted 
    //or let the exception fly to stop the printing process.
    //you may want to add the file to a queue for later deletion
  end;
end;

function TBMPPrintExport.Start: Boolean;
begin
  inherited;
  FCurrentPage := 0;
end;

procedure TBMPPrintExport.StartPage(Page: TfrxReportPage; Index: Integer);
begin
  inherited;
  Inc(FCurrentPage);
end;

В рабочем коде вы захотите переопределить другие методы для инициализации и завершения работы принтера, очистки и т. Д.

Код основан на реализации TfrxCustomImageExport в FastReport v4.0, специально для нумерации страниц и имен файлов. Может потребоваться корректировка для других версий FastReport.

1 голос
/ 12 ноября 2010

Вы можете использовать компонент TfrxBMPExport (модуль frxExportImage), чтобы сохранить отчет как BMP.

Например, этот код будет экспортировать отчет:

procedure ExportToBMP(AReport: TfrxReport; AFileName: String = '');
var
  BMPExport: TfrxBMPExport;

begin
  BMPExport := TfrxBMPExport.Create(nil);
  try
    BMPExport.ShowProgress := True;
    if AFileName <> '' then
    begin
      BMPExport.ShowDialog := False;
      BMPExport.FileName := AFileName;
      BMPExport.SeparateFiles := True;
    end;
    AReport.PrepareReport(True);
    AReport.Export(BMPExport);
  finally
    BMPExport.Free;
  end;
end;

Компонент экспорта в этом случае использует разные имена файлов для каждой страницы. Если в качестве имени файла вы передадите «c: \ path \ report.bmp», компонент экспорта сгенерирует c: \ path \ report.1.bmp, c: \ path \ report.2.bmp и т.

Как обычно, вы можете удалить и вручную настроить компонент в любом модуле формы / данных, если вы предпочитаете этот способ.

...