Fórum Passar parametros para o html do ITEXT convertendo para PDF #595301
04/07/2018
0
Olá, estou tentando passar parametros pelo itext que está convertendo o html para o pdf
package br.com.bradesco.web.ibsp.view.exportPDF; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ import com.itextpdf.text.BadElementException; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.FontFactory; import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorker; import com.itextpdf.tool.xml.XMLWorkerHelper; import com.itextpdf.tool.xml.html.Tags; import com.itextpdf.tool.xml.parser.XMLParser; import com.itextpdf.tool.xml.pipeline.css.CSSResolver; import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline; import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline; import com.itextpdf.tool.xml.pipeline.html.AbstractImageProvider; import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline; import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext; import java.awt.Desktop; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.itextpdf.text.pdf.codec.Base64; import com.itextpdf.tool.xml.exceptions.CssResolverException; import com.itextpdf.tool.xml.pipeline.html.ImageProvider; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; /** * * @author Silas Felipe Garcia */ public class GeradorPDFTeste { private final InputStream is; private ImageProvider imProvider; private CSSResolver cssResolver; public static void main(String[] args) { try { download("WebContent/teste.jsp","Teste.pdf"); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void download(String arquivo, String caminho) throws TransformerConfigurationException, TransformerException, IOException, DocumentException { GeradorPDFTeste pdf = new GeradorPDFTeste( new FileInputStream(arquivo)); // GeradorPDFTeste pdf = new GeradorPDFTeste("<h1 style=\\\\"color:red\\\\">Tchau Querida</h1>"); pdf.setImageProvider(new Base64ImageProvider()); pdf.convert(new File(caminho)); } public GeradorPDFTeste(InputStream is) throws TransformerConfigurationException, TransformerException { this.is = is; cssResolver = XMLWorkerHelper.getInstance().getDefaultCssResolver(true); this.imProvider = new Base64ImageProvider(); } public GeradorPDFTeste(String html) throws TransformerException { this(new ByteArrayInputStream(html.getBytes())); } public void setImageProvider(ImageProvider imProvider) { this.imProvider = imProvider; } public void addCss(String css) throws CssResolverException { cssResolver.addCss(css, Boolean.TRUE); } public void convert(OutputStream file) throws DocumentException, IOException { Document document = new Document(PageSize.A4); // paso 2 PdfWriter writer = PdfWriter.getInstance(document, file); // passo 3 document.open(); // passo 4 // HTML HtmlPipelineContext htmlContext = new HtmlPipelineContext(null); htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); if (imProvider != null) { htmlContext.setImageProvider(imProvider); } // Pipelines PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer); HtmlPipeline html = new HtmlPipeline(htmlContext, pdf); CssResolverPipeline css = new CssResolverPipeline(cssResolver, html); // XML Worker XMLWorker worker = new XMLWorker(css, true); XMLParser p = new XMLParser(worker); p.parse(is); // passo 5 document.close(); } public void convert(File os) throws FileNotFoundException, IOException, DocumentException { try { OutputStream out = new BufferedOutputStream(new FileOutputStream(os)); convert(out); // abrindo desktop Desktop.getDesktop().open(os); } catch(Exception e) { e.printStackTrace(); } } static class Base64ImageProvider extends AbstractImageProvider { @Override public Image retrieve(String src) { int pos = src.indexOf("base64,"); try { if (src.startsWith("data") && pos > 0) { byte[] img = Base64.decode(src.substring(pos + 7)); return Image.getInstance(img); } else { return Image.getInstance(src); } } catch (BadElementException | IOException ex) { return null; } } @Override public String getImageRootPath() { return null; } } }

Silas
Curtir tópico
+ 1
Responder
Posts
11/09/2019
Enderson Mendes
Ola, estou precisando criar um relatório dinâmico tipo esse que você postou, pode me ajudar?
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)