Loading ...
Sorry, an error occurred while loading the content.

Relatórios em PDF

Expand Messages
  • Ary Junior
    Boa noite pessoal, há uns cinco anos atrás eu iniciei o desenvolvimento de uma API Java baseada no iText cujo objetivo era reutilizar o HTML gerado com JSP e
    Message 1 of 1 , Mar 4, 2009
    • 0 Attachment
      Boa noite pessoal, há uns cinco anos atrás eu iniciei o desenvolvimento de uma API Java baseada no iText cujo objetivo era reutilizar o HTML gerado com JSP e taglibs em um site que trabalhei, para gerar relatórios em PDF das tabelas HTML... O nome do projeto é Nheengatu (https://nheengatu.dev.java.net/) e apesar de existirem projetos excelentes para a geracao de relatorios em Java, eu pensei em uma forma de nao somente aproveitar um código HTML que já havia sido escrito, mas também contar com um padrão de marcação/formatação de informações que é o próprio HTML... Sendo assim, após todo esse tempo parado resolvi implementar algumas annotations para poder utilizar o Nheengatu em uma aplicação desktop para a geração de relatórios simples com layout definido pelo HTML... Abaixo temos o exemplo de uma classe que carrega uma lista de usuários linux lidos de algum arquivo /etc/passwd, guardando-os em uma colecao de objetos User... Esta colecao é populada no construtor da classe LinuxUsers e esta anotada de tal forma que esta possa ser apresentada em uma tabela HTML:

      ...
      public class LinuxUsers {

          @HTMLTable(name = "linux_users",
          html = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"1\" width=\"50%\" bgcolor=\"#000000\">",
          theadHtml = "<thead style=\"font-size:10; font-family:verdana; color:#FFFFFF\">",
          tbodyHtml = "<tbody style=\"font-size:10; font-family:verdana; color:#000000\">")
          public List<User> users;
      ...

      A classe User é um POJO que também está anotada para que cada instância sua seja apresentada em uma linha da tabela HTML definida na classe LinuxUsers, assim como seus atributos, que vão ser apresentados como colunas do HTML:

      ...
      @HTMLTableRow(headHtml = "<tr bgcolor=\"#666666\">",
      html = "<tr bgcolor=\"#000000\">")
      public class User {

          @HTMLTableColumn(label = "Username", headHtml = "<td align=\"left\">",
          html = "<td bgcolor=\"#FFFFFF\" align=\"left\">")
          public String login;
          @HTMLTableColumn(label = "Código", headHtml = "<td align=\"left\">",
          html = "<td bgcolor=\"#FFFFFF\" align=\"right\">")
          public int id;
          @HTMLTableColumn(label = "Nome real", headHtml = "<td align=\"left\">",
          html = "<td bgcolor=\"#FFFFFF\" align=\"left\">")
          public String name;
      ...

      Desta forma, para gerar um arquivo .PDF com um relatório dos objetos User basta escrever o código abaixo:

      ...
      AnnotationProcessor ap = new AnnotationProcessor();
      ap.processAnnotations(LinuxUsers.class);
      LinuxUsers users = new LinuxUsers();
      ap.toPDF(users, "C:/NheengatuAnnotations/", "usuarios.pdf");
      ...

      O Documento usuarios.pdf gerado está disponível em https://nheengatu.dev.java.net/files/documents/3916/128377/usuarios.pdf para que vocês possam conferir... O que eu peço aos interessados, é que tentem utilizar o Nheengatu e critiquem por favor... Infelizmente o suporte a algumas tags do HTML ainda está meio bugado e peço desculpas, mas isso é devido a falta de tempo e o fato de eu ter feito praticamente tudo sozinho... No entanto, estou disposto a ajudar qualquer pessoa interessada, podem postar para este meu e-mail mesmo... Por enquanto, para utilizar o projeto é preciso baixar apenas o fonte do projeto Nheengatu na raiz do CVS em https://nheengatu.dev.java.net/source/browse/nheengatu/Nheengatu/ , ele está lá como um projeto do NetBeans 6.5 e as dependências podem ser baixadas em https://nheengatu.dev.java.net/servlets/ProjectDocumentList?folderID=4422&expandFolder=4422&folderID=0 ...

      Muito obrigado pela atenção,

      Ary Junior
    Your message has been successfully submitted and would be delivered to recipients shortly.