Converta HTML para PDF com 06 linhas de Código

E ai galera!!
To com um template aqui, passo valores pra ele em java e depois gero outro html e to tentando converter pra PDF mas nao to conseguindo, a imagem de fundo não carrega no PDF quando uso o parametro “background” em uma tag “td”. Ja Tentei colocar uma tag img com o parametro “style = position: absolute” e assim tambem nao deu!

Alguem tem alguma ideia,
desde ja agradeço!

Rafael

Pessoal, estou gerando o PDF a partir de um html. Esta gerando blz, mas ta ocorrendo um problema esta gerando o pdf cortando o conteudo verticalmente. O conteudo é um relatorio, uma tabela, e por exmplo a tabela tem 7 colunas ai o pdf corta e só gera até a metade da 5 por ex. Entao baixei os fontes do core-renderer, e estou tentando ver aqui como faço e onde altero pra poder corrigir isso. Ja coloquei para o tamanho da folha ficar na posição de paisagem mas ele exibiu a folha no formato paisagem com o conteudo da mesma forma, cortado. Solicito a ajuda de vcs para que eu possa resolver esse problema.
Desde Ja agradeço a todos.

A questão eh o seguinte!!

Essa biblioteca nao resolve o problema de muitas pessoas.

Descobri uma que é simplesmente perfeita! Sem erro algum

http://www.pd4ml.com/

Porem, paga!

Consegui resolver o problema de aumentar a largura da página no pdf de modo a exibir as colunas que antes nao estavam saindo no pdf.

Para resolver o problema eu coloquei no meu HTML o seguinte:

@page { size: 17.18in 15.88in; margin: 0.25in; -fs-flow-top: "header"; -fs-flow-bottom: "footer"; -fs-flow-left: "left"; -fs-flow-right: "right"; border: thin solid black; padding: 1em; }

No atributo size eu configuro a largura e a altura da página. Aumentando o valor desse atributo o pdf foi gerado com uma página maior e o conteudo extra foi adicionado.

Espero ter ajudado.

Agora estou com um problema na geração do pdf atraves de um html usando o itext. Ele nao esta centralizando os textos definidos no html como aling=“center”. Mesmo os textos dentro de uma div com aling=“center” o pdf nao esta com o texto centralizado.

Agradeço!

[color=darkblue] Como utilizar em um código como esse ? alguém já tentou ?[/color]

<html>
    <head>
        <title>Tutorial de ExtJs</title>
        <link rel="stylesheet" type="text/css" href="resources/css/ext-all.css"/>
        <script type="text/javascript" src="adapter/ext/ext-base.js"></script>
        <script type="text/javascript" src="ext-all.js"></script>
        <style type="text/css">
            html, body {font: normal 11px verdana;}
            #main-panel td {padding:5px;}

            .add-feed {
             background-image: url(examples/feed-viewer/images/rss_add.gif) !important;
             }
            .remove-feed {
              background-image: url(examples/feed-viewer/images/rss_delete.gif) !important;
            }

[color=darkblue] Não estou conseguindo importar os arquivos dos sources, alguém poderia me ajudar ?

Desde já agradeço ![/color]

tente usar file:/// antes dos nomes dos arquivos. Por exemplo digamos que quero usar uma imagem e esta esta em c:\imgs\img.jpg entao ficaria file:///c:\imgs\img.jpg

nao tenho certeza se são 2 ou 3 barras depois do “file:”. teste ai e veja com qual funciona.

abraço!

só pra completar a minha resposta. Quando digo pra usar file:/// antes dos arquivos digo pra colocar isso dentro do valor do atributo da tag. por exemplo agora isso nao sei se vai funcionar para o contexto relativo. Mas veja ai!

[color=darkblue] Tentei fazer dessa forma, continua ocorrendo o mesmo erro, obrigado pela resposta :[/color]

<html>
    <head>
        <title>Tutorial de ExtJs</title>
        <link rel="stylesheet" type="text/css" href="file:///resources/css/ext-all.css"/>
        <script type="text/javascript" src="file:///adapter/ext/ext-base.js"></script>
        <script type="text/javascript" src="file:///ext-all.js"></script>
        <style type="text/css">
            html, body {font: normal 11px verdana;}
            #main-panel td {padding:5px;}

            .add-feed {
             background-image: url(file:///examples/feed-viewer/images/rss_add.gif) !important;
             }
            .remove-feed {
              background-image: url(file:///examples/feed-viewer/images/rss_delete.gif) !important;
            }

[color=darkblue] Segue o erro abaixo, testei com outra página e funcionou, sem os “SRC” e imports:[/color]

java.io.IOException: Stream closed
	at java.io.BufferedInputStream.getInIfOpen(Unknown Source)
	at java.io.BufferedInputStream.read1(Unknown Source)
	at java.io.BufferedInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at org.xhtmlrenderer.css.parser.Lexer.zzRefill(Lexer.java:1634)
	at org.xhtmlrenderer.css.parser.Lexer.yylex(Lexer.java:1865)
	at org.xhtmlrenderer.css.parser.CSSParser.next(CSSParser.java:1798)
	at org.xhtmlrenderer.css.parser.CSSParser.la(CSSParser.java:1810)
	at org.xhtmlrenderer.css.parser.CSSParser.stylesheet(CSSParser.java:159)
	at org.xhtmlrenderer.css.parser.CSSParser.parseStylesheet(CSSParser.java:89)
	at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:78)
	at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:95)
	at org.xhtmlrenderer.context.StylesheetFactoryImpl.getStylesheet(StylesheetFactoryImpl.java:174)
	at org.xhtmlrenderer.context.StyleReference.readAndParseAll(StyleReference.java:123)
	at org.xhtmlrenderer.context.StyleReference.setDocumentContext(StyleReference.java:107)
	at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:175)
	at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:142)
	at Html2Pdf.convert(Html2Pdf.java:41)
	at Html2Pdf.main(Html2Pdf.java:81)

Olá galera, sou novo aqui no forum e estou com o mesmo problema do LuisCS . Não consigo justificar o texto apos gerar o pdf .Alguem por acaso descobriu com fazer isso .
Agradeço caso alguém possa me ajudar.

[quote=luisCS]Olá galera, tou conseguindo gerar o PDF beleza. Tenho somente 1 problema que é justamente referente a textos justificados (

). O PDF não está interpretando essa solicitação.
Agradeço caso alguém possa me ajudar.
[/quote]

Tenho o mesmo problema alguem tem a solução???

Alguém sabe como definir o layout da página (A4,A3, A5, etc…) e também como forçar a quebra de uma página?

[]´s

Daniel

Olá pessoal!

Utilizei este ótimo artigo escrito pelo nosso amigo Éder Baum :D. Mas tinha uma dúvida, que segundo ele vários leitores tambem possuem, que é como configurar as margens do arquivo PDF. Ele deu a dica e eu pesquisei e encontrei algo muito interessante.
As margens no arquivo PDF são configuradas através de uma regra CSS que deve ser inserida no corpo do arquivo HTML. A regra @page define alguns pontos referentes a página, e segue abaixo um exemplo do uso da mesma baseado no artigo do Éder:

[code]OutputStream os = new FileOutputStream(“C:\hello.pdf”);;

String corpo = “”;
corpo = “”;
corpo += “@page { “;
corpo += " size: 4.18in 6.88in;”; //Tamanho da folha
corpo += " margin: 30px 20px 15px 35px;”; //Margem: Cima Direita Baixo Esquerda
corpo += “}”;
corpo += “”;
corpo += “

”;
corpo += " Hello PDF";
corpo += “

”;

Html2Pdf.convert(corpo, os);
os.close();[/code]

[quote=EderBaum]Sempre vejo pessoas procurando por ai como converter HTML para PDF, mas sempre as soluções são obscuras complicadas e não muito “limpas”, as vezes requerendo bibliotecas proprietárias.
Pois então vou lhe dar uma solução com apenas 06 linhas de código que salvará sua alma :smiley: . Lá vamos nós rápidos e rasteiros. Como o código é mediocremente pequeno vou colocar tudo aqui pra encher linguiça, até os imports

[code]import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.w3c.dom.Document;
import org.w3c.tidy.Tidy;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.lowagie.text.DocumentException;

/**

  • @Autor Eder Baum
    */
    public class Html2Pdf {

    public static void convert(String input, OutputStream out) throws DocumentException{
    convert(new ByteArrayInputStream(input.getBytes()), out);
    }

    public static void convert(InputStream input, OutputStream out) throws DocumentException{
    Tidy tidy = new Tidy();
    Document doc = tidy.parseDOM(input, null);
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(doc, null);
    renderer.layout();
    renderer.createPDF(out);
    }

}
[/code]

Se você contar o numero de linhas do 2º método convert, verá que há apenas 06 linhas como prometido, e para usar esta classe, o código é menor ainda:

OutputStream os = new FileOutputStream("C:\\hello.pdf");; Html2Pdf.convert("<h1 style=\"color:red\">Hello PDF</h1>", os); os.close();

Os jars que vc precisa são estes
Tidy : http://jtidy.sourceforge.net
XHTMLRenderer : https://xhtmlrenderer.dev.java.net/
Itext: http://www.lowagie.com/iText

Espero que tenham divertido-se.[/quote]

Oi pessoal,
Esta solução funcionou legal. Muito Bom.
Agora, queria perguntar como vocês fazem para manipular imagens que estão no html para converter em pdf. Se puderem mostrar um exemplo será de grande ajuda.

Obrigado!

Opa, desculpem eu não tinha visto os posts anteriores, achei que estivesse na primeira página. VOu dar uma olhada melhor.

Passe a url ou pasta da imagem…
Algo como:

<img src="c:/imagem.jpg"> 
<img src="http://www.seusite.com.br/imagem.jpg">

[]´s
Daniel

Galera,
Alguém saberia alguma forma de gerar, ao invés de um pdf, um .doc para microsoft word?
Seria fazer essa mesma conversão de HTML só que para .doc. Os usuários do sistema no qual estou trabalhando só utilizam office e precisarão editar o documento gerado.
Se alguém puder me ajudar ou tiver algum exemplo, fico grato.

Obrigado.

Pessoal, preciso de uma ajudinha rsrs…
1º gostaria de parabenizar pelo otimo post…

é o seguinte… no meu sistema é gerado um relatorio, onde nesse relatorio existe
um atributo String que neste atributo contem as tags HTML, contudo no meu caso não é gerado um pdf apenas dessa parte…
e sim de varios outros dados do banco…

Gostaria de saber se tem alguma forma de decodificar o html desse atributo, sem q tenha q criar um pdf a parte…

Desde já agradeço

ótimo post me ajudou muito.
mas se alguem já conseguiu fazer o redimensionamento de alguma imagem??

ex:

<IMG src="<%=caminhoImagens %>/imagens/imgbrrlrj.jpg" style="height:26px;width:5px;" alt="caixa amarela"/>

onde style=“height:26px;width:5px;” é o tamanho que eu queria para essa imagem…
o problema é que ele cria o espaço para a image desse tamanho mas ela não muda seu tamanho original dai fica um quadrado branco do tamanho que eu queria…

no jsp ele funciona perfeito é no pdf que da esse problema.

Oi Gente! Sou nova no GUj e em java, por isso perdoem-me as gafes…

Bem, meu problema e um pouquinho diferente, ou igual, nao sei ao certo…

Meu HTML e convertido beleza ecxeto por um detalhe, o código de barras fica com todas as barras finas, ou seja todas elas iguais como posso corrigir se no HTML ta legal?

Dese já obrigada