Impressao em JAVA - USB

3 respostas
V
Alguem ai ja encontrou problemas para fazer impressao de relatorio para impressoras conectadas localmente ou pela rede via USB. Uso o jasperReport para gerar um pdf do relatorio a ser impresso. Atravez deste arquivo pdf eu tento fazer a impressao usando o codigo:
public Imprime(String nomeArquivo, String pMode,String Impressora) {

        try {
                     
            File arquivo = new File(nomeArquivo);
            String retorno = "";
            StringBuffer sb = new StringBuffer();
           
            FileReader reader = new FileReader(arquivo);
            int c;
                do
                  {
                   c = reader.read ();
                   if(c!=-1)
                     {
                      sb.append( (char)c );
                     }
                  }
                while (c != -1); reader.close();
            retorno =  sb.toString();
           
            InputStream is = new ByteArrayInputStream(retorno.getBytes());  

            DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

            if (pMode != null && pMode.equalsIgnoreCase("TXT"))
              ;           
            else if (pMode != null && pMode.equalsIgnoreCase("PS"))
                flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT ;
            else if (pMode != null && pMode.equalsIgnoreCase("PDF"))
                flavor = DocFlavor.INPUT_STREAM.PDF;
            else if (pMode != null && pMode.equalsIgnoreCase("JPG"))
                flavor = DocFlavor.INPUT_STREAM.JPEG;
            else if (pMode != null && pMode.equalsIgnoreCase("GIF"))
                flavor = DocFlavor.INPUT_STREAM.GIF;
            else if (pMode != null && pMode.equalsIgnoreCase("PNG"))
                flavor = DocFlavor.INPUT_STREAM.PNG;
            else if (pMode != null && pMode.equalsIgnoreCase("PCL"))
                flavor = DocFlavor.INPUT_STREAM.PCL ;
            else if (pMode != null && pMode.equalsIgnoreCase("RAW"))
                flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;                  
               
            PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);          
                       
            PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
       
            for(int k = 0;k< services.length;k++){
                                                            if(services[k].getName().trim().toUpperCase().equalsIgnoreCase(Impressora.trim().toUpperCase())){                 
                  Doc doc1 = new SimpleDoc(is, flavor, null);
                  DocPrintJob printJob = services[k].createPrintJob();                         
                  printJob.print(doc1, (PrintRequestAttributeSet)aset);
                  break;
                }
            }
           
            is.close();
            arquivo.delete();
        } catch (IOException e) {
            gravaLogErro(e.getMessage());
            e.printStackTrace();
        } catch (Exception e) {
            gravaLogErro(e.getMessage());
            e.printStackTrace();
        } finally {
            try {
                synchronized (Impressora.this) {
                    PrintJobDone = true;
                    Impressora.this.notify();
                }
            } catch (Exception e) {
                gravaLogErro(e.getMessage());
                e.printStackTrace();
            }
        }
    }
Ele cria o servico de impressao tudo normalzinho.. mas as vezes da erro no gerenciador de impressao do windows e as vezes so aparece Imprimindo... e nao imprime nada....

Alguem ai pode ajudar???

Desde ja agradeco..

3 Respostas

T

O arquivo que está sendo impresso é texto (.txt) ou qualquer outra coisa?
Se for qualquer outra coisa (como um PDF) o seu código está corrompendo os dados. Não use FileReader, mas FileInputStream, e não fique pondo as coisas em strings quando não é necessário.

V

A minha intencao é imprimir o arquivo PDF.
Mas fiz testes com aquivo .txt tambem, e da erro… Mudei conforme vc sugestionou. Mas continuou o problema.

Sera que nao tem nada a ver com o fato de a impressora ser USB e estar na rede.
Pois tenho outras impressoras na rede. essas matriciais LPT1 e funcionam perfeitamente quando eu envio arquivos .txt.

S

Desculpa ressuscitar o tópico mas gostaria de saber se vc consegui imprimir na impressora 2844? Obrigado!

Criado 15 de maio de 2007
Ultima resposta 5 de jul. de 2011
Respostas 3
Participantes 3