Imprimir em Java sem mostrar dialogo

Como realizo a impressão sem mostrar o dialogo e gostaria também dentro de uma Combobox selecionar a impressora e imprimir em cima dela?

public void printComponenet(JComponent component){
	PrinterJob pj = PrinterJob.getPrinterJob();
	pj.setJobName("Personalizacao");
	pj.setPrintable (new Printable() {
		@Override
		public int print(Graphics graphics, PageFormat pageFormat,
		    int pageIndex) throws PrinterException {
		    if (pageIndex > 0){
		    	return Printable.NO_SUCH_PAGE;
		    }
		    Graphics2D g2 = (Graphics2D) graphics;
		    g2.translate(pageFormat.getImageableX(),pageFormat.getImageableY());
 		    component.paint(g2);        // o JPanel aqui
		    return Printable.PAGE_EXISTS;
		   // TODO Auto-generated method stub			
		}   		
	});
	if (pj.printDialog() == false)
		return;
	try {
		pj.print();
	} catch (PrinterException ex) {
		// handle exception
	}
}
1 curtida

Para não exibir o diálogo, você precisa remover as linhas abaixo:

if (pj.printDialog() == false) // remova essa
  return;  // e essa

// resto do código segue normal
try {
  pj.print();
....

Para colocar as impressoras no Combo, você pode pegá-las do sistema: https://stackoverflow.com/questions/410967/how-do-i-get-a-list-of-installed-printers

E setá-las no PrintJob com algo mais ou menos assim: https://stackoverflow.com/questions/4177531/force-target-printer-in-java

Abraço.

Olá Senhores bom dia, este código serve para impressão de PDF´s? estou com um problema não consigo fazer a impressão direta de arquivos pdf´s para a impressora, postei aqui hoje uma pergunta sobre isto poderiam dar uma força nesta questão?

Obrigado Robson

Funcionou corretamente,

porém a formatação ficou errada da pagina, parece que ele deixou uma margem de 5 cm para todos os lados, será que tem como tirar essas margens?

Segue arquivo como ficou

Personalizacao.pdf (8,6 KB)

Consegui arrumando meu código conforme esse link:

http://www.java2s.com/Code/JavaAPI/java.awt.print/PageFormatsetPaperPaperpaper.htm