Tipos de soluções para geração de relatórios e documentos

FastReport .NET

Conjuntos de componentes que automatizam e torna mais simples o processo de criação de relatórios e documentos em C# para diversas tecnologias.

FastReport VCL

Conjuntos de componentes VCL, FMX e Lazarus, com códigos-fonte complete, para criação de relatórios e documentos em Delphi e Pascal.

Relatórios na WEB

Componentes para projetos multiplataforma para desenvolver, construir, exibir, imprimir e exportar relatórios diretamente no navegador.

Soluções para usuário final

Soluções independents de software para projetar, criar, converter e visualizar relatórios prontos no seu computador.

OLAP e Business Graphics

Ferramentas de apresentação de dados e processamento analítico para obtenção de tabelas dinâmicas com posterior visualização com base em Business Graphics.

Soluções de serviços

Serviços prontos e sistemas cliente-servidor para visualização rápida de dados e execução automática de tarefas de processamento de informações.

News

06 de maio de 2025

Fast Reports no Brasil com relatórios e descontos de 25%

Convidamos você numa viagem "Delphi na Estrada" conosco! Visitaremos 8 cidades para compartilhar as últimas inovações no mundo da programação Delphi. Um dos co-fundadores da Fast Reports Inc., Michael Philippenko lhe falará sobre todas as vantagens da nova versão do FastReport VCL 2025.2: Componentes de relatório e dados externos ampliados; Revisão dos componentes TfrxPDFVIew, TfrxHTMLView e TfrxMapView; Conexão dos objetos a dados externos via DataLink; E muito mais! Escolha uma cidade que seja conveniente para descobrir novas oportunidades. Seja no Rio de Janeiro, em Porto Alegre ou em qualquer uma dessas 8 cidades, onde estaremos esperando por você para compartilhar suas experiências e conhecimentos valiosos. Mais informações sobre os relatórios e as cidades estão disponíveis aqui! Delphi na Estrada     Oferta especial em homenagem ao passeio! De 6 a 31 de Maio, inclusive, você pode adquirir soluções de geração de relatórios com 25% de desconto. Você tem uma grande oportunidade não apenas de economizar dinheiro, mas também de obter uma ferramenta poderosa para automatizar e simplificar os processos de geração de relatórios em seus desenvolvimentos. A oferta é válida para todos os conjuntos de componentes FastReport .NET e FastReport VCL somente se você adquirir uma licença completa. A promoção não se aplica a renovações e upgrades. Não demore - a oferta especial é válida por apenas algumas semanas!  Comprar com desconto     Localização em português Nosso site já está disponível em português! Isso abre novas oportunidades para você explorar informações com conforto e fazer compras. Escolher a solução certa para seu projeto ficou ainda mais fácil. Receba atualizações e notícias importantes imediatamente em seu idioma nativo. Não perca mais tempo com a tradução ou com a busca de informações em outras fontes. Estamos constantemente trabalhando para melhorar nosso site e a adição da localização em português é mais um passo para criar uma interface mais conveniente e agradável para você. Se tiver alguma dúvida ou solicitação, por favor, entre em contato com nossa equipe de suporte.
Ler
22 de abril de 2025

Atualização dos produtos Delphi e Lazarus para a versão 2025.2

Prepare-se para a tão esperada atualização de toda a linha de produtos Delphi e Lazarus! Com a versão 2025.2, você desfrutará de novos recursos interessantes, incluindo uma ferramenta fácil de usar para configurar marcas d'água, um conjunto atualizado de componentes de servidor, um novo mecanismo de página de diálogo para relatórios da web e o inovador objeto de relatório TfrxDeviceCommand para etiquetas RFID. Também fizemos melhorias significativas no mecanismo de relatórios, melhoramos as opções de exportação e transporte, adicionamos suporte a temas e muito mais! Atualize seu produto hoje e desbloqueie um mundo de novas possibilidades conosco!     Novos recursos no FastReport VCL Ferramenta De Personalização De Marca D'Água De Fácil Utilização Um recurso de marca d'água personalizável foi adicionado para páginas de relatório. As marcas d'água são frequentemente usadas para proteção de documentos ou para indicar o tipo de Documento. Introduzimos uma ferramenta fácil de utilizar que lhe permite configurar marcas de água para cada página do relatório sem esforço. Qualquer página do relatório pode ter várias marcas d'água, permitindo a personalização individual para impressão, exibição ou exportação. As marcas d'água podem utilizar imagens e texto, com uma ampla gama de parâmetros personalizáveis (rotação de texto, estilo). As marcas de água podem ser configuradas tanto no criador de relatórios como no modo de pré-visualização.   Actualização dos componentes do servidor Com o lançamento do 2025.2, todos os filtros de exportação disponíveis do FastReport VCL agora também estão disponíveis nos componentes do servidor. Tire partido de todos estes formatos na sua aplicação web.   Novo mecanismo para páginas de diálogo de Relatórios WEB O mecanismo completamente renovado permite a utilização de objectos de contentores, tais como PageControl e groups, bem como alargar a funcionalidade dos controlos disponíveis na página de diálogo para os diálogos web. Nesta atualização, expandimos o suporte para novos componentes para páginas de diálogo. Especificamente, adicionamos controles de página de diálogo que não estavam disponíveis anteriormente em WEB. Lista de novos controlos de formulário de diálogo: Date picker — selecionador de data DBComboBox — lista suspensa vinculada a uma fonte de dados List Box — lista de selecção CheckListBox — lista de seleção (com caixas de seleção) MaskEdit (sem máscara) — campo de entrada Password edit — campo de entrada para password PageControl — criação de páginas com separadores GroupControl — painel de agrupamento Panel — painel Agora você também pode aplicar um cabeçalho HTTP personalizado para seus projetos.   Novo Objeto De Relatório TfrxDeviceCommand Este objeto não visual é projetado para enviar comandos para dispositivos (exportações) que podem processar esses comandos. Na versão atual, o objeto contém uma classe settings para etiquetas RFID. As etiquetas RFID transmitem dados não visuais para a exportação ZPL para gravar esses dados no chip usando equipamento especializado. A classe de etiquetas RFID tem o seu próprio editor e conjunto de propriedades para um ajuste preciso da informação que está a ser escrita. Você pode ler mais em nosso artigo. Leia o artigo O objeto de relatório TfrxPDFView agora permite configurar o intervalo de páginas a serem produzidas. Você pode definir valores usando expressões no  TfrxPDFView.PagesRange.  Assim, você tem acesso à filtragem das páginas de saída de um documento PDF.     Alterações no mecanismo de relatório Combinando Técnicas De Saída De Objetos Novas alterações no mecanismo de relatórios permitem combinar diferentes técnicas de saída de objetos, dando a você a liberdade de criar relatórios complexos com uma variedade de opções. O funcionamento do mecanismo de alinhamento do fundo (baBottom) de uma banda em crescimento foi alterado quando um dos objectos da banda é dividido em várias partes (páginas). Na implementação antiga, um objeto com a propriedade baBottom é exibido na primeira parte da quebra de dados. O novo mecanismo de funcionamento desse relatório corrige os objectos com o baBottom, colocando-os na última parte dos dados (no final da banda). Observe que esse comportamento do mecanismo de relatório é considerado correto e deve ser levado em consideração ao desenvolver relatórios.   Suporte para alongamento smMaxHeight para uma tabela estática (apenas linhas AllowSplit) O alongamento smMaxHeight em uma tabela funciona de forma diferente do que em objetos. A altura desejada é definida para toda a mesa da banda. Em seguida, ele é distribuído entre as linhas com a propriedade AllowSplit=True definida e AutoSize=False desativada. As linhas com o valor MaxHeight também são levadas em consideração. Essa abordagem permite que você escolha quais linhas da tabela podem ser esticadas para preencher o espaço vazio e quais não podem.   Novo Comportamento De Divisão De Objetos Do Relatório TfrxRichView O objeto RichText permite que você use tabelas, imagens e outros objetos que não podem ser divididos para um tamanho específico. Tais objetos poderiam, por vezes, criar blocos inteiros de conteúdo não repartíveis que se estendiam para além da página. Na versão actual, a divisão TfrxRichView foi reformulada e funciona selectivamente em função da situação. Encontrar a menor parte divisível. Se um objeto contiver uma parte que não pode caber numa nova página e não é dividível (um objeto ou linha de tabela é maior do que a altura de toda a folha). Em seguida, a menor parte" não dividível " é agora encontrada para essa parte e é exibida como está. A divisão não pára. Se houver outras partes, elas também serão divididas e produzidas. A principal diferença em relação ao mecanismo antigo é a busca do menor valor para a parte não dividível e a continuação da construção. Anteriormente, todo o conteúdo caiu na parte" não dividível " e a separação parou aí, e parte do texto poderia ser perdida. Encontrar a maior parte divisível. Se for encontrada uma parte que não pode caber numa nova página, mas que pode ser dividida, tal como a mesma tabela, então será realizada uma pesquisa para a maior parte que pode ser dividida e o resultado continuará.     Designer De Relatórios Adicionado Suporte A Temas (Temas De Tempo De Execução) O criador do relatório e os seus componentes foram adaptados para apoiar temas, tanto do sistema como do costume. Agora, o designer de relatórios estará sempre no mesmo estilo da sua aplicação!   No RAD Studio 12.3, o trabalho com monitores com alta escala de exibição foi melhorado. Essa mudança visa melhorar a qualidade da visualização e usabilidade da interface no ambiente de desenvolvimento ao trabalhar em monitores com configurações de alta resolução e dimensionamento. Nesta actualização, o editor de diálogo no criador de relatórios foi redesenhado. Agora, este é um espaço de trabalho fixo, assim como a página do relatório. A posição da caixa de diálogo pode ser alterada através do inspector de objectos.   Melhoria do preenchimento de código na janela de edição de código do relatório. Para sua conveniência, foi adicionado um menu pop-up para a janela da lista de observação. Também redesenhámos a janela" Opções de design " para obter o melhor suporte para resoluções de ecrã pequeno.   Exportações e Transportes O suporte para caracteres definidos pelo utilizador foi implementado nas exportações de PDF e SVG (EUDC). Também melhorou o alinhamento do texto RTL com ligaduras. Adicionado suporte para ZUGFeRD 2.3 com os seguintes perfis: "mínimo"," basic WL", "BASIC", "EN 16931", "EXTENDED", "XRECHNUNG". Um exemplo com a inclusão de dados para este formato pode ser encontrado em InvoiceDemo, que acompanha o produto. Na nova versão, os mecanismos de exportação para os formatos XLSX e DOCX foram melhorados. Isso melhorou a qualidade dos documentos gerados e expandiu suas opções de personalização. O transporte de E-mail (SMTP) foi melhorado com suporte nativo para TLS\STARTTLS e suporte para autorização OAUTH. Use canais seguros para enviar seus relatórios.     FastReport Lazarus Além das alterações fundamentais que foram incluídas nas versões VCL e Lazarus, o FastReport for Lazarus recebeu suporte para monitores de alta resolução (HiDPI).     FastCube VCL e FMX Na versão VCL do FastCube, todos os controlos TTreeView foram substituídos por TfrTreeView. Todas as versões receberam indicação de filtro na lista de campos disponíveis. A versão FMX recebeu a capacidade de salvar filtro personalizado e grupo personalizado, bem como uma série de melhorias e correções.     FastQueryBuilder Adicionado suporte para monitores de alta resolução (HiDPI).     FastScript Nesta atualização, implementamos o suporte ao Android. Esta inovação só funciona ao compilar com strings indexadas a partir de uma. Você pode usar todo o poder do mecanismo de script em seus aplicativos móveis para Android. Adicionado suporte para classes para trabalhar com XML e JSON. Você pode ler mais sobre como trabalhar com esses formatos usando o exemplo de carregamento de dados em um relatório neste artigo. Leia o artigo     Controlos FastReport VCL Para o controlo TfrShellTreeView, tornou-se possível criar Nós personalizados e atalhos para outros nós. Você pode ler sobre como configurar TfrShellTreeView e adicionar nós personalizados neste artigo. Leia o artigo     Instalador Agora você pode instalar nossos produtos com suporte para Android. Além disso, foi adicionado suporte para a instalação de pacotes na versão de 64 bits do IDE Embarcadero RAD Studio 12.3.     Lista completa de alterações: versão 2025.2 ========================   VCL.Core [Localization]- Classificação fixa no LocalizationEditor;   VCL.Controls [Engine]+ Adicionado a capacidade de criar uma estrutura personalizada de nó Shell raiz e nó regular;- Suporte HiDPI fixo no smartMemo;- Corrigido o comportamento em que o controle não é dimensionado quando o Pai é atribuído quando csFreeNotification é definido em ComponentState;- Corrigido algumas deficiências na prestação de TfrTreeView e TfrShellTreeView; [UI]- Corrigido renderização de cor personalizada e estado desativado para tfrTreeView; Lazarus.Controls [Engine]+ Adicionado a capacidade de criar uma estrutura personalizada de nó Shell raiz e nó regular;- Suporte HiDPI fixo no smartMemo; [UI]- Corrigido renderização de cor personalizada e estado desativado para tfrTreeView;- Suporte HiDPI implementado para Lazarus;- Corrigido algumas deficiências na prestação de TfrTreeView e TfrShellTreeView;   VCL.FastCube [UI]+ Adicionada indicação de filtro à lista de campos disponíveis;+ Adicionado a capacidade de salvar filtro personalizado e grupo personalizado;* TreeView substituído por TfrTreeView;- Localização fixa da barra de ferramentas FastCube;   FMX.FastCube [UI]+ Adicionada indicação de filtro à lista de campos disponíveis;+ Adicionado remoção de ActivePopup em TfcxSliceGrid.FullUpdate;* TreeView substituído por TfrTreeView;- Localização fixa da barra de ferramentas FastCube;- Corrigido o funcionamento incorrecto do formulário TfcxRangesEditor;- Corrigido o problema de posicionamento e visibilidade dos botões" OK"," Cancelar";- Corrigido o erro FastCube FMX no editor de regras de seleção;- Corrigido o funcionamento da pesquisa incremental em listas suspensas; [Engine]+ Adicionado a capacidade de salvar filtro personalizado e grupo personalizado;- Corrigido um erro ao clicar na área da lista top-n Filtros após zerar TfcxSliceGrid.Slice := nil;   Lazarus.FastCube [UI]+ Indicação de filtragem adicionada à lista de campos disponíveis;* TreeView substituído por TfrTreeView;- Localização da barra de ferramentas FastCube fixa;   VCL.FastQueryBuilder [UI]+ Primeira versão do HiDPI adicionada;   Lazarus.FastQueryBuilder [UI]+ Primeira versão do HiDPI adicionada; VCL.FastScript [Engine]+ Suporte para XML e JSON adicionado ao FastScript;* Melhoria do TfsTree através da substituição do TTreeView pelo TfrTreeView;- Corrigido erro no TfsScript.Destruir que poderia levar a um acidente;   FMX.FastScript [Engine]+ Adicionado suporte para Android;- Erro corrigido no TfsScript.Destruir que poderia levar a um acidente;   Lazarus.FastScript [Engine]+ Adicionado suporte para XML e JSON para FastScript;* Melhoria do TfsTree através da substituição do TTreeView pelo TfrTreeView;- Corrigido erro no TfsScript.Destruir que poderia levar a um acidente;- Pacote fs_ibx fixo para compilação no Lazarus;   VCL.FastReport [Preview]+ Corrigido o colapso quando a aplicação.MainFormOnTaskbar = Verdadeiro; [Engine]+ Adicionado a capacidade de configurar marcas d'água para páginas de relatórios;* Modificou o mecanismo de divisão RichView, acrescentou A definição mínima de peça não quebrável;- HTMLView fixo com Página.EndlessHeight;- Corrigido o erro" classe não encontrada " ao usar a propriedade UseFileCache com páginas vazias no relatório;- Função frxDecompressStream fixa;- Corrigido erro com valor incorreto em macros CopyName;- Data e hora fixas de exportação para XLSX;- Divisão fixa do componente RichView com uma linha vazia no final;- Actualização fixa dos limites SVG;- Ordem de carregamento fixa da tabela 'hmtx' em fontes TTF;- Corrigido erro em que um conjunto de dados renomeado não alterava o nome de usuário padrão;- Corrigido erro em que a caixa de diálogo de impressão redefinia as configurações quando movida para uma tela secundária;- Dimensão fixa da assinatura para componentes não visuais;- Suporte HiDPI fixo para smartMemo;- Comportamento fixo da banda com altura adicional;- Corrigido erro de acesso à memória ao usar conexão DBX externa;- Corrigido erro ao imprimir um relatório aninhado com várias colunas na página;- Corrigido quebra de linha em falta em CellData.Texto;- Corrigido erro Memo AutoWidth com macros como TotalPages;- Corrigido erro onde alguns eventos de tabela foram acionados duas vezes;- Corrigido baBottom quando o objeto quebra em várias páginas e Adicionado suporte para smMaxHeight para tabelas estáticas (apenas linhas AllowSplit);- Erro de altura de arredondamento fixo em quebras de banda;- Fixa coordenada esquerda do sub-relatório quando se deslocam para uma nova página;- Corrigido pacotes AnyDAC no produto FastReport para que eles instalem automaticamente no RAD Studio XE3 e IDEs mais antigos;- Corrigido erro quando as macros são atualizadas no momento do design;- Modo de seleção duplex fixo;- Comportamento baBottom e smMaxHeight fixo no rodapé da página;- Correção que limpa o singleton ParentForm quando o formulário pai é fechado, não do componente report; [Exports]+ Melhoria da exportação de texto RTL para PDF;+ Adicionado exportação de símbolos externos;+ Adicionado suporte para zugferd 2.3 na exportação de PDF;- Aviso do compilador removido;- Exportação fixa de HTMLView longo;- Geração fixa de metadados PDF/a;- Corrigido PDF usando o padrão ZUGFeRD;- Corrigido transição foco entrada incorreta via guia em caixas de diálogo de exportação;- Formato numérico fixo no filtro de exportação XLS;- Tamanho de caracteres fixo nas exportações SVG e PDF;- Removido âncora flutuante para a tabela docx, substituído por uma linha vazia; [Client-server]+ Adicionado novos controles de formulário de diálogo: selecionador de data, DBComboBox, ListBox, CheckListBox, MaskEdit( Sem Máscara), Edição de senha, PageControl, GroupControl, Painel;+ Adicionado a capacidade de usar um cabeçalho HTTP personalizado EM Componentes cliente-servidor;* Redesenhado o mecanismo de geração de diálogo, suportando controles aninhados e a capacidade de estender com controles personalizados;* Exportações actualizadas para componentes cliente-servidor;- Corrigido um erro ao trabalhar com parâmetros e diálogos; [Designer]+ Renderização e funcionalidade aprimoradas de elementos de designer em temas VCL;+ Adicionado menu de contexto para janelas de Lista de observação no designer de relatórios;* Redesenhou a janela "Design - > opções" para resoluções de tela pequena;* Redesenhado o editor de diálogo no designer de relatórios;- Corrigido erro no RichEditor com versões mais antigas do msftedit.dll;- Corrigido dimensionamento de diálogo (TfrxDialogPage);- Comportamento tfrxlabel fixo quando AutoSize = True;- Fixed TfrxDesigner.Funcionalidade DefaultFont com HiDPI;- Comportamento tfrxdialogpage fixo em uma tela secundária;- Corrigido o comportamento de edição de código de barras no designer de relatórios através do inspetor de objetos;- Corrigido o comportamento de autocompletar código em procedimentos e funções aninhados em scripts, bem como em scripts com expressões de concatenação de strings;- Comportamento dica fixo na janela de código;- Estilo de menu fixo para o designer de relatórios no RAD 12.2 em tempo de design; [Other]+ Adicionado a capacidade de substituir o formulário de pesquisa;* Recursos romenos atualizados;- Compilação fixa de InvoiceDemo;- Corrigido exemplo de CustomScrollsDemo; [Report object]+ Adicionado suporte para TIFF de página única no TfrxPictureView;+ Adicionado objeto para etiquetas RFID (TfrxDeviceCommand);+ Implementado uma lista de páginas exibidas em um documento PDF (intervalo) em TfrxPDFView;- Compatibilidade fixa com HTML Viewer;- Renderização de código de barras fixo quando ((rotação > 0) e (WideBarRatio > 2));- Tamanho da fonte padrão fixo para o rótulo superior de códigos de barras com HiDPI;- Corrigido o comportamento do componente HTMLView quando a largura do colgroup substitui as configurações de largura da tag td;- Geração de relatório fixo com RFID;- Corrigido clipping incorreto no RichView;- Etiqueta fixa para códigos de barras bidimensionais;- Etiqueta fixa para códigos de barras bidimensionais;- Configuração fixa "código QR Suíço" para código QR código de barras;   FMX.FastReport [Engine]- Corrigido erro "classe não encontrada" ao usar a propriedade UseFileCache com páginas vazias no relatório;- Transferência de texto rotativa fixa ao exportar para PDF;- Exportação fixa de data e hora para XLSX; [Exports]- Removido o aviso do compilador;- WordWrap fixo na exportação de PDF com visualização de texto simples; [Designer]- Editor de cabeçalho de grupo fixo;   Lazarus.FastReport [Engine]+ Adicionado a capacidade de configurar marcas d ' água para páginas de relatório;- Corrigido HTMLView com Página.EndlessHeight;- Corrigido erro "classe não encontrada" ao usar a propriedade UseFileCache com páginas vazias no relatório;- Função frxDecompressStream fixa;- Corrigido erro com valor incorreto em macros CopyName;- Exportação fixa de data e hora para XLSX;- Corrigida ordem de carregamento da tabela 'hmtx' em fontes TTF;- Corrigido erro em que um conjunto de dados renomeado não alterava o nome de usuário padrão;- Corrigido erro que fazia com que o diálogo de impressão redefinisse as configurações quando movido para uma tela secundária;- Corrigido erro ao criar TfrxComboEdit para Lazarus;- Tamanho fixo da assinatura para componentes não visuais;- Suporte HiDPI fixo para smartMemo;- Comportamento fixo da faixa com altura adicional;- Corrigido vazamento de memória ao exportar PDF no Linux;- Corrigido erro quando as macros são atualizadas em tempo de design;- Modo de seleção duplex fixo;- Corrigido o comportamento baBottom e smMaxHeight no rodapé da página;- Correção que limpa o singleton ParentForm quando o formulário pai é fechado não do componente de relatório; [Exports]+ Exportação aprimorada de texto RTL para PDF;+ Adicionada exportação de símbolos externos;- Removido o aviso do compilador;- Exportação fixa de HTMLView longo;- Geração fixa de metadados PDF/A;- PDF corrigido usando o padrão ZUGFerd;- Exportação fixa de PDF com HiDPI;- Diálogos de exportação fixos com HiDPI;- Inversão de imagem fixa na exportação ZPL; [Client-server]+ Adicionados novos controles de formulário de diálogo: selecionador de data, DBComboBox, ListBox, CheckListBox, MaskEdit (Sem Máscara), Edição de senha, PageControl, GroupControl, Painel;+ Adicionado a capacidade de usar um cabeçalho HTTP personalizado EM Componentes cliente-servidor;* Redesenhado o mecanismo de geração de diálogo, suportando controles aninhados e a capacidade de estender com controles personalizados;* Exportações atualizadas para componentes cliente-servidor;- Corrigido um erro ao trabalhar com parâmetros e diálogos; [Designer]- Corrigido erro no RichEditor com versões mais antigas do msftedit.dll;- Corrigido dimensionamento de diálogo (TfrxDialogPage);- Comportamento tfrxlabel fixo quando AutoSize = True;- Renderização e funcionalidade aprimoradas de elementos de designer em temas VCL; [Other]+ Adicionado a capacidade de substituir o formulário de pesquisa; [Report object]+ Adicionado objeto para etiquetas RFID (TfrxDeviceCommand);- Corrigido o comportamento do componente HTMLView quando a largura do colgroup substitui as configurações da tag "td;- Etiqueta fixa para códigos de barras bidimensionais;- Compatibilidade fixa com HTML Viewer;- Criação fixa de códigos de barras compostos; [Preview]- Visualização fixa com HiDPI.  
Ler

Artigos

24 de abril de 2025

How to Open and Convert an FP3 File Using the FastConverter .FP3

FP3 is a format for ready-made reports generated using FastReport report generators, integrated into various business applications. A file in this format can be generated by different programs, such as CRM or ERP. To easily convert it to any preferred format, use the FastConverter .FP3. It allows you to convert .fp3 files to PDF formats versions 1.4, 1.5, 1.6, and 1.7, PDF/A (1, 2, 3), RTF, XLSX, XML, DOCX, TXT, CSV, PPTX, HTML, JPEG, BMP, PNG, TIFF, EMF, SVG, Open Document Format (ODT, ODS, ODP), and more. Both single file conversion and batch conversion are possible.     How to Convert a File from .fp3 to PDF Step 1: Install FastConverter .FP3. You need to download and install FastConverter .FP3 using this link. After installation, launch the program.   Step 2: Opening an FP3 file. Go to the "File" menu → "Open," then select an FP3 format file and click "Open."   Step 3: Converting FP3 to another format. After loading the file, click "File" → "Save As." A wide variety of supported formats for exporting the document will become available to you. In the "Target Format" field, select the desired format (PDF, DOCX, XLSX, HTML, PNG, etc.) from the list provided.   Step 4: Final file location and name. Specify the folder and file name for saving in the "Target File" field and click "Save." After the conversion is complete, the file will be available in the specified directory in the new format.   For any questions, please contact our support team at support@fast-report.com.
Ler
22 de abril de 2025

Working with XML and JSON Formats in FastScript

Currently, XML and JSON formats have emerged as the primary standards for data storage and information exchange between computer systems. At the request of users, classes for handling XML and JSON have been added to FastScript. In this article, we’ll take a closer look at how to work with these classes, explore their properties and methods, and also create reports from code using scripts.     XML Format To work with XML in scripts, 2 classes are used. These classes are focused on maximum speed and low memory consumption.   TfrXMLDocument – a class that encapsulates the functionality of an XML document. The following properties and methods are available in it. Class Properties and Methods Description procedure SaveToStream(Stream: TStream); Saves the XML to the passed stream. procedure LoadFromStream(Stream: TStream; AllowPartialLoading: Boolean = False); Loads the XML from the passed stream. procedure SaveToFile(const FileName: string); Saves the XML to a file with the specified name. procedure LoadFromFile(const FileName: string); Loads the XML from a file with the specified name. procedure Clear; Deletes all XML nodes from the tree, except the root node. The content of the node is NOT cleared. property Root: TfrXMLItem; Allows access to the root element of the tree. property AsText: string; Allows you to both get and set the XML as a string (for example, using this property, you can pass the XML to the report script using a report variable). property AutoIndent: Boolean; Determines how the output XML will be generated: as a single line or as indented text.   TfrXMLNode – a class that encapsulates the properties of an XML document node. You cannot create an object of this type directly. It is created by calling the Add() method of the element to which you want to add a child element. Let’s take a closer look at the properties and methods of the TfrXMLNode class. Class Properties and Methods Description function Add(AName:string):TfrXMLItem; Creates a child TfrXMLItem with the specified name and returns it. procedure Clear; Clears the list of child elements. procedure InsertItem(Index:integer; AItem: TfrXMLItem); Inserts a child element into the specified position. The element may belong to another document. function Find(AName:string):Integer; Searches the child elements for a TfrXMLItem with the specified name and returns it. If the element is not found, -1 is returned. If there are several elements with the specified name, the first one is returned. function FindItem(AName:string):TfrXMLItem; Searches the child elements for a TfrXMLItem with the specified name and returns it. If the element is not found, a new element with the specified name is created and returned. If there are several elements with the specified name, the first one is returned. function Root: TfrXMLItem; Returns the root element of the document. property Count:Integer; Returns the number of child nodes of the element. property Items[AIndex:Integer]: TfrXMLItem; Returns a child element by its index. property Prop[AName:string]:string; Returns or sets the value of the node’s attribute with the specified name. property Name: string; The tag name of the element. property Parent: TfrXMLItem; The name of the parent element. Root is nil. property Text:string; A string containing a list of node parameters in the format Name1="Value1" Name2="Value2"… Special characters in this string are quoted. procedure Delete(AIndex: Integer); Deletes a child element with AIndex. procedure DeleteProp(const APropName: string); Deletes the node’s attribute with the specified name. property Value: string; The text that is located between the opening and closing tag of the element. function PropExists(APropName:string):Boolean; Helps to determine whether an element has an attribute with the specified name. function IndexOf(AItem: TfrXMLItem):Integer; Returns the index of the passed element. function GetPropNames(ANames:TStrings); Fills the passed list of strings with the names of the TfrXMLItem attributes.   Let’s try to build a report using classes for working with XML. For example, we will display data from the "country.xml" file in the report, but we will not use TClientDataSet, and will use direct access to the XML file. We create a new report, go to the editing mode, put MasterData on the report. And add several Memo on top to display the data. We will also create an OnBeforePrint event for the MasterData object. The final report script code will look like this: var doc: TfrXMLDocument; item: TfrXMLItem; IIndex: Integer;   procedure MasterData1OnBeforePrint(Sender: TfrxComponent); var cur: TfrXMLItem; S: string; begin cur := item[IIndex]; mmNum.Text := cur.Prop['Code']; mmName.Text := cur.Prop['Name']; mmCapital.Text := cur.Prop['Capital']; mmArea.Text := cur.Prop['Area']; mmPopulation.Text := cur.Prop['Population']; mmContinent.Text := cur.Prop['Continent']; Inc(IIndex); end;   begin Doc := TfrXMLDocument.Create; Doc.LoadFromFile('..\..\Data\country.xml'); item := Doc.Root[1]; IIndex := 0; MasterData1.RowCount := item.count; end. Let’s go ahead and run the report. To make it easier to read, we’ve also added column headers.     JSON Format Let’s smoothly transition from XML to JSON format. To work with it in FastReport, 2 classes are also used—TfrJSON and TfrJSONArray. In this case, these classes are simply a wrapper around classes from System.JSON in the Delphi platform or similar classes in Lazarus.   TfrJSONObject — a class that encapsulates functions for working with JSON objects. Class Properties and Methods Description function Create(const JSONstring: string); Creates a JSON object and populates it from the provided string. function IsValid:Boolean; Returns True if the object contains valid JSON. procedure LodFromFile(const AFilName:string); Loads data from the specified file. If the object contains data, it will be lost. procedure LoadFromtStream(const AStream:TStream); Loads data from the provided stream. If the object contains data, it will be lost. function ToString:string;   Returns a string containing the textual representation of the JSON object. procedure SaveToFile(const AFileName: string); Saves the textual representation of the JSON object to a file. procedure SaveToStream(AStream: TStream Saves the textual representation of the JSON object to a stream. function IsNameExists(const AName:string); Returns True if the object has a property with the specified name. function IsNameValueExists(const Name, Value: string): boolean; Returns True if the object has a property with the specified name and its value matches the specified value. function Count:Integer; Returns the total number of properties in the JSON object. property Names[AIndex:Integer]:string; Returns the name of the property at the specified index. Property ValueType[IndexOrName:Variant]:TfrJSONType; Returns the type of the property at the specified index or name. The type can be one of the following values:- jsUnknown–—The type of the property is unknown (a parsing error occurred or a property with such an index or name is missing). - jsNumber—The property has a numeric type. - jsString—The property has a string type. - jsBoolean—The property has a boolean type (true/false). - jsNull—The type of the property is null (no value is assigned). - jsList—The type of the property is a JSON array. - jsObject—The type of the property is a nested JSON object. The properties below allow you to retrieve the values of the JSON object in one form or another. In all these properties, indexing is performed either by the property number in the list of properties or by its name. Note that AsString[‘1’] <> AsString[1]. Also, if you try to get the value of a property using an inappropriate method, errors may occur and incorrect property values may be returned. For example, if a property has the type "Object" or "Array", then when you try to get its value using the AsString property, you will get an empty string. In other cases, AsString will return the string representation of the property’s value. Class Properties and Methods Description property AsObject[IndexOrName: Variant]: TfrxJSON; Allows you to retrieve a nested JSON object. property AsArray[IndexOrName: Variant]: TfrJSONArray; Allows you to retrieve a nested JSON array. Property AsString[IndexOrName: Variant]: string; Allows you to retrieve the value of a property as a string. This retrieval method can be applied to properties of other types, except for objects and arrays. For boolean values, a string containing the value "True" or "False" will be returned. For numbers with a fractional part, a dot will always be used as the fractional part separator, regardless of regional settings. property AsNumber[IndexOrName: Variant]: Extended; Allows you to retrieve the value of a property as a number. If the property has a non-numeric type, 0 will be returned. property AsBoolean[IndexOrName: Variant]: Boolean; Allows you to retrieve the value of a property as a boolean value. If the property has another type, False will be returned. To return a field of type null, you’ll have to put in a little effort. There isn’t a dedicated method for that. However, you can use the ValueType property, which returns jsNull for a field of type null, or use the AsString property, which returns the string ‘null’. Let’s take a closer look at the methods for manipulating object properties. Class Methods Description Procedure Delete(AName: String);   Removes a property with the specified name from the object. function AddObject(const AName: string): Integer Adds a child empty object with the specified name to the object. function AddArray(const AName: string): Integer; Adds an empty array with the specified name to the object. function AddString(const AName, AValue: string): Integer; Adds a string with the specified name to the object. function AddBool(const AName: string; AValue: boolean): Integer; Adds a boolean value with the specified name to the object. function AddNumber(const AName: string; AValue:Extended): Integer; Adds a numeric real value with the specified name to the object. function AddInteger(const AName: string; AValue:Integer): Integer; Adds a numeric integer value with the specified name to the object. function AddNull(const AName: string): Integer; Adds a null value with the specified name to the object. The methods return an integer, which is the index of the added element in the list of all fields. All methods that add fields to the object do not control the presence of existing fields with the same names. This procedure is the responsibility of the programmer using this class. Such control is necessary to prevent the appearance of multiple fields with the same names in the output JSON. The behavior of the system in this case is undefined—it depends on the parser that will further parse the received JSON. This means that any of the values with the same names may be used! The TJSONArray class encapsulates methods and properties for working with JSON arrays. In principle, the main properties are the same, but you can only access them by index. Only operations to access any element, get its value, or delete any element are supported. You cannot move elements in the array or change their type. Let’s consider the properties and methods for obtaining the values of elements in this class. Class Properties and Methods Description function Count:Integer; Returns the number of elements in the array. property ValueType[AIndex: Integer]: TfrJSONType; Returns the type of the array element with the specified index. property AsObject[AIndex: Integer]: TfrJSONObject; Returns an object providing access to the array element as a JSON object. Property AsArray[AIndex: Integer]: TfrJSONArray Returns an object providing access to the array element as a JSON array. property AsString[AIndex: Integer]: string; Returns the value of the array element as a string. property AsNumber[AIndex: Integer]: Extended; Returns the value of the array element as a number. property AsBoolean[AIndex: Integer]: Boolean; Returns the value of the array element as a boolean value. When dealing with arrays, like with objects, you need to carefully approach extracting the values of elements. Depending on the type of the value, you should use the appropriate method to retrieve it. The methods for manipulating elements of a JSON array are described below. Class Properties and Methods Description procedure Delete(AIndex:Integer); Deletes an array element at the specified index. function AddObject: Integer; Adds a nested JSON object to the end of the array. function AddArray: Integer; Adds a nested JSON array to the end of the array. function AddString(const AValue: string): Integer; Adds a string to the end of the array. function AddBool(AValue: boolean): Integer; Adds a boolean value to the end of the array. function AddNumber(AValue:Extended): Integer; Adds a floating-point number to the end of the array. function AddInteger(AValue: Integer): Integer; Adds an integer to the end of the array. function AddNull: Integer; Adds null to the end of the array. All of these methods return the position of the element added to the array. You cannot insert an element into the middle of the array; this is a limitation of the base classes in System.JSON.     Specifics of Using Classes to Access JSON When using objects, it’s important to remember that after using wrapper objects, you must remove all of them from the code. Note that if you want to get a child object or array, but instead there’s a scalar value or no value at all, the property will return nil, and an exception will occur when accessing that property further. Avoid using methods that are not intended to work with values of specific types stored in an element to retrieve those values. It’s important to note that property names of objects are case-sensitive, meaning "Item1" and "item1" are considered different names! You can only set values for object elements if the type of those values matches the type that is defined for the element. If you need to redefine the type of an element, delete it and add a new one with the same name and the type you want. Entering new values for array elements is not possible. You need to delete the JSON array and then recreate it with the values you want. Let’s use the classes from the description above and write a script that extracts data (without type information) from an XML file and puts it into a JSON object. procedure XMLToJSON; var XML: TfrXMLDocument; xi, xi1: TfrXMLItem; I, J: Integer; JO: TfrJSONObject; JA, JA1: TfrJSONArray; SL: TStringList; begin XML:=TfrXMLDocument.Create; XML.LoadFromFile('.\..\..\data\country.xml'); JO:=TfrJSONObject.Create('{}'); JO.AddArray('data'); JA:=JO.AsArray['data']; xi:=X.Root[1]; xi1:=xi.Items[0]; SL:=TStringList.Create; xi1.GetParamNames(SL); for I:=0 to xi.Count - 1 do begin xi1:=xi.Items[I]; JA1:=JA.AsArray[JA.AddArray]; for J:=0 to SL.Count-1 do JA1.AddString(xi1.Prop[SL[J]]); JA1.Free; end; JA.Free; JO.SaveToFile('.\..\..\data\country.json'); JO.Free; SL.Free; end; And let’s try to build a report based on the obtained data (first, place the appropriate MasterData and Memo components on the report page): var J:TfrJSONObject; A:TfrJSONArray; curr:Integer;   procedure MasterData1OnBeforePrint(Sender: TfrxComponent); var A1:TfrJSONArray; begin A1:=A.AsArray(curr); Memo1.Memo.Text:=A1.AsString[0]; Memo2.Memo.Text:=A1.AsString[1]; Memo3.Memo.Text:=A1.AsString[2]; Memo4.Memo.Text:=A1.AsString[3]; Memo5.Memo.Text:=A1.AsString[4]; Memo6.Memo.Text:=A1.AsString[5]; A1.Free; curr := curr + 1; end;   begin J:=TfrJSONObject.Create(''); J.LoadFromFile('.\..\..\data\country.json'); A:=J.AsArray[0]; MasterData1.RowCount:=A.Count; curr:=0; end.   You can also use these objects in Delphi code—simply include the frXML and frJSON modules in the uses statement.     Conclusion In this article, we explored the use of classes for working with JSON and XML in FastReport. If you’re a developer working not just with reports but also with Delphi and Lazarus, utilizing these classes will help minimize issues when switching between environments—your experience will be consistent across both IDEs. For your convenience, we’ve included two examples in this article demonstrating report generation using XML and JSON. You can open and run these examples directly in FastReportDemo, which comes with the FastReport distribution. You might need to configure the reports before running them—just make sure to specify the correct path to the data file "country.xml," which can be found both in the DemoCenter and in the folder with the examples. Download Examples
Ler

Perguntas usuais

O que é um gerador de relatórios?

Por que precisamos de geradores de relatórios e ferramentas de análise OLAP?

O que a Fast Reports Inc. faz?

Somos confiáveis

Fast Reports
  • 800-985-8986 (English, US)
  • +31 97 01025-8466 (English, EU)
  • +49 30 56837-3928 (German, DE)
  • +55 19 98147-8148 (Portuguese, BR)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2025 Fast Reports Inc.