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
Imprimindo em java
4 Respostas
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.
É 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
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…
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();
}
}