Preciso gerar contratos em PDF, usando Java. Estava estudando o JasperReport e iReport, que geram relatórios. Mas acho que não é a melhor solução, pois o meu contrato terá informações provenientes de diversas tabelas, que não podem ser pegas com um único select. E não quero gerar um relatório, mas um contrato.
Gostaria de saber quais soluções existem para se fazer isso com Java.
O JasperReports lhe permite fazer sub-relatorios(subreports), ou seja, colocar mais de uma query no mesmo relatório. Dê uma lida nisso que com certeza te ajudará e muito.
Não vejo qual problema de se gerar um report (que conceitualmente é qualquer tipo de documento de saída, não somente resumos) para construir um contrato.
Eu dei uma pesquisa sobre essa questão de sub-relatórios. Porém, só vi exemplos de utilização nos quais o sub-relatório tem relação com o relatório principal, por exemplos Livros no relatório principal e Autores no sub-relatório. Gostaria de saber se é possível ter um sub-relatório, cuja tabela de onde provém seus dados não tenha relação com a tabela do relatório principal. Por exemplo, que seus registros fossem mostrados no mesmo relatório, mas em quadros diferentes, por exemplo.
Não tem nenhum problema, você pode encapsular toda sua pesquisa numa Business Class - Relatório (Que utiliza diversos ou se tiver usando uma ferramenta de mapeamento pós relacional, pode fazer de maneira mais fácil com uma única chamada), e usar um Controller como dispatcher da sua entidade- contrato (pojo).
Você vai mandar para o Jasper somente um Map com os atributos, de acordo com o seu contrato, com as propriedades Key - Value do seu pojo.
PS: Resolvi assim a emissão de contrato e impressão de boleto entre outras informações 3 folhas no mesmo arquivo PDF, como todas as informações dinâmicas.