[RESOLVIDO]Não gera PDF quando deixo o programa executável

31 respostas
Lukas0145

Olá,

Meu programa está feito, então fui dar um Export para deixá-lo executável, até aí tudo funcionou porém, na hora de gerar um PDF ele simplesmente não gera! E nem entra no catch do erro, simplesmente para o programa e não gera. Eu peço ao usuário: Nome que deseja salvar o PDF e em que diretório ele deseja salvar. Lembrando que esse erro só acontece quando deixo o programa executável.

Tem de fazer alguma coisa mais que eu não sei? Por exemplo, para gerar PDF precisa de uns External JAR files, tenho que selecionar alguma opção para isso?

Grato,

Lukas.

31 Respostas

Danilo_Carvalho

Boa noite.

Não sei se vai ajudar.

Mas onde estão sendo armazenados os arquivos.jasper, de preferencia coloque dentro de um pacote.

Até mais…

Lukas0145

Danilo Carvalho:
Boa noite.

Não sei se vai ajudar.

Mas onde estão sendo armazenados os arquivos.jasper, de preferencia coloque dentro de um pacote.

Até mais…


Desculpa, mas o que são os arquivos.jasper? Os .jar referente ao PDF estão na biblioteca, os quais deveriam ser automaticamente exportados juntos ao projeto…

yfalbino

olá, nao sei se vai te ajudar, mas se voce tiver usando o iReport, ele ja tem a opção de gerar o relatorio direto em pdf.

olhe:

espero ter ajudado

Lukas0145

yfalbino:
olá, nao sei se vai te ajudar, mas se voce tiver usando o iReport, ele ja tem a opção de gerar o relatorio direto em pdf.

olhe:

espero ter ajudado

Não uso isso ai não… Tô usando o Eclipse normalmente e dando um Export no projeto e deixando-o em arquivo.jar. O gerador de PDF é feito por mim mesmo… Recolho dados do usuário e passo para o PDF e depois salvo-o num diretório.

yfalbino

porque voce nao tenta converter para pdf usando o iReport ?

passe os dados do usuario para ele e depois salve em pdf, acho que ficaria melhor até para voce

Lukas0145

yfalbino:
porque voce nao tenta converter para pdf usando o iReport ?

passe os dados do usuario para ele e depois salve em pdf, acho que ficaria melhor até para voce


Não sei usar o iReport.

O pdf que crio é não é algo genérico, eu preciso calcular e coletar informações e dps gero um pdf com todos dados… N tem como fazer sem esse iReport?

yfalbino

nao conheço um modo de fazer isto sem ser usando outra ferramenta, acredito que nao seja impossivel, mas nao conheço outra forma

de uma pesquisada sobre o iReport, se precisar, eu crio um projeto explicativo para voce.

Lukas0145

yfalbino:
nao conheço um modo de fazer isto sem ser usando outra ferramenta, acredito que nao seja impossivel, mas nao conheço outra forma

de uma pesquisada sobre o iReport, se precisar, eu crio um projeto explicativo para voce.

Crt… Se possível, gostaria sim que fizeste um PDF no iReport em relação ao java… Se não for incomodo, é claro! Meu pdf é +/- assim:

Obs: eu dei uma olhada num guide do iReport e o cara mostrou com Banco de Dados… Só lembrando que não utilizo Banco de Dados.

public static void criarPDF(String nomePDF,String diretorio) throws Exception {

		Document doc = null;
		OutputStream os = null;

		try {
			// cria o documento tamanho A4, margens de 2,54cm
			doc = new Document(PageSize.A4, 72, 72, 72, 72);

			// cria a stream de saída
		
			os = new FileOutputStream(diretorio+nomePDF+".pdf"); 
			// associa a stream de saída ao
			PdfWriter.getInstance(doc, os);

			// abre o documento
			doc.open();

			// adiciona o texto ao PDF
			Font f = new Font(FontFamily.COURIER, 20, Font.BOLD);
			Font f2 = new Font(FontFamily.COURIER, 14, Font.BOLD);
			// rescisão
			Paragraph p = new Paragraph("RESCISÃO DE CONTRATO", f);
			p.setAlignment(Element.ALIGN_CENTER);
			p.setSpacingAfter(20);
			doc.add(p);
			Paragraph p1 = new Paragraph("Funcionário:"
					+ JanelaRescisaoComJustaCausa.func.toUpperCase(), f2);
			p1.setAlignment(10);
			doc.add(p1);
} finally {
			if (doc != null) {
				// fechamento do documento
				doc.close();
			}
			if (os != null) {
				// fechamento da stream de saída
				os.close();
			}
		}
geraldofrancisco

Eu tbm recomendo que vc procure saber sobre o irreport;

Cara esse programa salvou minha vida!

snowblacksoul

Cara eu utilizo ireport para gerar relatorio em pdf´s. Quer um conselho comece a usar o ireport irá facilitar e muito sua vida.
Se nao utiliza banco de dados tudo bem, passe as informações que vc quer para o ireport e ele monta o pdf pra vc, com imagens etc!
boa sorte!

yfalbino

cara, nao estou conseguindo mandar o pdf explicativo para voce, mesmo estando no tamanho limite imposto pelo forum, nao envia =/

snowblacksoul

Acho que vai esclarecer suas dúvidas !
Achei um bom tutorial aqui mesmo no guj!
Qualquer coisa coloca a dificuldade que esta tendo ai

http://www.guj.com.br/java/261150-duvida-ireport-sem-banco-de-dados

Paul_Anderson

Então, não se se isso ajuda, mas se estiver usando o Eclipse na gerar o executável jar, marque a opção ‘Package required libraries into generated’.
Desta forma todas as bibliotecas relacionadas ao projeto serão adcionadas ao jar final.

Lukas0145

Obrigado pelas respostas, mas ainda não resolvi… Baixei o iReport Design e eu não consigo executá-lo! Como posso ligá-lo ao Eclipse? Alguém tem um tutorial mais detalhado para iniciantes de como usar o iReport junto ao Eclipse e como instalá-lo?

yfalbino

voce olhou este link que o snowblacksoul mandou ?

http://www.guj.com.br/java/261150-duvida-ireport-sem-banco-de-dados

de uma olhada nestas video-aulas, acho que vai te ajudar

http://www.youtube.com/playlist?list=PL7A41BE91ECADAB84

espero ter ajudado

Paul_Anderson

Então, não estou familiarizado com o iReport, mas talvez isso ajude.


http://javafree.uol.com.br/artigo/874046/Java-Reporting-com-JasperReports-e-iReport-Open-SourceUsando-Grafico.html

Eu uso o IText e acredito que o processo é o mesmo.

Baixe o jar no site do distribuidor e depois vá em java build path na janela de propriedades do seu projeto. Clique em library e adicione o jar desejado.

Prontinho, já pode fazer os import’s em suas classes.

Caso queira dar uma olhada no IText:
http://www.forumweb.com.br/artigo/223/java/usando-a-api-itext-para-gerar-documentos-pdf-em-java

Boa noite.

Lukas0145

Bah, não tem como ninguém me ajudar sem ter de usar o iReport? Queria usar o iText mesmo…

Lukas0145

Ninguém?

yfalbino

olá, nao sei usar o iText, so sei usar o iReport,

voce viu as video-aulas que eu mandei ?

Paul_Anderson

Leu o tutorial que mandei do iText?

Lá está bem explicadinho.

drsmachado
Lukas0145:
public static void criarPDF(String nomePDF,String diretorio) throws Exception {

		Document doc = null;
		OutputStream os = null;

		try {
			// cria o documento tamanho A4, margens de 2,54cm
			doc = new Document(PageSize.A4, 72, 72, 72, 72);

			// cria a stream de saída
		
			os = new FileOutputStream(diretorio+nomePDF+".pdf"); 
			// associa a stream de saída ao
			PdfWriter.getInstance(doc, os);

			// abre o documento
			doc.open();

			// adiciona o texto ao PDF
			Font f = new Font(FontFamily.COURIER, 20, Font.BOLD);
			Font f2 = new Font(FontFamily.COURIER, 14, Font.BOLD);
			// rescisão
			Paragraph p = new Paragraph("RESCISÃO DE CONTRATO", f);
			p.setAlignment(Element.ALIGN_CENTER);
			p.setSpacingAfter(20);
			doc.add(p);
			Paragraph p1 = new Paragraph("Funcionário:"
					+ JanelaRescisaoComJustaCausa.func.toUpperCase(), f2);
			p1.setAlignment(10);
			doc.add(p1);
} finally {
			if (doc != null) {
				// fechamento do documento
				doc.close();
			}
			if (os != null) {
				// fechamento da stream de saída
				os.close();
			}
		}
A primeira coisa é que você não tem um catch. Ok, eu vi o throws Exception no método. Porém, você está tratando a captura da exceção? Resolva isso e depois podemos prosseguir. Aliás, teste estourando uma exceção de propósito (adicione throw new Exception("Exceção de teste"); em qualquer parte do teu try e veja se a exceção é disparada).
Lukas0145
drsmachado:
Lukas0145:
public static void criarPDF(String nomePDF,String diretorio) throws Exception {

		Document doc = null;
		OutputStream os = null;

		try {
			// cria o documento tamanho A4, margens de 2,54cm
			doc = new Document(PageSize.A4, 72, 72, 72, 72);

			// cria a stream de saída
		
			os = new FileOutputStream(diretorio+nomePDF+".pdf"); 
			// associa a stream de saída ao
			PdfWriter.getInstance(doc, os);

			// abre o documento
			doc.open();

			// adiciona o texto ao PDF
			Font f = new Font(FontFamily.COURIER, 20, Font.BOLD);
			Font f2 = new Font(FontFamily.COURIER, 14, Font.BOLD);
			// rescisão
			Paragraph p = new Paragraph("RESCISÃO DE CONTRATO", f);
			p.setAlignment(Element.ALIGN_CENTER);
			p.setSpacingAfter(20);
			doc.add(p);
			Paragraph p1 = new Paragraph("Funcionário:"
					+ JanelaRescisaoComJustaCausa.func.toUpperCase(), f2);
			p1.setAlignment(10);
			doc.add(p1);
} finally {
			if (doc != null) {
				// fechamento do documento
				doc.close();
			}
			if (os != null) {
				// fechamento da stream de saída
				os.close();
			}
		}
A primeira coisa é que você não tem um catch. Ok, eu vi o throws Exception no método. Porém, você está tratando a captura da exceção? Resolva isso e depois podemos prosseguir. Aliás, teste estourando uma exceção de propósito (adicione throw new Exception("Exceção de teste"); em qualquer parte do teu try e veja se a exceção é disparada).
Obrigado, verei isso logo que chegar em casa!
magalli

Facim de resolver isto lucas na hora que você gera o .jar você não tá colocando
a pasta do Jasper junto de seu .jar, exemplo quando você gera o .jar tem que ter a pasta lib junto certo !?
quando você gera o exe tem que ter a pasta lib junto e a pasta jasper, faz assim cria uma pasta chamada Sistema coloca dentro dela o seu .exe, a pasta lib e a pasta que contém arquivos Jasper e roda =)

drsmachado

magalli:
Facim de resolver isto lucas na hora que você gera o .jar você não tá colocando
a pasta do Jasper junto de seu .jar, exemplo quando você gera o .jar tem que ter a pasta lib junto certo !?
quando você gera o exe tem que ter a pasta lib junto e a pasta jasper, faz assim cria uma pasta chamada Sistema coloca dentro dela o seu .exe, a pasta lib e a pasta que contém arquivos Jasper e roda =)

Não existe arquivo jasper, afinal, ele está usando apenas iText e não iReport.

Paul_Anderson

Abaixo alguns tutoriais para dar uma mãozinha.

http://www.vogella.com/articles/JavaPDF/article.html

http://www.htmlstaff.org/ver.php?id=25089

snowblacksoul

E ae lukas0145 seguinte, procure saber mais sobre o ireport isso vai acrescentar muito em seu curriculum, fica mais fácil com banco de dados imagens, criar graficos!
da forma que esta fazendo é muito trabalhoso e a manutenção disso é muito complicado, vamos falar que seja para uma empresa de médio porte, não poderia gerar um relatorio em pdf dessa forma.
Aqui vai o código espero que vc estude mais sobre ireport
Fiz o código em minha máquina e esta funcionando normal, fiz os testes gerou os pdf como vc queria!
Qualquer coisa posta a dúvida ae! abraços

import java.io.FileOutputStream;
import java.io.OutputStream;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;

public class criaPdf_Unha {

	public String endereco1;
	public String endereco2;

	public static void criarPDF(String nomePDF, String diretorio)
			throws Exception {
		Document doc = null;
		OutputStream os = null;

		try {
			// cria o documento tamanho A4, margens de 2,54cm
			doc = new Document(PageSize.A4, 72, 72, 72, 72);

			// cria a stream de saída

			os = new FileOutputStream(diretorio + nomePDF + ".pdf");
			// associa a stream de saída ao
			PdfWriter.getInstance((com.lowagie.text.Document) doc, os);

			// abre o documento
			doc.open();

			String funcionario;

			funcionario = "Daniel";

			// rescisão
			Paragraph p = new Paragraph("RESCISÃO DE CONTRATO");
			p.setAlignment(Element.ALIGN_CENTER);
			p.setSpacingAfter(20);
			doc.add(p);
			Paragraph p1 = new Paragraph("Funcionário:"
					+ funcionario.toUpperCase());
			p1.setAlignment(10);
			doc.add(p1);

		}catch(Exception e){
			
			System.out.println("Erro : "+e.getLocalizedMessage());
			
		}
		if (doc != null) {
			// fechamento do documento
			doc.close();
		}
		if (os != null) {
			// fechamento da stream de saída
			os.close();
		}
		System.out
				.println("************************************************************");
		System.out
				.println("************************************************************");

	}

	public static void main(String[] args) throws Exception {

		System.out
				.println("************************************************************");

		criaPdf_Unha cp = new criaPdf_Unha();

		String diretorio = "c:/dump/";

		String arquivo = "teste2";

		cp.criarPDF(arquivo, diretorio);

	}

}
drsmachado
snowblacksoul:
E ae lukas0145 seguinte, procure saber mais sobre o ireport isso vai acrescentar muito em seu curriculum, fica mais fácil com banco de dados imagens, criar graficos! da forma que esta fazendo é muito trabalhoso e a manutenção disso é muito complicado, vamos falar que seja para uma empresa de médio porte, não poderia gerar um relatorio em pdf dessa forma. Aqui vai o código espero que vc estude mais sobre ireport Fiz o código em minha máquina e esta funcionando normal, fiz os testes gerou os pdf como vc queria! Qualquer coisa posta a dúvida ae! abraços
import java.io.FileOutputStream;
import java.io.OutputStream;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;

public class criaPdf_Unha {

	public String endereco1;
	public String endereco2;

	public static void criarPDF(String nomePDF, String diretorio)
			throws Exception {
		Document doc = null;
		OutputStream os = null;

		try {
			// cria o documento tamanho A4, margens de 2,54cm
			doc = new Document(PageSize.A4, 72, 72, 72, 72);

			// cria a stream de saída

			os = new FileOutputStream(diretorio + nomePDF + ".pdf");
			// associa a stream de saída ao
			PdfWriter.getInstance((com.lowagie.text.Document) doc, os);

			// abre o documento
			doc.open();

			String funcionario;

			funcionario = "Daniel";

			// rescisão
			Paragraph p = new Paragraph("RESCISÃO DE CONTRATO");
			p.setAlignment(Element.ALIGN_CENTER);
			p.setSpacingAfter(20);
			doc.add(p);
			Paragraph p1 = new Paragraph("Funcionário:"
					+ funcionario.toUpperCase());
			p1.setAlignment(10);
			doc.add(p1);

		}catch(Exception e){
			
			System.out.println("Erro : "+e.getLocalizedMessage());
			
		}
		if (doc != null) {
			// fechamento do documento
			doc.close();
		}
		if (os != null) {
			// fechamento da stream de saída
			os.close();
		}
		System.out
				.println("************************************************************");
		System.out
				.println("************************************************************");

	}

	public static void main(String[] args) throws Exception {

		System.out
				.println("************************************************************");

		criaPdf_Unha cp = new criaPdf_Unha();

		String diretorio = "c:/dump/";

		String arquivo = "teste2";

		cp.criarPDF(arquivo, diretorio);

	}

}
Com iText ele consegue fazer. Caramba, como esse povo tem visão limitada. Acha que qualquer tecnologia é bala de prata e de uso obrigatório. Tentar ajudar o cara com o problema dele ninguém tenta, apenas sugere que ele mude para iReport. Já pensaram se ele não tem esta opção?
snowblacksoul

Caro drsmachado o que o lukas quer é exatamente o que coloquei!
Ele nao quer usar ireport e muito menos iText
Ele quer fazer na unha, se você rodasse o código veria que nao tem nada demais !

O que falei pra ele é simples, ele pode usar o ireport , pode usar o iText! é só procurar , estudar sobre o assunto!
Pra quando precisar destas tecnologia ele saber se virá!
Eu já dei a solução pra ele e espero que ele consiga fazer o que ele quer!!

Lukas0145

Ninguém ainda me entendeu, rsrs… As soluções anteriores são ótimas, porém não são as quais eu procuro. Eu queria algo com o iText e nada de iReport. Eu faço o PDF na mão, daria muito trabalho eu trocar todo programa agora, pois o mesmo está em função do iText. O problema é: Ele gera PDF numa boa se NÃO compilado para .jar e se compilá-lo, ele simplesmente não gera o PDF! Deve ter algum jeito sim de faze-lo gerar PDF quando eu compila-lo.

O que eu faço:

  1. Abro um JOptionPane e peço que o usuário dê um nome ao PDF.
  2. Peço que ele digite também o diretório em que será salvo.
  3. Recolho os dados digitados pelo usuário.
  4. Gero o PDF.

Sim, já tratei a exceção mas não era isso, o erro continuou. Suspeito de ser alguma coisa a ver com a biblioteca na hora de compilar…

public class GerarPDFComJustaCausa{
	// String func, String catg, String causa, String dataAdm, String dataDm,
	// double salario
	public static void criarPDF(String nomePDF,String diretorio) throws Exception {

		Document doc = null;
		OutputStream os = null;

		try {
			// cria o documento tamanho A4, margens de 2,54cm
			doc = new Document(PageSize.A4, 72, 72, 72, 72);

			// cria a stream de saída
		//	os = new FileOutputStream(nomePDF+".pdf");
			os = new FileOutputStream(diretorio+nomePDF+".pdf"); 
			// associa a stream de saída ao
			PdfWriter.getInstance(doc, os);

			// abre o documento
			doc.open();

			// adiciona o texto ao PDF
			Font f = new Font(FontFamily.COURIER, 20, Font.BOLD);
			Font f2 = new Font(FontFamily.COURIER, 14, Font.BOLD);
			// rescisão
			Paragraph p = new Paragraph("RESCISÃO DE CONTRATO", f);
			p.setAlignment(Element.ALIGN_CENTER);
			p.setSpacingAfter(20);
			doc.add(p);
                    } finally {
			if (doc != null) {
				// fechamento do documento
				doc.close();
			}
			if (os != null) {
				// fechamento da stream de saída
				os.close();
			}
		}
	}
}
Lukas0145

Imagem dos Warnings após compilar:


Lukas0145

SOLUÇÃO:

[list]
Botão Direito no src
Export
Runnable JAR file
Extract required libraries into generated JAR
Finish
[/list]

Obs: Obrigado a todos que tentaram me ajudar com dicas e soluções!

Criado 25 de junho de 2013
Ultima resposta 3 de jul. de 2013
Respostas 31
Participantes 8