I can't generate a pdf file
Personal how to generate the PDF file using iText with JSF. The problem and the following, when I ask to generate the PDF file in a class having only the MAIN method, it generates normally, but when I ask to generate XHTML page by the BUTTON it does not generate.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
<title>Listar</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="stylesheet" type="text/css" href="EstiloTabela.css"/>
</h:head>
<h:body style="background-color:gray">
<p:messages autoUpdate="true" errorStyle="color: red"
infoStyle="color: green" layout="table" showSummary="true" showDetail="false" globalOnly="true"/>
<center>
<h:form>
<h:dataTable
id="tableBem"
value="#{BemBean.getList()}"
var="bem"
styleClass="order-table"
headerClass="order-table-header"
rowClasses="order-table-odd-row,order-table-even-row" border="4">
<h:column>
<f:facet name="header">
<p>Codigo Bem</p>
</f:facet>
<p>#{bem.codigoBem}</p>
</h:column>
<h:column>
<f:facet name="header">
<p>nome</p>
</f:facet>
<p>#{bem.nome}</p>
</h:column>
<h:column>
<f:facet name="header">
<p>Codigo Fornecedor</p>
</f:facet>
<p>#{bem.codigoFornecedor}</p>
</h:column>
<h:column>
<f:facet name="header">
<p>Codigo Sala</p>
</f:facet>
<p>#{bem.codigoSala}</p>
</h:column>
<h:column>
<f:facet name="header">
<p>Codigo Marca</p>
</f:facet>
<p>#{bem.codigoMarca}</p>
</h:column>
</h:dataTable>
<h:commandButton value="Relatorio" action="#{BemBean.gerarRelatorio()}"></h:commandButton>
</h:form>
</center>
</h:body>
</html>
public void gerarRelatorio(){
String url = "jdbc:postgresql://localhost:5432/ControlePatrimonio";
String usuario = "postgres";
String senha = "postgres";
try {
Class.forName("org.postgresql.Driver");
Connection con = DriverManager.getConnection(url, usuario, senha);
Statement stmt = con.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM bem");
Document document = new Document();
FileOutputStream fos = new FileOutputStream("RelatorioBem.pdf");
PrintWriter gravarArq = new PrintWriter(fos);
PdfWriter.getInstance(document, fos);
document.open();
while(result.next()){
document.add(new Paragraph(Integer.toString(result.getInt("codigoBem")) + " " + result.getString("nome")));
}
document.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
package controle;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.LinkedList;
import java.util.TreeSet;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import dominio.DAOBem;
@ManagedBean(name="BemBean")
@RequestScoped
public class Bem implements Comparable<Bem>{
private int codigoBem;
private String nome;
private int codigoFornecedor;
private int codigoSala;
private int codigoMarca;
private static Bem singleton;
public Bem(){
}
public void gerarRelatorio(){
DAOBem dao = DAOBem.getSingleton();
dao.gerarRelatorio();
}
public TreeSet<Bem> consultaPorCodigo(){
DAOBem dao = DAOBem.getSingleton();
dao.setCodigo(this.codigoBem);
dao.setCodigoFornecedor(this.codigoFornecedor);
dao.setCodigoSala(this.codigoSala);
dao.setCodigoMarca(this.codigoMarca);
return dao.consultaPorCodigo();
}
public TreeSet<Bem> consultaPorNome(){
DAOBem dao = DAOBem.getSingleton();
dao.setNome(this.nome);
dao.setCodigoFornecedor(this.codigoFornecedor);
dao.setCodigoSala(this.codigoSala);
dao.setCodigoMarca(this.codigoMarca);
return dao.consultaPorNome();
}
public TreeSet<Bem> consultaPorCodigo(int codigo){
DAOBem dao = DAOBem.getSingleton();
return dao.consultaPorCodigo();
}
public static TreeSet<String> getListNomeFornecedor(){
DAOBem bem = DAOBem.getSingleton();
return bem.getListNomeFornecedor();
}
public static TreeSet<String> getListNomeSala(){
DAOBem bem = DAOBem.getSingleton();
return bem.getListNomeSala();
}
public static TreeSet<String> getListNomeMarca(){
DAOBem bem = DAOBem.getSingleton();
return bem.getListNomeMarca();
}
public LinkedList<Bem> getList(){
return DAOBem.getList();
}
public void alterar(int codigoBem,String nome,int codigoFornecedor,int codigoSala,int codigoMarca){
DAOBem bem = DAOBem.getSingleton();
bem.setCodigo(this.getCodigoBem());
bem.setNome(this.getNome());
bem.setCodigoFornecedor(this.getCodigoFornecedor());
bem.setCodigoSala(this.getCodigoSala());
bem.setCodigoMarca(this.getCodigoMarca());
bem.alterar();
}
public void excluir(int codigoBem){
DAOBem bem = DAOBem.getSingleton();
bem.setCodigo(this.getCodigoBem());
bem.excluir();
}
public void cadastrar(String nome,int codigoFornecedor,int codigoSala,int codigoMarca){
DAOBem bem = DAOBem.getSingleton();
bem.setNome(this.getNome());
bem.setCodigoFornecedor(this.getCodigoFornecedor());
bem.setCodigoSala(this.getCodigoSala());
bem.setCodigoMarca(this.getCodigoMarca());
bem.cadastrar();
}
public void setCodigoBem(int codigoBem){
this.codigoBem = codigoBem;
}
public void setNome(String nome){
this.nome = nome;
}
public void setCodigoFornecedor(int codigoFornecedor){
this.codigoFornecedor = codigoFornecedor;
}
public void setcodigoSala(int codigoSala){
this.codigoSala = codigoSala;
}
public void setCodigoMarca(int codigoMarca){
this.codigoMarca = codigoMarca;
}
public int getCodigoBem(){
return this.codigoBem;
}
public String getNome(){
return this.nome;
}
public int getCodigoFornecedor(){
return this.codigoFornecedor;
}
public int getCodigoSala(){
return this.codigoSala;
}
public int getCodigoMarca(){
return this.codigoMarca;
}
public static Bem getSingleton(){
if(singleton == null){
singleton = new Bem();
}
return singleton;
}
@Override
public int compareTo(Bem bem) {
if(this.equals(bem)){
return 0;
}
else{
return 1;
}
}
}
2
Author: Douglas Ricardo, 2015-11-27
2 answers
I think it is missing to work with the context , adapt the example below.
example:
public void createPDF() {
log.debug("entered createPDF");
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "inline=filename=file.pdf");
try {
// Get the text that will be added to the PDF
String text = "test";
// step 1
Document document = new Document();
// step 2
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
// step 3
document.open();
// step 4
document.add(new Paragraph(text));
// step 5
document.close();
// setting some response headers
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
// setting the content type
response.setContentType("application/pdf");
// the contentlength
response.setContentLength(baos.size());
// write ByteArrayOutputStream to the ServletOutputStream
OutputStream os = response.getOutputStream();
baos.writeTo(os);
os.flush();
os.close();
log.debug("flushed and closed the outputstream");
}
catch(DocumentException e) {
log.error("error: "+e);
}
catch (IOException e) {
log.error("error: "+e);
}
catch (Exception ex) {
log.debug("error: " + ex.getMessage());
}
context.responseComplete();
log.debug("context.responseComplete()");
}
Example Source: https://stackoverflow.com/questions/7607795/cant-create-a-pdf-with-itext-and-jsf
0
Author: Mayllon Baumer, 2017-05-23 12:37:34
The problem and that was generating the file in private place. I switched to desktop and it worked
0
Author: Douglas Ricardo, 2015-12-01 16:22:07