Passar parametros para o html do ITEXT convertendo para PDF
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
Curtidas 1
Respostas
Enderson Mendes
04/07/2018
Ola, estou precisando criar um relatório dinâmico tipo esse que você postou, pode me ajudar?
GOSTEI 0