Problemas com impressão

3 respostas
A

Estou com um problema na linha 20. O getGraphics não está retornando nada e dá um erro NullPointerException.
Estava tentando usar uma impressora na rede.
Alguém pode me dizer o pq do erro?

import java.awt.*;
import java.awt.Graphics.*;
import java.io.*;

public class ImprimirArquivo {
  public static void main(String a[]) throws IOException{
    // frame temporário
    Frame f = new Frame("Teste de Impressão");
    f.pack();

    // obtenção do Toolkit
    Toolkit tk = f.getToolkit();

    // inicio de sessão de impressão
    PrintJob pj = tk.getPrintJob(f, "print1", null);
        
    // impressão
    if (pj!=null) { // testa de PrintJob válido
      
      [b]Graphics g = pj.getGraphics();[/b] // obtém contexto gráfico

      g.drawString("Teste de Impressão", 10, 10);
      int y=25;
	BufferedReader in = new BufferedReader(new FileReader(a[0]));
	//taOutput.setText("");
	String line;
	//StringBuffer buffer = new StringBuffer();
	while((line = in.readLine()) != null)
		{g.drawString(line, 25, y);
		y+=25;}
	in.close();
      g.drawLine(25, 250, 325, 250);
      g.fillOval(150, 225, 50, 50);
      // liberação dos recursos
      g.dispose(); // libera recursos do contexto gráfico
      pj.end();    // encerra impressão
    }

    // liberação do Frame temporário
    f.dispose();
    // fim
    System.exit(0);
  }
}

3 Respostas

L
Agora vai mano
import java.awt.print.*;
import java.awt.*;
import javax.swing.*;

public class ImpressaoGenerica implements Printable{
	
	private String[] linhas;
	private String cabecalho, rodape;
	private int cont_linhas, folha;
	
	public ImpressaoGenerica( ){
		
		this.folha = 1;
		this.cabecalho = "TESTE";
		this.rodape = "TESTANDO";
		
	}
	
	public int print(Graphics g, PageFormat pf, int pageIndex){
		
		try{
			
			g.setFont(new Font("Arial",Font.BOLD, 18));
			g.drawString(cabecalho, 60, 75);
			
			g.setFont(new Font("Courier",Font.PLAIN, 10));
			
				
			g.drawString( "Teste" , 20, 140 );
			
			g.setFont(new Font("Arial",Font.PLAIN, 10));
			g.drawString( rodape, 79,  660 );
		}
		catch( Exception e ){
		
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Exception3: " + e.toString());
		}
		
		return Printable.PAGE_EXISTS; 
	}
	
	
	public static void main(String args[]){
		try{
			
			PrinterJob job = PrinterJob.getPrinterJob(); 
			PageFormat landscape = job.defaultPage(); 
			
			Paper paper = new Paper();
	
			paper.setImageableArea(0, 0, 600, 900);
			paper.setSize(600, 900);
	
			landscape.setPaper( paper );
			
			Book bk = new Book();
			
			bk.append( new ImpressaoGenerica(  ), landscape );
			
			job.setPageable(bk); 
			
			if (job.printDialog()) { 
			
				try {
				
					job.print();
				} 
				catch(Exception exc){
					
					exc.printStackTrace();
					JOptionPane.showMessageDialog(null, "Exception1: " + exc.toString());
				} 
			}
		}
		catch( Exception e ){
			
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Exception2: " + e.toString());
		}
	}
}
F

Agora uma dúvida de iniciante: eu usei esse seu exemplo pra imprimir um relatório de nomes de clientes…dai eu criei um while com drawstrings dentro pra ir imprimindo o nome deles(q tão armazenados num ResultSet)…como eu faço pra continuar imprimindo numa nova página?
Eu sei q em uma página cabem uns 60 clientes…
Eu estou passando os parâmetros de forma errada? Qual o jeito certo? Tem como dar um exemplo?
Valeu…

A

Outra dúvida d iniciante…

Vc diz usar impressora em rede… como se usa uma impressora em rede em java? Ou alguma outra maneira (eu preciso muito disso)

Criado 12 de fevereiro de 2004
Ultima resposta 5 de abr. de 2005
Respostas 3
Participantes 4