Gere PDF de qualidade em 10 minutos
Marcos Sousa | July 1, 2008O Seam Framework tem um grande leque de extras, na minha opinião é onde o Seam mais se destaca. Possui integração com Hibernate, Spring, Groovy, EJB, GWT, Quartz, Java Mail e por aí vai! Bom hoje vou falar um pouco do suporte do seam para integração do iText.
Basicamente para usar em um projeto Seam, basta adicionar a lib do itext e a lib de intregração jboss-seam.jar. Feito isto, basta criar páginas xhtml que use as tags de geração de arquivos PDF. Uma das opções que mais me chamaram a atenção foi a possibilidade de adicionar código html, algo que estava procurando para impressão de campos que usam o formato RichText. Outra coisa que me chamou a atenção foi a velocidade, um mesmo PDF que era gerado usando iReports levou um bom tempo a mais do que o gerando usando o Seam. As opções básicas como cabeçalho, rodapé e quebra de página estão presentes.
Tudo que é preciso fazer é criar uma página xhtml usando a tag p:document com o namespace http://jboss.com/products/seam/pdf:
<p :document xmlns:p="http://jboss.com/products/seam/pdf"> <!-- Coloque aqui o conteúdo do documento --> </p>
A tag de paragraph permite a criação de parágrafos de forma semelhante ao um documento HTML, para exibir um dado de uma EL JSF há três maneiras básicas: Colocar a EL direto no texto, usar o componente JSF padrão h:outputText ou ainda usar o componente do Seam p:text. Veja o exemplo:
<p :paragraph>
Olá #{user.name}, você foi registrado com sucesso, seu login é <h
utputText value="#{user.login}" /> e seu último acesso foi em: </p><p :text value="#{user.lastAcess}">
<f :convertDateTime pattern="dd/MM/yyyy HH:mm" />
</p>
E não podia deixar de destacar, também deixar de destacar a habilidade do Seam de renderizar código HTML através da tag p:html:
<p :html>
<h1>Título 1 em html</h1>
<table>
<th>
<td>Título 1</td>
<td>Título 2</td>
</th>
<tr>
<td>Linha 1</td>
<td>Linha 1</td>
</tr>
<tr>
<td>linha 2</td>
<td>Linha 2</td>
</tr>
</table>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</p>
Caso se interesse pelo assunto, sugiro acessar o Guia de Referência.






Valeu pela dica, estou precisando justamente disso, escrever código html em um PDF no JBoss Seam não sabia desse recurso, essa tag <p :html é a partir de qual versão do JBoss Seam? 2.0?
Abraços.
Sim,
Este recurso é muito bom, algum tempo atrás eu tive um problema relacionado a este e a solução foi fazer uma classe que convertia HTML em conteúdos iText. Eu não tenho certeza mas acho que é a partir da versão 2.0.2.
[...] Framework com o iText. Na vídeo aula, são apresentadas algumas das tags descritas na publicação Gere PDF de Qualidade em 10 minutos, o documento resultante gera um PDF que contém imagens, títulos, texto HTML formatado e um [...]
[...] Para quem gera documentos excel, tenho uma boa notícia, agora facilmente será possível criar documentos XLS utilizando um módulo específico do Seam para isto. Integrado ao JExcelAPI, o módulo possibilita gerar planilhas com um simples documento XHTML de maneira bem semelhante ao geração de PDF, que já abordada anteriomente. [...]
Boa tarde, estava lendo sua reportagem sobre o itext o qual estou utilizando para minha aplicação j2ee, mas estou com um problema que na montagem do relatorio não consigo colocar uma imagem no cabeçalho para a mesma aparecer em todas as paginas do relatorio..vc ja encontrou essa dificuldade ou tem alguma ideia de como resolver..abraços
Olá Rafael,
Bom eu encontrei este mesmo problema, mas acho que na versão 2.1 do Seam ele está corrigido. Tente colocar a imagem dentro de um parágrafo que pode ajudar a corrigir seu problema
Marcos,
Tenho uma rotina em background acontecendo e preciso gerar um relatório em pdf e salvar em uma pasta no meu SO. tem como eu fazer isso pelo seam?
obrigado
Bom, acredito que seja possível, nunca testei, mas o caminho é usar a integração do Seam com Quartz e a partir daí usar da mesma forma que é realizado no processo padrão dentro da sua classe agendada.
Marcos,
Estou com a mesma dúvida (post numero 7) do outro Marcos.
Preciso gerar um pdf em background, já tenho o quartz funcionando, a unica coisa que preciso é chamar uma action e essa gerar e armazenar o pdf em disco.
Você tem alguma dica de como posso fazer isso ?
Abraço
@Daniel,
Por padrão não o Seam não possibilita, porém você pode fazer uma espécie de mock para a classe Renderer do Seam para você consiga gerar o PDF sem uma requisição.
Sugiro você pegar código fonte e verificar se isto é viável. Qualquer dúvida não deixe de entrar em contato comigo.