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.
[code] 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");
}
}
}); [/code]
E aqui está o panel a ser impresso:
[code] 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;
}
}
} [/code]
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.
É, 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.
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. =/
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?!
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: