Exportação html para pdf

5 respostas
T

Galera, tudo bem?

Estou com um sério problema, se possível me ajudem. Já tentei solucionar de algumas formas porém não obtive sucesso, estou fazendo uma exportação de um html para pdf e preciso que mesmo saia com as imagens e o css configurado como letra arial e tabela com align=center. Comecei com uma div dentro de uma jsp, onde eu passava essa div como parâmetro numa string para a converção e exportação, porém sem sucesso. Agora montei todo html na minha action com fonte no <label> e <td> com font-family para arial e tabela com align center, porém ainda não está exportando com a formatação que estou configurando.

Segue abaixo o fonte:

String nomeArquivo = "EtqCuidadosEspeciais-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".pdf";

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

HttpServletResponse response = super.getServletResponse();

response.setCharacterEncoding("ISO-8859-1");

response.setContentType("application/pdf");

response.setHeader("Content-Disposition", "attachment; filename=" + nomeArquivo);

response.setHeader("Cache-Control", "no-cache");
StringBuilder html = new StringBuilder();
		html.append("&lt;?xml version=\"1.0\" encoding=\"ISO-8859-1\"?&gt;");
		html.append("&lt;!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"&gt;");
		html.append("&lt;link rel='stylesheet' type='text/css' href='/static/css/ris.css' /&gt;");
		html.append("&lt;link rel='stylesheet' type='text/css' href='/static/css/yahoo/menu.css' /&gt;");
		html.append("&lt;link rel='stylesheet' type='text/css' href='/static/css/displaytag.css' /&gt;");
		html.append("&lt;html&gt;&lt;head&gt;");
		html.append("&lt;style type=\"text/css\"&gt;@page {  size: 210mm 291mm; }&lt;/style&gt;");
		html.append("&lt;style type=\"text/css\"&gt;"+getCss()+"&lt;/style&gt;");
		html.append("&lt;/head&gt;");
		html.append("&lt;body&gt;");
		html.append("<br/>");
		//html.append(htmlToExport);
		html.append("&lt;div id='divModalEtiquetaInterna' class='interiorPopups' style='display: block; position:absolute; width:600px; background-color:#FFF; border:2px solid #CCC;' align='center'&gt;");
		html.append("&lt;div class='header_filtros' align='center' style='padding: 5px; vertical-align:top;'&gt;");
		html.append("<br/><br/>");
		html.append("&lt;table width='100%' align='center'&gt;");
		html.append("	&lt;tr&gt;");
		html.append("		&lt;td width='50%' height='100%' align='center'&gt;");
		html.append("				&lt;table cellspacing='0' width='30%' height='100%' style='border: 1; border-style: solid;'&gt;");
		html.append("					&lt;tr&gt;");
		html.append("						&lt;td align='center'&gt;");
		html.append("							&lt;table id='tblComposicao' width='100%'&gt;");
		for(FiguraEtiquetaVo f: result.getListaComposicao()) {
			
			// mostra o tipo da aplicação
			if (result.isMostraTipoAplicacao() && !f.getDsTipAplFib().equals("")) {
				html.append("						&lt;tr&gt;");
				html.append("							&lt;td&gt;&lt;label style='color:#000000; font-family:Arial; font-size:11px;'&gt;" + f.getDsTipAplFib() + "&lt;/label&gt;&lt;/td&gt;");
				html.append("						&lt;/tr&gt;");
			}
			if (getIdioma().trim().equals("br")){
				html.append("						&lt;tr&gt;");
				html.append("							&lt;td style='font-family:verdana; font-size:10px'&gt;&lt;label style='color:#000000; font-family:Arial; font-size:11px;'&gt;" + f.getPcFibTxlArt() + "% " +
																												f.getDsFibTxl_prg() + "&lt;/label&gt;&lt;/td&gt;");
				html.append("						&lt;/tr&gt;");					
			}else if (getIdioma().trim().equals("es")){
				html.append("						&lt;tr&gt;");
				html.append("							&lt;td style='font-family:verdana; font-size:10px'&gt;&lt;label style='color:#000000; font-family:Arial; font-size:11px;'&gt;" + f.getPcFibTxlArt() + "% " +
																												f.getDsFibTxlSph() + "&lt;/label&gt;&lt;/td&gt;");
				html.append("						&lt;/tr&gt;");
			}else if (getIdioma().trim().equals("en")){
				html.append("						&lt;tr&gt;");
				html.append("							&lt;td style='font-family:verdana; font-size:10px'&gt;&lt;label style='color:#000000; font-family:Arial; font-size:11px;'&gt;" + f.getPcFibTxlArt() + "% " +
																												f.getDsFibTxlIgl() + "&lt;/label&gt;&lt;/td&gt;");
				html.append("						&lt;/tr&gt;");
			}
		}
		html.append("							&lt;/table&gt;");
		html.append("						&lt;/td&gt;");
		html.append("					&lt;/tr&gt;");
		html.append("					&lt;tr&gt;");
		html.append("						&lt;td align='center'&gt;&nbsp&lt;/td&gt;");
		html.append("					&lt;/tr&gt;");
		html.append("					&lt;tr&gt;");
		html.append("						&lt;td align='center'&gt;");
		html.append("							&lt;table id='tblFiguraLavagem' width='100%'&gt;");
		html.append("								&lt;tr&gt;");
		for(String imgEtiqueta: resultPedido.getImgManutencaoPeca()) {
			html.append("								&lt;td style='font: arial'&gt;" + imgEtiqueta + "&lt;/td&gt;");
		}
		html.append("								&lt;/tr&gt;");
		html.append("							&lt;/table&gt;");
		html.append("					&lt;/tr&gt;");
		html.append("					&lt;tr&gt;");
		html.append("						&lt;td align='center'&gt;");
		html.append("							&lt;table id='tblGrauInstrucao' width='100%'&gt;");
		for(FiguraEtiquetaVo figuraEtiquetaVo: result.getListaFigLav()) {
			html.append("								&lt;tr&gt;");
			html.append("								&lt;td style='font: arial'&gt;" + figuraEtiquetaVo.getDsGrauInsSph() + "&lt;/td&gt;");
			html.append("								&lt;/tr&gt;");
		}
		html.append("							&lt;/table&gt;");
		html.append("					&lt;/tr&gt;");
		html.append("					&lt;tr&gt;");
		html.append("						&lt;td align='center' style'font: arial'&gt;&nbsp&lt;/td&gt;");
		html.append("					&lt;/tr&gt;");
		html.append("					&lt;tr&gt;");
		String txtProduzido = "";
		String txtPara="";
		if(result.getTextoPaisProd().trim().equals("BR")){
			txtProduzido = getText("lbl.prod.mexico"); 
			txtPara = getText("lbl.prod.mexico.para");
			html.append("							&lt;td align='center' id='tdPais' style'font: arial'&gt;" + txtProduzido + "&lt;/td&gt;");
			html.append("						&lt;/tr&gt;");
			html.append("						&lt;tr&gt;");
			html.append("							&lt;td align='center' style'font: arial'&gt;" + txtPara + "&lt;/td&gt;");
			html.append("						&lt;/tr&gt;");
		}else{
			txtProduzido = getText("lbl.prod.mexico.importado") 
							+ " " + infoImportado.getTxtPaisFabPed();
			String txtInsumo="";
			
			if(infoImportado.getTxtPaisOrigemInsumo()!=null 
					&& infoImportado.getTxtPaisOrigemInsumo().trim().equals("")){
				txtInsumo = getText("lbl.prod.mexico.importado.insumo") + " " + infoImportado.getTxtPaisOrigemInsumo();
			}
			html.append("							&lt;td align='center' id='tdPais' style'font: arial'&gt;" + txtProduzido + "&lt;/td&gt;");
			html.append("						&lt;/tr&gt;");
			html.append("						&lt;tr&gt;");
			html.append("							&lt;td align='center' style'font: arial'&gt;" + txtInsumo + "&lt;/td&gt;");
			html.append("						&lt;/tr&gt;");
		}
		html.append("					&lt;tr&gt;");
		html.append("						&lt;td align='center' style'font: arial'&gt;&nbsp&lt;/td&gt;");
		html.append("					&lt;/tr&gt;");
		html.append("					&lt;tr&gt;");
		html.append("						&lt;td align='center' style'font: arial'&gt;&nbsp&lt;/td&gt;");
		html.append("					&lt;/tr&gt;");
		if (resultPedido.getTipoPedidoPrg().trim().equals(TP_IMPORTADO_PRG)){
			String txtImportadoPor = getText("lbl.prod.mexico.importadopor");
			html.append("						&lt;tr&gt;");
			html.append("							&lt;td align='center' style'font: arial'&gt;" + txtImportadoPor + "&lt;/td&gt;");
			html.append("						&lt;/tr&gt;");
		}
		String txtCeA = getText("lbl.prod.mexico.cea");
		html.append("						&lt;tr&gt;");
		html.append("							&lt;td align='center' style'font: arial'&gt;" + txtCeA + "&lt;/td&gt;");
		html.append("						&lt;/tr&gt;");
		String txtEndereco = getText("lbl.prod.mexico.endereco");
		html.append("						&lt;tr&gt;");
		html.append("							&lt;td align='center' style'font: arial'&gt;" + txtEndereco + "&lt;/td&gt;");
		html.append("						&lt;/tr&gt;");
		String txtLocalidade = getText("lbl.prod.mexico.localidade");
		html.append("						&lt;tr&gt;");
		html.append("							&lt;td align='center' style'font: arial'&gt;" + txtLocalidade + "&lt;/td&gt;");
		html.append("						&lt;/tr&gt;");
		String txtCidadeEstado = getText("lbl.prod.mexico.cidadeestado");
		html.append("						&lt;tr&gt;");
		html.append("							&lt;td align='center' style'font: arial'&gt;" + txtCidadeEstado + "&lt;/td&gt;");
		html.append("						&lt;/tr&gt;");
		String txtCpPais = getText("lbl.prod.mexico.caixapostalpais");
		html.append("						&lt;tr&gt;");
		html.append("							&lt;td align='center' style'font: arial'&gt;" + txtCpPais + "&lt;/td&gt;");
		html.append("						&lt;/tr&gt;");
		String txtRfc = getText("lbl.prod.mexico.rfc");
		html.append("						&lt;tr&gt;");
		html.append("							&lt;td align='center' style'font: arial'&gt;" + txtRfc + "&lt;/td&gt;");
		html.append("						&lt;/tr&gt;");
		String txtTel1 = getText("lbl.prod.mexico.tel1");
		html.append("						&lt;tr&gt;");
		html.append("							&lt;td align='center' style'font: arial'&gt;" + txtTel1 + "&lt;/td&gt;");
		html.append("						&lt;/tr&gt;");
		String txtTel2 = getText("lbl.prod.mexico.tel2");
		html.append("						&lt;tr&gt;");
		html.append("							&lt;td align='center' style'font: arial'&gt;" + txtTel2 + "&lt;/td&gt;");
		html.append("						&lt;/tr&gt;");
		html.append("				&lt;/table&gt;");
		html.append("			&lt;/td&gt;");
		html.append("		&lt;/tr&gt;");
		html.append("	&lt;/table&gt;");
		html.append("	<br/>");
		html.append("&lt;/div&gt;");
		html.append("&lt;/div&gt;");
		html.append("&lt;/body&gt;&lt;/html&gt;");

		Html2Pdf.convert(html.toString(), outputStream, 1.5F, 1);
		response.setContentLength( outputStream.size() );
		
		ServletOutputStream sos = response.getOutputStream();
		outputStream.writeTo(sos);
		sos.flush();

Obrigado,
Tiago L. canatelli

5 Respostas

Polverini

dica: use a tag code sempre que postar seus codigos.

Tem vários posts sobre isso já tentou procurar ?

mesmo assim vou deixar um link que pode ajudar

http://www.guj.com.br/java/77682-converta-html-para-pdf-com-06-linhas-de-codigo

T

Então,

o método de conversão é praticamente o mesmo, porém sem sucesso…
tento setar de todas as formas o css, porém não gera conforme eu monto o html…

T

Galera consegui resolver o problema,
agora estou com outro rs.
Tenho uma imagem no html, aliás várias imagem que coloco com a tag
porém não está aparecendo a mesma, alguém pode mee ajudar?

Takeshi91

Com qual tecnologia está a desenvolver?

Está misturando html puro com faces?

T
JavaEE

import java.io.ByteArrayInputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.UnsupportedEncodingException;
import org.w3c.dom.Document;

import org.w3c.tidy.Tidy;

import org.xhtmlrenderer.pdf.ITextRenderer;

import com.lowagie.text.DocumentException;

Estou passando o html por uma string…

Criado 31 de março de 2011
Ultima resposta 31 de mar. de 2011
Respostas 5
Participantes 3