Impressão

7 respostas
LuizLG

Meu problema é o seguinte: Preciso ler valores armazenados em um arquivo e depois imprimir. A impressão será realizada em um cartão e não estou conseguindo imprimir no início, sempre começa um pouco antes em x e y, cortando uma parte do texto ou imagem.

Aqui está o codigo do menu que realiza a impressão.

printSequencialMenuItem.addActionListener(new ActionListener(){
	public void actionPerformed(ActionEvent event){		

		printe printee = new printe();
		printee.setLayoutPath(layoutEditorPanel.getLoadedLayoutPath());

		double CM = 28.346456692913385D;
		double cardWidth = 5.398 * CM;
		double cardHeight = 8.56 * CM;	
			
		Book book = new Book();
		Paper papel = new Paper();
		PageFormat pageFormat = new PageFormat();
		papel.setSize(cardWidth, cardHeight);
		papel.setImageableArea(0.0, 0.0, cardWidth, cardHeight);		

		pageFormat.setPaper(papel);
		pageFormat.setOrientation(PageFormat.LANDSCAPE);
			
		PrinterJob job = PrinterJob.getPrinterJob();
		book.append(printee, pageFormat);
		job.setPageable(book);
		try{
			job.print();
		}
		catch(PrinterException e){
			System.out.println("Erro na impressão");
		}
	}
});

E aqui está o panel a ser impresso:

class printe extends JPanel implements Printable{

	public void setLayoutPath(String path){
		layoutPath = path;
	}
	
	public int print(Graphics graphics, PageFormat format, int pageIndex)
	throws PrinterException{
		if(pageIndex>1){
			return Printable.NO_SUCH_PAGE;
		}
		else{
			try{
	
			/* LEITURA DO ARQUIVO
				.....
					.....
						.....*/
				
				Graphics2D g2d = (Graphics2D) graphics;
				g2d.translate(format.getImageableX(), format.getImageableY());

				g2d.setFont(new Font("Times", Font.PLAIN, 12));
				g2d.setColor(Color.BLUE);

				g2d.drawString("teste", 0, 0);
								
			}
			catch(IOException la){
				System.out.println("Erro");
			}
			return Printable.PAGE_EXISTS;
		}
	}
	
}

No exemplo está a impressão apenas da mensagem "teste" mas precisarei imprimir imagem e texto.
Quando utilizo drawString passando 0, 0 o "teste" não é impresso. Agora se eu passar algo em torno de 35, 9 ele imprimi no começo.

Alguma idéia?

7 Respostas

LuizLG

Opa, pelo menos uma resposta! rs

É, ficou meio complicado isso. Mas me virei por aqui, utilizei outra parte do programa em que é possível alterar o layout do cartão e estou mandando imprimir de lá mesmo.

=)

LuizLG

Se a impressão já tiver sido enviada para o spool da impressora há alguma maneira de cancelar? Pelo que eu li, o método cancel() só funciona antes do retorno do método print. =/

cassio

Fala ai LG! Beleza?!

Isso aqui ajuda um pouco

http://java.sun.com/j2se/1.4.2/docs/guide/jps/spec/JPSTOC.fm.html

E sobre o cancel(), acho que o método print() só retorna quando recebe um sinal da impressora dizendo que a impressão foi concluída, afinal de contas não faria sentido algum cancelar uma impressão antes de mandá-la para a impressora, ou cancelar um documento já impresso. Como print() é um método de PrinterJob, como é possível terminar a impressão sem que exista um job de impressão válido ainda alocado para a impressora, mesmo que através de um objeto Java remoto?!
Bom, pra confirmar isso só testanto. Você já realizou algum destes testes?!

Abraço pra vc e pro pessoal ai!

LuizLG

Opa, falae Cassio!
Tudo tranquilo, e aí??

A parte da impressão está pronta, o programa está rodando legal nos testes, a única coisa que não estou conseguindo fazer é cancelar a impressão.

Já testei colocando o cancel em vários lugares, até mesmo logo após a chamada do print mas não cancela. =/

cassio

LuizLG:
Opa, falae Cassio!
Tudo tranquilo, e aí??

A parte da impressão está pronta, o programa está rodando legal nos testes, a única coisa que não estou conseguindo fazer é cancelar a impressão.

Já testei colocando o cancel em vários lugares, até mesmo logo após a chamada do print mas não cancela. =/

Cara, tinha esquecido de um detalhe! Para vc poder cancelar um job de impressão em Java, ele precisa implementar a interface CancelablePrintJob

Achei este exemplo aqui, acho que ajuda! Abraço! epois quero ver meu “filhote” pronto e funcionando!

http://jug.org.ua/wiki/display/JavaAlmanac/Cancelling+a+Print+Job

Abraço!

Luiz_Rocha

Saudações.

Não, infelizmente eu não sei como responder à sua dúvida. Mas aceite a minha dica: poste seu problema no tópico “Java Avançado”, acho que obterá mais sucesso.

Boa sorte, e perdoe a expectativa não realizada. :lol:

Luiz_Rocha

Opa, se é assim tá maravilha, então.

Criado 19 de dezembro de 2006
Ultima resposta 22 de dez. de 2006
Respostas 7
Participantes 3