Há grandes opções de relatórios: o Fortes Report(CE), LazReport , fpReport e o fpSpreadSheet.
O Fortes report segue o paradigma de programação por bandas, isto é, você desenha relatórios no formulário colocando bandas que representam dados, cada banda pode representar um dataset e que pode ser filha de outra banda criando assim um relatório de mestre/detalhe. Além disso, outras bandas podem representar cabeçalho, rodapé, etc… Geralmente as informações podem ser modificadas usando os eventos OnBeforePrint da banda, do label ou qualquer outro componente que o acompanhe. Nele, você esta literalmente programando um relatório com freepascal e as bandas serão um container de sequencia de eventos que apresentarão o relatório.
O lazReport já acompanha a instalação do Lazarus, mas não é previamente instalado. Compor relatórios com ele é similar ao FastReport do Delphi. Você deposita um ou mais componentes no formulário que identificarão o layout e fonte de dados, depois você trabalha o layout do relatório diretamente dentro dele, é o modo de design completo com labels, memos, graficos, etc… O Lazarus é apenas um anfitrião coadjuvante no processo, o lazReport não usa componentes LCL.
Isso pode ser bom por um lado porque o trabalho é mais artistico e menos programação, no entanto, torna-o menos flexível porque se limita as opções de design que ele provê. Por exemplo, imagine imprimir um CNPJ, mas o banco de dados tem apenas a parte numérica, sem a máscara, se fosse usando o Fortes, no label do CNPJ você colocaria no evento OnBeforePrint algum código de programação que alteraria o valor colocando a máscara, já no LazReport você já tem uma propriedade de máscara para realizar essa mesma operação, mas você não altera os valores em runtime, o máximo que você consegue fazer é antes do seu relatório ser apresentado, enviar valores prontos que serão usados na apresentação.
Então isso é um ponto positivo para o Lazreport, certo? Não, troque a mascara agora por um codigo onde precise decifrá-lo antes de imprimir, o LazReport não tem algo para isso então você terá de trabalhar com variaiveis ou parametros que deverão ser calculados antes do processo iniciar-se, algo que é bem mais complexo do que apenas colocar um evento no OnBeforePrint como você faria no Fortes Report
Ambos os geradores citados tem um pequeno problema, requerem GUI para processá-los. Isto acontece porque é obrigatório o uso de formulário para seus componentes e herança. Então se você precisa rodar estes relatórios num ambiente Linux desprovido de interface gráfica, seus relatórios falharão com um “access violation”. Existem dois workarounds: (1) compilar seu projeto com a opção -nogui, mas segundo investiguei apenas suprimirá exceptions causados pelo ausencia de processar eventos, (2) rodar o programa gerado dentro de um mini servidor X como Xephyr.
O fpReport é um gerador de relatório, similar ao FastReport ou freeReport. Boa parte da documentação antiga do freeReport também serve para ele. Sua vantagem é que seu programa não precisará de interface gráfica, na prática, funcionará num terminal Linux apenas no modo console.
Há ainda outra solução menos conhecida, o fpSpreadSheet. O fpSpreadSheet fornece uma biblioteca de funções para gerar planilhas em vários formatos – opendocument é um deles – com opções de exportação para PDF/HTML. Similar ao fpReport, ele não depende da LCL então não requer de interface gráfica. A primeira vista você pode achar mais prático produzir relatórios dessa forma, mas não é bem assim, o principal problema é que você precisa pensar como planilha e não como formulário, isso significa que você terá de pensar em coordenadas A1..Z999 o que limita o layout a ser produzido e depois de ser feito, a inclusão de uma nova coluna no meio do que já existe causará um efeito dominó de reajuste em todas as colunas adjacentes, portanto, a manutibilidade de relatórios que são constantemente alterados é penosa.
Qual o melhor?
Deixei mais abaixo links explicando pormenores de cada gerador de relatório. Na pratica, você escolherá um e será feliz. Se você precisa criar relatórios que serão fornecidos via API/REST, provavelmente você irá melhor com o fpReport ou fpSpreadSheet porque não precisará de interface gráfica ou ter que incorrer em workarounds.
Segue os links com maiores detalhes sobre estas ferramentas: