Passar parametros para o html do ITEXT convertendo para PDF

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

Silas

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar