Convertendo HTML para PDF

Fala galera…

Seguinte: Eu tenho uma página na web, e gostaria de “jogá-la” dentro de um pdf…

Qual é a melhor api para fazer isso…

Estava vendo a iText, mas parece-me que ela naum faz essa conversão HTML -> PDF…

Aguardo Resposta…

Grato

Olá

Se o que vc quer é apenas converter páginas prontas em html para pdf e não se importa de ver seu layout um pouquinho modificado então o mais fácil é usar algo como o htmldoc. Vá em http://www.easysw.com/htmldoc/software.php e escolha o download correto.

[]s
Luca

[quote=“Luca”]Olá

Se o que vc quer é apenas converter páginas prontas em html para pdf e não se importa de ver seu layout um pouquinho modificado então o mais fácil é usar algo como o htmldoc. Vá em http://www.easysw.com/htmldoc/software.php e escolha o download correto.

[]s
Luca[/quote]

Valew cara, eu to baixando agora esse prog. pra dar uma olhada

Mas eh o seguinte, o layout pra mim importa. Pois nessa pág. eu tenho cabeçalho, rodapé, etc…

Gostaria q essa conversão fosse fiel (layout e dados idênticos ao HTML apresentado).

E tb. essa conversão será feita com uma aplicação em java, sem a participação do usuário…

Um Servlet ou de outro modo. Estava vendo o iText, mas parece-me q ele naum faz essa conversão automática de html -> pdf

Eh isso…

Grato

Olá

As mudanças são pequenas. Durante algum tempo escrevi meus documentos em html como já faço há anos e para o cliente enviava convertido para html usando este programinha.

[]s
Luca

Nossa, HTMLDoc eh do caralho :mrgreen:

Usei uma vez… fica mto bom

Rafael

Eu baixei o HTMLDoc. Não mexi muito, mas pude perceber que a conversão para pdf é feito manualmente. Digo, o usuário tem q salvar o html e converter este html para pdf. Me corrijam se eu estiver errado.

Se for isso, naum me serve…Eu quero uma coisa automatizada… A geração do pdf é sem a interferência do usuário…

Se o prog. fizer isso, me avisem… Ou entaum se tiver como eu utilizar alguma biblioteca dele…

Grato

Olá

Automaticamente? Não vai servir.

Mas vc pode ajudar a gente. Há um treco chamado ClibPDF que sei que existe mas nunca usei. É uma Lib para ser chamada por C. E Java fala facinho com C por JNI ou sockets. Depois nos diga se é bom ou não.

Outra coisa que nunca usei é o tal de FOP. Aqui no GUJ tem um monte de posts sobre o FOP.

[]s
Luca

Nada… com um pouco de codigo vc resolve a situacao…

tipo, instala o htmldoc no servidor, e roda ele via Runtime.getRuntime().exec() pra gerar o pdf …

Rafael

Olá

Caramba Rafael, uso este htmldoc há mais de 2 anos e nunca usei na linha de comando. Que vergonha! Acho que não tinha visto no Readme.txt que podia fazer:

htmldoc   -f   saida.pdf    meu_arq.html

Valeu!

[]s
Luca

Que tal uma solução assim:
:arrow: 1 XML com os dados a serem apresentados no relatório;
:arrow: 1 XSL para converter o XML acima em HTML;
:arrow: 1 XSL para converter o XML em PDF;

E lembre-se que pode-se usar FOP (http://xml.apache.org/fop) para isso transformar o tal XML em PDF. Além disso, há alguns tutoriais aqui no GUJ que ensinam a fazer renderização de documentos XML usando XSTL :wink: .

O htmldoc eh bom pra qdo vc ja tem os htmls prontos ( aka, vc “descobre” que precisa converter algumas paginas para pdf no meio do projeto )…

Rafael

[quote=“Daniel Quirino Oliveira”]Que tal uma solução assim:
:arrow: 1 XML com os dados a serem apresentados no relatório;
:arrow: 1 XSL para converter o XML acima em HTML;
:arrow: 1 XSL para converter o XML em PDF;

E lembre-se que pode-se usar FOP (http://xml.apache.org/fop) para isso transformar o tal XML em PDF. Além disso, há alguns tutoriais aqui no GUJ que ensinam a fazer renderização de documentos XML usando XSTL :wink: .[/quote]

Ae, valew…

1- Seguinte: Eu consigo ao invés de gerar um HTML, gerar um XML e XSL…

2- E desses 2 arquivos gerar o pdf…

Gostaria de saber se essa segunda etapa é facilmente realizanda utilizando alguma api, como o itext ou até mesmo o htmldoc…

É isso…

Grato

Olá

Se vai gerar XML e XSL então como já foi dito use o FOP. Até hoje não usei porque me disseram que é difícil. Então depois de usar nos diga as dificuldades que sentiu.

[]s
Luca

[quote=“Luca”]Olá

Se vai gerar XML e XSL então como já foi dito use o FOP. Até hoje não usei porque me disseram que é difícil. Então depois de usar nos diga as dificuldades que sentiu.

[]s
Luca[/quote]

Blz… Vou dar uma olhada no FOP… Vou dar uma olhada tb no iText…Acho q ele faz esse tipo de parse…

Ahh, instalei o HTMLDOC e mexi… Gostei bastante…
Realmente ele é muito bom !!!

Entretando tentei gerar um pdf pela linha de comando, ( htmldoc -f nome.pdf nome.html ), mas naum deu…

O exe agora se chama ghtml… Tentei fazer com esse EXE mas naum deu…simplesmente naum faz nada…

Tô utilizando WinXP…

Se alguém souber o pq… me avisem…

Valews… Utilizava pouco esse fórum, mas agora gostei bastante devido a qtidade de respostas e a qualidade das mesmas !!!

Parabéns… :lol:

Falows

Olá

Sujou!

Manual do HTMLDOC, página 4.1
[list]Note:
The free version of HTMLDOC for Windows does not include the command−line program.[/list]
Pena! Tava tão bom…

[]s
Luca

[quote=“Luca”]Olá

Sujou!

Manual do HTMLDOC, página 4.1
[list]Note:
The free version of HTMLDOC for Windows does not include the command−line program.[/list]
Pena! Tava tão bom…

[]s
Luca[/quote]

Puts… que pena !!!

Tava até pensando em utilizá-lo como alternativa…

blz então… Valews

Falows

Aee galera…

Seguinte: Eu achei um modo de converter HTML para pdf… Entretando não testei, e nem sei se funciona…

Aki o link: http://128.146.118.49/pdfsamples/asp_readme.htm

Eu vou fazer um teste aki e já digo se é bom…

Falows

Desculpem mas se eu entendi, vc simplesmente quer transformar um arquivo html em pdf??

se for isso posso te ajudar com iText.
Tenho um pouco de experiencia com ele.
em relação a esta tarefa ele é muito fácil e a documentação do site é show!
posta aqui o html de exemplo.
que eu posto a versão pdf para teu exemplo. :wink:

[quote=“mbjunior”]Desculpem mas se eu entendi, vc simplesmente quer transformar um arquivo html em pdf??

se for isso posso te ajudar com iText.
Tenho um pouco de experiencia com ele.
em relação a esta tarefa ele é muito fácil e a documentação do site é show!
posta aqui o html de exemplo.
que eu posto a versão pdf para teu exemplo. :wink:[/quote]

Ehh exatamente isso que eu quero HTML para PDF… Eu ate consigo jogar as infos la dentro…mas o q q ta barrano eh o layout da pagina…

como q eu consigo deixar idêntico a pag. no pdf ??

eu tava vendo o iText tb !!!

Posta aki o codigo ou me manda no email por favor…

Valews

Ola, boa tarde a todos e desculpem estar resulcitando esse tópico de 4 anos atrás (na verdade já estou exumando o tópico hehehe).

Bem estou passando pela mesma situação do ‘Jaoliveira’ e estou pesquisando com iText, xhtmlRenderer e JTidy. Porem estou encontrando problemas com as imagens, onde o pdf gerado fica com o espaço correspondente a imagem certinho mas imagem que é bom nada.
E outra o tamanho da página que o pdf gera uma página enorme mas o conteúdo ocupa só parte da área visivel. Eu até já ia abrir um novo tópico para tal dúvida mas achei melhor exumar esse que achei na busca.

Para exemplificar melhor vejam o que acontece:
Tenho os vendedores em campo, espalhados por todo o Brasil, onde os mesmos regitram pedidos via Smatphones e PDA Palm. Ai entre as ida e vindas do servidor eu tenho um servidor que não tem servidor web ou seja isso deve ser em JAVA puro, onde ele se conecta ao site pega a página de pedidos e gera esse pdf, quem atual diretamente no sistema apenas me passou para que seja assim ou seja esse é o unico detalhamento que eu tenho, concordo que ter na própria intra/extranet esses sistema fica melhor, porem deve ter alguma coisa para que queiram no servidor separado. Já até tinha montado um web para tal mas mandaram descartar, ou seja estou reaproveitando as convesões que eu tinha só necessito desta questão da imagem.

Há e outra nem todos os CSS estão saido como a página web, ou seja alguns div estão saindo sem a cor que deveriam e por ai. Seguem alguns códigos para exemplo.

Programa JAVA

import org.w3c.dom.Document;  
import org.w3c.tidy.Tidy; 
import org.xhtmlrenderer.pdf.ITextRenderer;  
import com.lowagie.text.DocumentException;  
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Scanner;

/********************************************************************
 * Classe de conversão de html para pdf exemplo criado pelo Eder Baum e adaptado
 * por Paulo Patto, verificar na see o link do exemplo.
 * Adaptação apenas para nomes de arquivos em path e entre outros.
 * 
 * @author Paulo Patto
 * @see http://www.javafree.org/javabb/viewtopic.jbb?t=866449#
 * @since 15 / outubro / 2008
 ********************************************************************/
public class Html2Pdf {  
	
        /**
         * Método de conversão de formatos.
         * 
         * @param input "Arquivo de origem de dados"
         * @param out "Arquivo de destino para saida."
         * @throws com.lowagie.text.DocumentException
         */
	public static void convert(String input, OutputStream out) throws DocumentException{  
		convert(new ByteArrayInputStream(input.getBytes()), out);  
	}  
        
        /**
         * Método de conversão de formatos HTML to PDF.
         * 
         * @param java.io.InputStream input - "Arquivo com a origem de dados para conversão"
         * @param java.io.OutputStream out  - "Arquivo de destino gerado, com o conteúdo já convertido"
         * @throws com.lowagie.text.DocumentException
         */
	public static void convert(InputStream input, OutputStream out) throws DocumentException{  
		
                Tidy tidy = new Tidy();       
		tidy.setCharEncoding(3);
                Document doc = tidy.parseDOM(input, null);  
		ITextRenderer renderer = new ITextRenderer();
		renderer.setDocument(doc, null);  
		renderer.layout();         
		renderer.createPDF(out);                
	}     
	public static void main(String[] args){
            try{
                /** Criando o arquivo de destino. */
		OutputStream os = new FileOutputStream("C:\\outputfile.pdf"); 
                /// *Exemplificando com um HTML salvo em minha máquina.
                /**Abrindo o arquivo de origem de dados.*/
                File page = new File("C:\\files\\PEDIDOS.HTML");
                StringBuffer buffer = new StringBuffer();
                Scanner scanner = new Scanner(page);
                while(scanner.hasNextLine()){buffer.append(scanner.nextLine());}
                String doc = buffer.toString();
                ///Conversão de formatos.
		Html2Pdf.convert(doc, os);             
		os.close();  
            }
            catch(FileNotFoundException e){System.out.println("[Arquivo não encontrado.]");e.printStackTrace();}
            catch(IOException e){e.printStackTrace();}
            catch(DocumentException e){e.printStackTrace();}
	}
}  
 

segue o html

<!--Coloquei as CSS no emsmo arquivo só para representar, mas elas estão em arquivos separados.-->
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8" />
    
    <style type=text/css>
    BODY {FONT-SIZE:80%;FONT-FAMILY:Verdana, Geneva, Arial, Helvetica, Sans-Serif;}
    TH {FONT-SIZE:80%;FONT-FAMILY:Verdana, Geneva, Arial, Helvetica, Sans-Serif;}
    TD {FONT-SIZE:80%;FONT-FAMILY:Verdana, Geneva, Arial, Helvetica, Sans-Serif;}
    DD {FONT-SIZE:80%;FONT-FAMILY:Verdana, Geneva, Arial, Helvetica, Sans-Serif;}
    CODE {FONT-SIZE:80%;FONT-FAMILY:Verdana, Geneva, Arial, Helvetica, Sans-Serif;}
    TT {FONT-SIZE:80%;FONT-FAMILY:Verdana, Geneva, Arial, Helvetica, Sans-Serif;}
    .title {DISPLAY:block;FONT-WEIGHT:bold;FONT-SIZE:150%;COLOR:#e76f00;}
    .subTitle {DISPLAY:block;FONT-WEIGHT:bold;FONT-SIZE:95%;COLOR:#e76f00;}
    .main {PADDING-RIGHT:0px;MARGIN-TOP:10px;DISPLAY:block;PADDING-LEFT:5px;PADDING-BOTTOM:0px;PADDING-TOP:0px;}
    .section {BORDER-RIGHT:#e0e0e0 1px solid;PADDING-RIGHT:10px;BORDER-TOP:#e0e0e0 1px solid;MARGIN-TOP:10px;DISPLAY:block;PADDING-LEFT:10px;PADDING-BOTTOM:10px;BORDER-LEFT:#e0e0e0 1px solid;PADDING-TOP:5px;BORDER-BOTTOM:#e0e0e0 1px solid;BACKGROUND-COLOR:#f9f9f9;}
    .mainTable {MARGIN-TOP:10px;WIDTH:100%;BORDER-COLLAPSE:collapse;}
    .mainTable TD {FONT-WEIGHT:bold;}
    .pedidoHeaderTable {MARGIN-TOP:10px;MARGIN-BOTTOM:10px;BORDER-COLLAPSE:collapse;}
    .pedidoHeaderTable TD {FONT-WEIGHT:bold;}
    .pedidoHeaderLabelColumn {WIDTH:5%;TEXT-ALIGN:left;}
    .pedidoHeaderValueColumn {WIDTH:20%;}
    .labelColumn {WIDTH:10%;COLOR:#414141;TEXT-ALIGN:right;}
    .dataTable {MARGIN-TOP:10px;MARGIN-BOTTOM:10px;WIDTH:95%;BORDER-COLLAPSE:collapse;}
    .dataTable THEAD {FONT-WEIGHT:bold;}
    .dataTable TFOOT {FONT-WEIGHT:bold;}
    .dataTable TH {BORDER-RIGHT:#e0e0e0 1px solid;PADDING-RIGHT:3px;BORDER-TOP:#e0e0e0 1px solid;PADDING-LEFT:3px;BACKGROUND:#e0e0e0;PADDING-BOTTOM:3px;BORDER-LEFT:#e0e0e0 1px solid;PADDING-TOP:3px;BORDER-BOTTOM:#e0e0e0 1px solid;TEXT-ALIGN:left;}
    .dataTable TD {BORDER-RIGHT:#e0e0e0 1px solid;PADDING-RIGHT:3px;BORDER-TOP:#e0e0e0 1px solid;PADDING-LEFT:3px;PADDING-BOTTOM:3px;BORDER-LEFT:#e0e0e0 1px solid;PADDING-TOP:3px;BORDER-BOTTOM:#e0e0e0 1px solid;}
           </style>
    
</head> 
<body bgColor=#ffffff>

<table class=mainTable border=1 >
<tbody>
<tr>
&lt;td&gt;<img    />&lt;/td&gt;
&lt;/tr&gt;    
&lt;tr&gt;
&lt;td&gt;INFORMÁTICA LTDA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PEDIDO No: 2173&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AV. SEM NOME - 12o ANDAR - TERRA DO NUNCA - S&#65533;O PAULO - CEP.: 00000-000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DATA DE EMISS&#65533;O: 16/10/2008&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FONE: (11)XXXX-XXXX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FAX: (11) YYYX-XXXY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Site: www.seudominio.com.br&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/span&gt;<br>&lt;span class=section&gt;&lt;span
class='subTitle'&gt;Pedido&lt;/span&gt; 
&lt;table class='pedidoHeaderTable'&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class='pedidoHeaderLabelColumn'&gt;Cliente: &lt;/td&gt;
&lt;td class='pedidoHeaderValueColumn'&gt;CORE LTDA.&lt;/td&gt;
&lt;td class='pedidoHeaderLabelColumn'&gt;Fone: &lt;/td&gt;
&lt;td class='pedidoHeaderValueColumn'&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=4 class='pedidoHeaderLabelColumn'&gt;Endere&#65533;o: AV NO NAME&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=4 class='pedidoHeaderLabelColumn'&gt;Prazo Pgto: 30/60/90 dias - A prazo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=4 class='pedidoHeaderLabelColumn'&gt;N&#65533;mero Pedido Cliente: &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=4 class='pedidoHeaderLabelColumn'&gt;Pacote: 350-OUTUBRO / 2008 - RENTAL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=4 class='pedidoHeaderLabelColumn'&gt;Desconto(%):-0.00&lt;/td&gt;
&lt;/tr&gt;


&lt;/tbody&gt;
&lt;/table&gt;

&lt;span class=section&gt;&lt;span
class='subTitle'&gt;Itens do Pedido&lt;/span&gt; 

&lt;table class=dataTable&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th width=30&gt;Ref.&lt;/th&gt;
&lt;th&gt;Descri&#65533;&#65533;o&lt;/th&gt;
&lt;th&gt;Quant.&lt;/th&gt;
&lt;th&gt;Unid.&lt;/th&gt;
&lt;th align='right'&gt;V.Unit&#65533;rio&lt;/th&gt;
&lt;th align='right'&gt;V.Total&lt;/th&gt;
&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;

&lt;tr&gt;
&lt;td&gt;100034142&lt;/td&gt;
&lt;td&gt;XXXXXX&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;PC&lt;/td&gt;
&lt;td&gt;76.41&lt;/td&gt;
&lt;td&gt;152.82&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100034136&lt;/td&gt;
&lt;td&gt;WWWWWW&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;PC&lt;/td&gt;
&lt;td&gt;76.41&lt;/td&gt;
&lt;td&gt;152.82&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100034141&lt;/td&gt;
&lt;td&gt;@@@@@@@@@&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;PC&lt;/td&gt;
&lt;td&gt;88.40&lt;/td&gt;
&lt;td&gt;265.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100031579&lt;/td&gt;
&lt;td&gt;************&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;PC&lt;/td&gt;
&lt;td&gt;29.90&lt;/td&gt;
&lt;td&gt;29.90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100033747&lt;/td&gt;
&lt;td&gt;PPPPPPPP&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;PC&lt;/td&gt;
&lt;td&gt;29.90&lt;/td&gt;
&lt;td&gt;29.90&lt;/td&gt;
&lt;/tr&gt;
&lt;tfoot&gt;
&lt;tr&gt;
&lt;td&gt;Valor Produtos:&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;$630.64&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;/tfoot&gt;&lt;/table&gt;&lt;/span&gt;
<p></p>&lt;strong&gt;<font color=#e76f00></font>&lt;/strong&gt;&lt;/span&gt;
<p></p>&lt;strong&gt;<font 
color=#e76f00></font>&lt;/strong&gt;&lt;strong&gt;<font 
color=#e76f00></font>&lt;/strong&gt;
&lt;hr&gt;


&lt;table width="100%" border=1&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=labelColumn&gt;Representante: &lt;/td&gt;
&lt;td&gt;CARLOS ALBERTO&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;/body&gt;&lt;/html&gt;