Jasper ou iTExt para o meu problema?

Ola a todos! Bom eu não sabia onde colocar esse topico e por isso coloquei em uma area mais proxima do problema.

Bem, meu problema é o seguinte: tem informações no banco de dados que sao gravas com tags HTML. Então eu tenho que resgatar esse texto com tags HTML leva-lo para o JASPER ou ITEXT e exibi-lo com essa formatação, ou seja, com negrito, fonte maior etc etc. Usando o iReport eu nao sejo solução pra isso…alguem sabe como resolver?

Valeu

não existe uma API para fazer este “parse”.
Você pode tentar desta forma:

Eu também estou com este problema. Como meu html não tem CSS e JavaScript, estou criando um parse que interpreta o html e gera o pdf com as mesmas formatações usando o iText.

Eu postei há algum tempo sobre o Flying Saucer, um renderizador HTML (inclusive para PDF). Tô usando e curtindo!

https://xhtmlrenderer.dev.java.net/

Pow valeu pela dica!!!

[quote=CintiaDR]Eu postei há algum tempo sobre o Flying Saucer, um renderizador HTML (inclusive para PDF). Tô usando e curtindo!

https://xhtmlrenderer.dev.java.net/

[/quote]Eu usei o Flying e ele transforma com uma linha de codigo uma pagina HTML em PDF…muito bom. Mas meu problema é mais chato…eu tenho um relatorio que tem 1 ou 2 campos que vao precisar de formatação html…essa formatacao ja vem do banco, ou seja, não é pegar uma pagina HTML e transformar em PDF…serão apenas alguns campos. Então eu tenho que montar meu relatorio na mao…Vc teria algum exemplo disso?

Bom, se forem poucas formatações, tipo bold, italic, etc, vc pode procurar pela opção ‘is styled text?’ que tem o Ireport.

No link http://www.jasperforge.org/sf/wiki/do/viewPage/projects.jasperreports/wiki/Samples tem, lá em baixo, o Styled Text Sample; mas para mim não servia prq eu precisava de uma tabela.

Eu quase não usei, pode ser útil para vc. Mas não sei se a formatação pode vir do banco, porque eu mal usei.

Minha dúvida no fórum de jasper: http://www.jasperforge.org/index.php?option=com_joomlaboard&Itemid=215&func=view&catid=8&id=31671#31671

Boa sorte!

Então eu estou com o mesmo problema…

Eu usei este IS STYLED TEXT? do iREPORT… quando o PDF é visualizado no JASPER VIEWER não há problemas, fica tudo certo. Mas quando eu visualizo o relatório no Adobe Reader, as tags aparecem como parte do texto, e não como texto estilizado…

Vc conseguiu resolver o seu problema como ?
Fazendo um conversor de HTML para PDF ? ou conseguiu usar o iReport ?

Obrigado, aguardo respostas…
Rodrigo Kerkhoff

Bom, juro que não entendi o seu problema, e provavelmente pode ser só um pequeno problema de configuração do Jasper ou falta de fontes no PDF. Sei lá. Mas mesmo assim vou explicar meu problema… Posta aí seus códigos e exemplos, pra facilitar.

Eu tinha um layout (em html), e uns "trechos" dele iam ser recuperados da base. Esses trechos não eram só estilo, e incluiriam tabelas, divs, etc.
Por, exemplo, o layout.

<html>
<body>
<table border="1">
  <tr>
    <td>$conteudo1</td>
  </tr>
  <tr>
    <td>$conteudo2</td>
  </tr>
</table>
</body>
</html>

E eu substituiria o $conteudo1 e o $conteudo2 por coisas HTML vindas do banco. E eu queria que esse "HTMLzão" gerasse um super pdf.

A solução que usei para lidar com o HTML foi o JTidy, e depois pegar o resultado do JTidy e passar pro XHTMLRenderer.

// criando Árvore inicial
Tidy t = new Tidy();
t.setXHTML(true);
t.setQuiet(true); 
Document xmlDoc = t.parseDOM(new ByteArrayInputStream(resultado.getBytes()), null); 

Daí eu recursivamente procurava nesta árvore (xmlDoc) por nodos com o value "$conteudo1" e assim por diante, fazia um parseDOM do conteúdo necessário no banco, e inseria esse novo nó como filho no nó que tinha escrito "$conteudo1".

//nodeDescr é o nodo da árvore que contem, por exemplo, o texto "$conteudo1"
//c.getBytes é o troço que vem do banco. 
Document frag = t.parseDOM(new ByteArrayInputStream(c.getBytes()), null);

Node body = frag.getChildNodes().item(1).getChildNodes().item(1);

					
for (int i = body.getChildNodes().getLength() - 1; i >= 0; i--) {
  Node table = body.getChildNodes().item(i);
  nomeDescr.getParentNode().insertBefore(table,
  nomeDescr.getParentNode().getFirstChild());
}

E daí, é só passar pro XHtmlRenderer:

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(xmlDoc, null); 
renderer.layout();
ByteArrayOutputStream os = new ByteArrayOutputStream();
renderer.createPDF(os);
os.close();

Eu senti muita, muita falta da implementação do Document de métodos que procurassem nodos por id e por valor, então tive que criá-los na mão (busca em profundidade, recursiva, básica, usando casamento de padrões).

Bem da verdade, meu layout tem mais alguns complicadores, como nós $demaisConteudos, que seriam repetidos dinamicamente e etc. Mas eu acertei todos estes detalhes com o JTidy. Não foi simples nem trivial, mas consegui e achei uma boa solução.

Opa Cintia.

Valeu pelo post, eu comecei a estudar o Jtidy juntamente com o xhtmlrenderer e vi que realmente isto não era o que eu precisava fazer.
Mais foi bom ter estudado pois agora se eu precisar transformar um código HTML em um PDF eu ja sei o que usar.

O meu problema era o seguinte… tome como exemplo este “TextArea” que eu estou escrevendo agora para responder seu post.
Nele eu posso transformar o texto pra negrito, italico, etc… Que por baixo gera um código HTML.
Eu tenho um parecido na minha aplicação, ele gera esse html e envia para o servidor para gravar no banco de dados. Este texto tanto vai ser visualizado em PDF como em um HTML e dentro do OpenLaszlo. No HTML/OpenLaszlo o texto é visualizado normal, formatado.

O problema com o PDF são as fontes, pela minha dedução…
No iReport, quando você vai escolher a fonte de pdf, você encontra fontes como por exemplo:

  • Helvetica
  • HelveticaBold
  • HelveticaBoldOblique
  • HelveticaOblique

Com isso, a tag html por exemplo não tem efeito nenhum sobre o texto, pois a fonte HelveticaBold deve estar selecionada para o texto ficar em negrito. Isso também ocorre com a tag .
Já as tagas

  • e funcionam normalmente, além de algumas outras que também funcionam mais eu não me lembro de cabeça.

    O que eu estou fazendo por enquanto é gerar um RTF em vez de um PDF. Dai ele gera o texto certo, formatado sem exibir as tags.

    Entendeu o meu problema ?

    Valeu pelo post.
    Rodrigo Kerkhoff