Problema ao imprimir dados em java!

[b]Awe pessoal meu problema é o seguinte! eu tenhu uma tela de orçamento e eu gostaria de imprimir o orcamento.

Chamar a impressora ele ta chamando, eu instalei o CUTE pdf, que emula uma impressora gereando um pdf pra mim.
Entao quando abro o pdf ele ta vazio! Por favor que poder me ajudar agradeço muito mesmo.[/b]

[code]
int tamanhoLista = jList1.getModel().getSize();
ArrayList listaPalavras = new ArrayList();
for (int i=0; i < tamanhoLista; i++){
listaPalavras.add(jList1.getModel().getElementAt(i));
}

        String Total=jTextFieldTotal.getText();
        String texto=("'================================================'"+"\n\r" +
                       " Loja Informatica - CNPJ: XX.XXX.XXX/XXXX-XX" +"\n\r" +
                      "================================================"+"\n\r" +
                      listaPalavras +  "\n\n" + 
                      "Valor Total : " + Total +
                      "\n"+
                      "\f");
        
        textoimp += texto;
        INPUT_STREAM docFlavor;
        SimpleDoc documentoTexto;
        PrintService impressora;
        // /n/r para novas linhas e /f para fim da pagina
        try{
            ByteArrayInputStream prin = new ByteArrayInputStream(textoimp.getBytes());
            docFlavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
            documentoTexto = new SimpleDoc(prin, docFlavor, null);
            impressora = PrintServiceLookup.lookupDefaultPrintService(); // pega a impressora padrao
            PrintRequestAttributeSet printerAttributes = new HashPrintRequestAttributeSet();
            printerAttributes.add(new JobName("Orcamento", null));// nome da impressao
            printerAttributes.add(MediaSizeName.ISO_A4); // informa o tipo de folha
            DocPrintJob printJob = impressora.createPrintJob();
        try{
            printJob.print(documentoTexto, (PrintRequestAttributeSet)printerAttributes); //tenta imprimir
        }
        catch(PrintException e){
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a impressão!", "Erro", JOptionPane.ERROR_MESSAGE);
        }
             prin.close();
        }
        catch(Exception e){
        }
        [/code]

Só chutando…

Por acaso você não tem que chamar um printJob.flush() depois do printJob.print() para garantir que os dados saiam do buffer para a impressora?

[quote=PauloVitorB][b]Awe pessoal meu problema é o seguinte! eu tenhu uma tela de orçamento e eu gostaria de imprimir o orcamento.

Chamar a impressora ele ta chamando, eu instalei o CUTE pdf, que emula uma impressora gereando um pdf pra mim.
Entao quando abro o pdf ele ta vazio! Por favor que poder me ajudar agradeço muito mesmo.[/b]

[code]
int tamanhoLista = jList1.getModel().getSize();
ArrayList listaPalavras = new ArrayList();
for (int i=0; i < tamanhoLista; i++){
listaPalavras.add(jList1.getModel().getElementAt(i));
}

        String Total=jTextFieldTotal.getText();
        String texto=("'================================================'"+"\n\r" +
                       " Loja Informatica - CNPJ: XX.XXX.XXX/XXXX-XX" +"\n\r" +
                      "================================================"+"\n\r" +
                      listaPalavras +  "\n\n" + 
                      "Valor Total : " + Total +
                      "\n"+
                      "\f");
        
        textoimp += texto;
        INPUT_STREAM docFlavor;
        SimpleDoc documentoTexto;
        PrintService impressora;
        // /n/r para novas linhas e /f para fim da pagina
        try{
            ByteArrayInputStream prin = new ByteArrayInputStream(textoimp.getBytes());
            docFlavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
            documentoTexto = new SimpleDoc(prin, docFlavor, null);
            impressora = PrintServiceLookup.lookupDefaultPrintService(); // pega a impressora padrao
            PrintRequestAttributeSet printerAttributes = new HashPrintRequestAttributeSet();
            printerAttributes.add(new JobName("Orcamento", null));// nome da impressao
            printerAttributes.add(MediaSizeName.ISO_A4); // informa o tipo de folha
            DocPrintJob printJob = impressora.createPrintJob();
        try{
            printJob.print(documentoTexto, (PrintRequestAttributeSet)printerAttributes); //tenta imprimir
        }
        catch(PrintException e){
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a impressão!", "Erro", JOptionPane.ERROR_MESSAGE);
        }
             prin.close();
        }
        catch(Exception e){
        }
        [/code][/quote]

Colega, se você quer criar PDFs, usa o iText. Ele é super simples, é bem intuitivo.

http://www.lowagie.com/iText/

Mas se você quiser imprimir em “papel”, já não posso lhe ajudar.

Boa sorte com seu projeto.

Bom… se for pra um trabalho profissional como relatórios contendo subrelatórios em cima de uma base de dados, então o mais profissional, sério e eficiente é o seguinte:

Jasper Reports(gera relatórios em documentos PDF, DOC e outros dinamicamente de acordo com os dados da base) e iReport (ferramenta para diagramação visual do relatório em Jasper).

Ferramentas poderosas!

:wink:

[quote=alexcostars]Colega, se você quer criar PDFs, usa o iText. Ele é super simples, é bem intuitivo.

http://www.lowagie.com/iText/

Mas se você quiser imprimir em “papel”, já não posso lhe ajudar.

Boa sorte com seu projeto.[/quote]

Fox,

Desculpa mas eu não entendi o que seria o printjob.flush:
tentei colocar mas no netbeans nao tem essa propriedade em printjob.
se poder me ajudar agradeço!

Alguns métodos de saída escrevem em um buffer, só enviando os dados para o documento ou para a impressora quando é realizado um flush() (descarga) dos dados.

Normalmente os programadores não se preocupam muito com isso porque quando você dá um close() em um stream (fluxo de dados), por exemplo, o próprio close() (que fecha o stream) invoca o flush().

É preciso estudar o printjob e compreender o que falta no processo, vc falou em NetBeans, mas programando visualmente sem conhecer os conceitos é complicado usar a linguagem corretamente, e mais difícil ainda conseguir eficiência no software…

Esse era um engano muito cometido em Delphi, por exemplo, o programador inexperiente arrasta os botões, clica duas vezes nele, adiciona alguma ação, e nem se preocupa (ou nem sabe) com arquitetura, padrões de desenvolvimento, orientação a objetos, acoplamento e outras coisas fundamentais…

Programação orientada a componentes (arrastar botãozinho) não tem nada a ver com paradigma de desenvolvimento (orientação a objetos), e dominar uma linguagem é muito mais do que compôr janelinhas visualmente e colocar ações nos botões. Isso é só a interface, a “casquinha” do sistema, a parte mais superficial de um padrão model-view-controller, por exemplo!

É preciso conhecimento técnico detalhado da linguagem, mas mais do que isso noções das regras de negócio, compreender do que os dados se tratam, como são armazenados no banco de dados (relacionamentos), etc, etc…

Comumente (e infelizmente) no mercado a gente vê pessoas sem as noções mais básicas (como a lógica), ou programando Java proceduralmente… enfim…

Não estou dizendo que é o seu caso, isso foi apenas uma digressão de esclarecimento, hehehe, não custa bater em algumas teclas…

Pessoalmente eu não uso o printjob, desconheço os detalhes técnicos… nossa área tem muita coisa que a gente precisa correr atrás mesmo!

Então… como diz a galera… “se vira nos 30”! Hahaha

Não me leva a mal, mas algumas tecnologias a gente aprende de maneira muito mais detalhada “batendo cabeça”, e os conhecimentos adquiridos ficam melhor consolidados…

Enfim… boa sorte!

:wink:

[quote=PauloVitorB]Fox,

Desculpa mas eu não entendi o que seria o printjob.flush:
tentei colocar mas no netbeans nao tem essa propriedade em printjob.
se poder me ajudar agradeço!
[/quote]

Isso eh verdade, eu tenhu sim o eclipse, mas o meu curso usa o netbeans entao paciencia tem que ser em netbeans.
Mas semana q vem eu vou fazer um aprefeiçoamento em java eclipse, fica tranquilo. tempo ao tempo.
Quero soh ver agora q eu to acomodado com o netbeans!

Rs, tem um amigo meu que diz que o melhor software é o que a gente sabe usar ou se sente mais confortável usando.

O NetBeans não é problema, desde que se conheça o Java independente da IDE!

Mas boa sorte na sua empreitada, o começo é meio difícil, parece muita coisa ao mesmo tempo, que nem dirigir.

Mas depois que vc evoluir mais um pouco vai ver que fica até automático, e cada vez mais fácil!

:wink:

[quote=PauloVitorB]Isso eh verdade, eu tenhu sim o eclipse, mas o meu curso usa o netbeans entao paciencia tem que ser em netbeans.
Mas semana q vem eu vou fazer um aprefeiçoamento em java eclipse, fica tranquilo. tempo ao tempo.
Quero soh ver agora q eu to acomodado com o netbeans![/quote]

[b]Eu dei uma olhada sim no que voce me falou do flush.
Mas no meu caso nao eh usado, seria usado somente se tivesse usando o
“BufferedWrite” mas nesse caso eu nao utilizei!

Pra ser sincero eu ja fiz ele imprimir mas o codigo real ta no PC do curso, se ate terça eu nao conseguir eu posto o codigo q funciona aki! blz.[/b]

Eh eu fiz jah 6 meses de java mas nao aprendi nada relacionado a imprimir arquivo.
e agora vou fazer mais 4 de java e progress.

Beleuza, e eu posso ajudar a ver o que faltou com riqueza de detalhes, rs.

Mas qualquer dúvida continue postando que eu ajudo, só não pode querer as respostas prontas que assim não se aprende!

:wink:

Qualquer coisa me manda uma mensagem privada que eu te mando meu e-mail pra facilitar a comunicação.

[quote=PauloVitorB][b]Eu dei uma olhada sim no que voce me falou do flush.
Mas no meu caso nao eh usado, seria usado somente se tivesse usando o
“BufferedWrite” mas nesse caso eu nao utilizei!

Pra ser sincero eu ja fiz ele imprimir mas o codigo real ta no PC do curso, se ate terça eu nao conseguir eu posto o codigo q funciona aki! blz.[/b]

Eh eu fiz jah 6 meses de java mas nao aprendi nada relacionado a imprimir arquivo.
e agora vou fazer mais 4 de java e progress.[/quote]