Construir PDF usando o iText

Boa tarde gente, preciso de uma ajuda …

estou usando o iText p construir um relatório clinico em PDF, esse relatorio tera tabelas, gráficos e informações, de acordo com a escolha e a pesquisa do cliente…
o que eu queria fazer eh apenas gerar o arquivo PDF quando o cliente escolher um item em um menu, mais adcionar as informações antes, mesmo sem o cliente escolher essa opção, pois eh melhor pegar as informações diretamente da pesquisa q estou fazendo…

acontece q não estou vendo como pois se eu dou o construtor

PdfWriter.getInstance(document, new FileOutputStream("C:\Relatorio.pdf"));

depois de adcionar os elementos ele dah erro, falando que o “document” eh null e dah erro na hora de abrir o arquivo…

vcs sabem algum outro jeito de eu fazer isso, gostaria de continuar usando o iText se possível

vlw…

vc num prefere usar o IReport para trabalhar com pdf. tem varios tutoriais na net.
E alem do + ele usa o IText internamente.

Fora isso como vc inicializa o document? Ele num deve estar sendo inicializado ou algo assim.

então, eu até li sobre o iReport, mais eu achei q era demais o q eu tava fazendo, acho q o iText dah conta, eu consegui criar o q eu queria, mais eu precisava adequar isso a rotina do meu sistema, e n estou conseguindo…

quanto a iniciação do document eu dou um new document logo no construtor do objeto q fiz p construir o PDF, e de acordo com os teste q eu fiz ele soh funciona se eu dou o construtor do PDFWriter junto, ates de inserir qq coisa, senão ele n aceita…

gente, mais alguma ideia ???

vc chegou a ir no site do IText? Lá tem uns tutoriais para criar o PDF na mão.

http://www.adobepress.com/articles/printerfriendly.asp?p=420686

Um exemplo de Hello Word.

// Descent.java

import java.io.*;

import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

class Descent
{
  static String para = "Hello word";

  public static void main (String [] args) throws Exception
  {
   Document doc = new Document ();
   PdfWriter.getInstance (doc, new FileOutputStream ("descent.pdf"));
   doc.open ();

   Paragraph p = new Paragraph (para);
   p.setAlignment (Element.ALIGN_JUSTIFIED);
   doc.add (p);

   doc.close ();
  }
}

PS.: Se vc quiser trabalhar com graficos, somatórios, contadores com IText puro vai ser um pouco complicado;

jah sim… esse jeito funciona, mais le o meu post… n eh isso q eu estou em dúvida… assim tah dando certo, mais eu n posso fazer desse jeito pq senão toda pesquisa q o cliente fizer vai criar um arquivo, mesmo q ele n queira…

teria alguma outra ferramenta melhor p eu usar ?

Já trabalhei com o iText e digo que só peguei desgosto de tão ruim que ele é, coisa de masoquista…

Como o colega sugeriu, tente o iReport/JasperReports.

Eu uso assim, converto tudo num ficheiro, mesmo que o ficheiro já exista, coloca por cima, deixando só 1.

Espero ter percebido o problema, espero que ajude.

import java.io.InputStream;
import java.io.OutputStream;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.w3c.dom.Document;
import org.w3c.tidy.Tidy;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.lowagie.text.DocumentException;

/**

  • InputStream is = new FileInputStream(ficheiroAuxiliar);
  • OutputStream os = new FileOutputStream(“C:\temp\ficheiro.pdf”);
    */

public class FilePdf {
public static void converter(String input, OutputStream out)throws DocumentException {
convert(new ByteArrayInputStream(input.getBytes()), out);
}

    public static void converter(InputStream input, OutputStream out) throws DocumentException {
           Tidy tidy = new Tidy();
           Document doc = tidy.parseDOM(input, null);
           ITextRenderer renderer = new ITextRenderer();
           renderer.setDocument(doc, null);
           renderer.layout();
           renderer.createPDF(out);
    }

}

obrigada moço, fiz uma coisa parecida com isso e deu certo,não é exatamente como eu queria, mais eh uma gambiarra boa kkkk… pelo menos dah p continuar pelo iText… obrigada de nvo…