/FastReportExport

⚡ Biblioteca de exportação de relatórios utilizando Fast Report em ambientes multithreading e não GUI(Graphical User Interface).

Primary LanguagePascalApache License 2.0Apache-2.0

Maintained YES Memory Leak Verified YES Release Stars Forks Issues
Compatibility Delphi Supported Versions Fastreport Supported Versions

FastReportExport

FastReportExport é uma biblioteca para exportação de relatórios com Fast Report para ambientes multithreading e não GUI(Graphical User Interface).

Implementado na linguagem Delphi, utiliza o conceito de fluent interface para guiar no uso da biblioteca, desenvolvido para exportar relatórios nos formatos PDF, HTML, PNG, entre outros, conforme a necessidade.

Ambientes

  • Windows Forms
  • Windows Console
  • Windows Service
  • IIS ISAPI(Horse)
  • IIS CGI(Horse)

⭕ Pré-requisito

Para utilizar o FastReportExport é necessário a instalação do componente Fast Report.

⚙️ Instalação Automatizada

Utilizando o Boss (Dependency manager for Delphi) é possível instalar a biblioteca de forma automática.

boss install github.com/antoniojmsjr/FastReportExport

⚙️ Instalação Manual

Se você optar por instalar manualmente, basta adicionar as seguintes pastas ao seu projeto, em Project > Options > Delphi Compiler > Target > All Configurations > Search path

..\FastReportExport\Source

🧬 Provedores de Exportação

Providers é uma interface utilizada pela biblioteca para exportação dos relatórios que disponibiliza a classe TfrxCustomExportFilter para configuração, e pode ser extendida para implementação de outros formatos de arquivo.

Arquivo Provedor TfrxCustomExportFilter
PDF IFRExportPDF TfrxPDFExport
HTML IFRExportHTML TfrxHTMLExport
PNG IFRExportPNG TfrxPNGExport
BMP IFRExportBMP TfrxBMPExport
JPEG IFRExportJPEG TfrxJPEGExport
CSV IFRExportCSV TfrxCSVExport
RTF IFRExportRTF TfrxRTFExport
XLS IFRExportXLS TfrxXLSExport
XLSX IFRExportXLSX TfrxXLSXExport
DOCX IFRExportDOCX TfrxDOCXExport

Exemplo

var
  lFRExportPDF: IFRExportPDF;
  lFRExportHTML: IFRExportHTML;
  lFRExportPNG: IFRExportPNG;
begin

  //PROVIDER PDF
  lFRExportPDF := TFRExportProviderPDF.New;
  lFRExportPDF.frxPDF.Subject := 'Samples Fast Report Export';
  lFRExportPDF.frxPDF.Author := 'Antônio José Medeiros Schneider';

  //PROVIDER HTML
  lFRExportHTML := TFRExportProviderHTML.New;

  //PROVIDER PNG
  lFRExportPNG := TFRExportProviderPNG.New;
  lFRExportPNG.frxPNG.JPEGQuality := 100;

end;

🧬 DataSet de Exportação

DataSets é uma interface utilizada pela biblioteca para comunicação com o banco de dados através dos componentes:

Classe Componente
TDataSet Nativo
TfrxDBDataset Fast Report

⚡️ Uso da biblioteca

Para exemplificar o uso do biblioteca foi utilizado os dados da API de localidades do IBGE para geração e exportação do relatório.

Arquivo de exemplo da exportação: LocalidadesIBGE.pdf

Os exemplos estão disponíveis na pasta do projeto:

..\FastReportExport\Samples

Banco de dados de exemplo

..\FastReportExport\Samples\DB

Relatório de exemplo

..\FastReportExport\Samples\Report

Exemplo

uses FRExport, FRExport.Types, FRExport.Interfaces.Providers;
var
  lFRExportPDF: IFRExportPDF;
  lFRExportHTML: IFRExportHTML;
  lFRExportPNG: IFRExportPNG;
  lFileStream: TFileStream;
  lFileExport: string;
begin

  //PROVIDER PDF
  lFRExportPDF := TFRExportProviderPDF.New;
  lFRExportPDF.frxPDF.Subject := 'Samples Fast Report Export';
  lFRExportPDF.frxPDF.Author := 'Antônio José Medeiros Schneider';

  //PROVIDER HTML
  lFRExportHTML := TFRExportProviderHTML.New;

  //PROVIDER PNG
  lFRExportPNG := TFRExportProviderPNG.New;
  lFRExportPNG.frxPNG.JPEGQuality := 100;

  //CLASSE DE EXPORTAÇÃO
  try
    TFRExport.New.
      DataSets.
        SetDataSet(qryEstadosBrasil, 'EstadosBrasil').
        SetDataSet(frxdbMunicipioEstado).
        SetDataSet(frxdbMunicipioRegiao).
        SetDataSet(qryEstadoRegiao, 'EstadoRegiao').
        SetDataSet(qryMunicipios, 'Municipios').
      &End.
      Providers.
        SetProvider(lFRExportPDF).
        SetProvider(lFRExportHTML).
        SetProvider(lFRExportPNG).
      &End.
      Export.
        SetFileReport(TUtils.PathAppFileReport). //LOCAL DO RELATÓRIO *.fr3
        Report(procedure(pfrxReport: TfrxReport) //CONFIGURAÇÃO DO COMPONENTE DE RELATÓRIO DO FAST REPORT
          var
            lfrxComponent: TfrxComponent;
            lfrxMemoView: TfrxMemoView absolute lfrxComponent;
          begin
            pfrxReport.ReportOptions.Author := 'Antônio José Medeiros Schneider';

            //PASSAGEM DE PARÂMETRO PARA O RELATÓRIO
            lfrxComponent := pfrxReport.FindObject('mmoProcess');
            if Assigned(lfrxComponent) then
            begin
              lfrxMemoView.Memo.Clear;
              lfrxMemoView.Memo.Text := Format('Aplicativo de Exemplo: %s', ['VCL']);
            end;

			//VARIÁVEIS DO RELATÓRIO
            pfrxReport.Variables.Variables['DATA_HORA_IMPRESSAO'] := QuotedStr(DateTimeToStr(Now));
          end).
        Execute; //EXECUTA O PROCESSO DE EXPORTAÇÃO DO RELATÓRIO
  except
    on E: Exception do
    begin
      if E is EFRExport then
        ShowMessage(E.ToString)
      else
        ShowMessage(E.Message);
      Exit;
    end;
  end;

  //SALVAR PDF
  if Assigned(lFRExportPDF.Stream) then
  begin
    lFileStream := nil;
    try
      lFileExport := Format('%s%s', [TUtils.PathApp, 'LocalidadesIBGE.pdf']);
      lFileStream := TFileStream.Create(lFileExport, fmCreate);
      lFileStream.CopyFrom(lFRExportPDF.Stream, 0);
    finally
      FreeAndNil(lFileStream);
    end;
  end;

  //SALVAR HTML
  if Assigned(lFRExportHTML.Stream) then
  begin
    lFileStream := nil;
    try
      lFileExport := Format('%s%s', [TUtils.PathApp, 'LocalidadesIBGE.html']);
      lFileStream := TFileStream.Create(lFileExport, fmCreate);
      lFileStream.CopyFrom(lFRExportHTML.Stream, 0);
    finally
      FreeAndNil(lFileStream);
    end;
  end;

  //SALVAR PNG
  if Assigned(lFRExportPNG.Stream) then
  begin
    lFileStream := nil;
    try
      lFileExport := Format('%s%s', [TUtils.PathApp, 'LocalidadesIBGE.png']);
      lFileStream := TFileStream.Create(lFileExport, fmCreate);
      lFileStream.CopyFrom(lFRExportPNG.Stream, 0);
    finally
      FreeAndNil(lFileStream);
    end;
  end;
end;

Exemplo compilado

Download: Demo.zip

Teste de stress para aplicações web usando JMeter:

..\FastReportExport\Samples\JMeter
FastReportExport.mp4

⚠️ Licença

FastReportExport is free and open-source software licensed under the License