Imprimindo em java

4 respostas
R

Ola estou tendo um problema que esta me dando dor de cabeça, literalmente, tenho um sistema que faz vendas tanto a vista quanto a prazo, porém preciso imprimir os comprovantes para o cliente. Fiz vários códigos diferentes e testei em duas impressoras diferentes, uma multifuncional da samsung e outra simples da HP, na samsung quando mando imprimir a impressão aparece por 1 ou 2 segundos e some sem imprimir nada, na HP a impressão vai para a fila e la fica até que eu cancele, em nenhum caso a impressão sai, nada é impresso, pensei em fazer como IReport mais não sei exatamente como configurar para ficar com a aparência de um pedido ou um recibo. Por Favor preciso muito de uma luz, e saber porque motivo essa impressão não sai, e além disso o código que fiz busca a impressora padrão mais eu queria deixar pré programada a impressora para que cada função seja impressa em uma sem precisar escolher e sem precisar necessariamente ser impresso na padrão, valew desde já, muito obrigado

4 Respostas

gpd38

Não conheço um modo de enviar para impressora em java, mas já vi alguns sistemas fazendo da seguinte forma.

[list]Sistema possui a página html com o que precisa imprimir[/list]
[list]É gerado um PDF por exemplo com o WKHTMLTOPDF da página aberta.[/list]
[list]O usuário agora pode imprimir um pdf que hoje, qualquer impressora reconhece.[/list]

Não sei se ajuda, mas é uma solução plausivel.

R

É que ajuda ajuda, toda ajuda é bem vinda, na verdade estou quebrando o galho com o iReport, mais para imprimir um cupom não fiscal a melhor forma é enviar um SimpleDoc, o que seria mais rapido

public String NovaImpressao(String texto){   
  
PrintService [] printService = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.AUTOSENSE, null);   
PrintService impressoraPadaro = PrintServiceLookup.lookupDefaultPrintService();   
DocFlavor docFlavor = DocFlavor.INPUT_STREAM.AUTOSENSE;   
HashDocAttributeSet atributosDocumento = new HashDocAttributeSet();   
  
try {   
FileInputStream fileInputStream = new FileInputStream("C:\\Orange Sistema\\Gerencia\\Venda.rtf");   
Doc documento = new SimpleDoc(fileInputStream, docFlavor, atributosDocumento);   
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();   
PrintService servicoImpressao = ServiceUI.printDialog(null, 300, 400, printService, impressoraPadaro, docFlavor, printRequestAttributeSet);   
  
if(printService != null){   
DocPrintJob docPrintJob = servicoImpressao.createPrintJob();   
  
try {   
docPrintJob.print(documento, printRequestAttributeSet);   
  
} catch (PrintException e) {   
// TODO Auto-generated catch block   
e.printStackTrace();   
}   
  
}   
  
} catch (FileNotFoundException e1) {   
// TODO Auto-generated catch block   
JOptionPane.showMessageDialog(null, e1);   
}   
  
InputStream prin = new ByteArrayInputStream(texto.getBytes());   
SimpleDoc impressao = new SimpleDoc(prin, docFlavor, atributosDocumento);   
  
  
  
  
return "Impressão";   
}

esse é o código que estou tentando usar ele vai para a impressora mais não imprime some da impressora e nunca mais, se alguém puder me dar uma luz agradeço

CWeiler

Seu código está com lixos, por exemplo as linhas 32 e 33, primeiro precisa limpar este código e deixar somente com o necessário.
Não acho que seja o erro mas está faltando a finalização do fileInputStream.

Tente começar com o básico a partir deste blog http://examples.javacodegeeks.com/desktop-java/print/use-printing-service-in-java/
e depois inclua os dialogos e etc…

H

segue um exemplo do printJob, ele deve te ajudar

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.PrintJob;
import java.awt.Toolkit;
import java.util.Properties;

import javax.swing.JFrame;

public class PrintSampleApp extends JFrame {
  MyCanvas canvas = new MyCanvas();

  public static void main(String args[]) {
    PrintSampleApp app = new PrintSampleApp();
  }

  public PrintSampleApp() {
    add("Center", canvas);
    setSize(500, 500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
    String name = "Test print job";
    Properties properties = new Properties();
    PrintJob pj = Toolkit.getDefaultToolkit().getPrintJob(PrintSampleApp.this, name, properties);
    if (pj != null) {
      canvas.printAll(pj.getGraphics());
      pj.end();
    }
  }
}

class MyCanvas extends Canvas {
  public void paint(Graphics g) {
    Dimension size = getSize();
    int width = size.width;
    int height = size.height;
    int x1 = (int) (width * 0.1);
    int x2 = (int) (width * 0.9);
    int y1 = (int) (height * 0.1);
    int y2 = (int) (height * 0.9);
    g.drawRect(x1, y1, x2 - x1, y2 - y1);
    g.drawOval(x1, y1, x2 - x1, y2 - y1);
    g.drawLine(x1, y1, x2, y2);
    g.drawLine(x2, y1, x1, y2);
    String text = "Print Me! ";
    text += text;
    text += text;
    g.drawString(text, x1, (int) ((y1 + y2) / 2));
    g.dispose();
  }
}
Criado 3 de agosto de 2014
Ultima resposta 11 de ago. de 2014
Respostas 4
Participantes 4