Boa noite galera!
to com um problema aki pra impressão, acontece o seguinte, desenvolvi um sistema, e qnd preciso q ele busque as impressoras ele demora muito,e os clientes estão reclamando…, não é questão de maquina, pois o sistema está rodando em uma maquina com 1.7 GHZ e 1,2 MB de RAM, é uma aplicação desktop swing + hibernate, vou postar parte do código:
Utilzo uma classe para gerar um metodo generico para impressão
public class Print {
private Book book = new Book();
private PageFormat pageFormat = new PageFormat();
private Paper paper = new Paper();
private Printer page;
public Print(){
}
public void addPage(Printer page){
this.page = page;
book.append(this.page, pageFormat);
}
public void imprimir(String jobName){
// Setando configuracoes da pagina
paper.setSize(page.getWidth(), page.getHeight());
paper.setImageableArea(page.getX(), page.getY(), page.getWidth(), page.getHeight());
pageFormat.setPaper(paper);
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(OrientationRequested.PORTRAIT);
aset.add(new Copies(1));
aset.add(new JobName(jobName, null));
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(page);
pj.setPageable(book);
PrintService[] services = PrinterJob.lookupPrintServices();
if (services.length > 0) {
try {
pj.setPrintService(services[0]);
//pj.pageDialog(aset);
if (pj.printDialog(aset)) {
pj.print(aset);
}
} catch (PrinterException pe) {
System.err.println(pe);
}
}
}
}
Utilizo uma interface para abstrção
public interface Printer extends Printable {
public static double fatorConverMMPt = 2.834646D;
public double getWidth();
public double getHeight();
public double getX();
public double getY();
}
Para imprimir eu desenvolvi uma classe que implementa a interface Printer
utilizando o metodo:
public synchronized int print(Graphics g, PageFormat pf, int pageIndex){
}
Utilizo está Thread para imprimir:
Thread imprimir = new Thread(new Runnable(){
public void run(){
Collection<Extrato> e = new ArrayList<Extrato>();
// Criando colecao de dados
for(int i=0;i<rows;i++){
String numCheque = String.valueOf((Long)tableCheques.getValueAt(i, 1));
String dataEmissao = (String)tableCheques.getValueAt(i, 0);
Float valorUtilizado = Formatter.formataValor((String)tableCheques.getValueAt(i, 3));
String lote = (String)tableCheques.getValueAt(i, 5);
String convenio = (String)tableCheques.getValueAt(i, 2);
e.add(new Extrato(numCheque,dataEmissao,valorUtilizado,lote,convenio));
}
Print print = new Print();
print.addPage(new PrintExtrato(titular.getMatricula(),competencia.getText(),e));
print.imprimir("ExtratoIndividual");
defaultCursor();
}
});
waitCursor();
imprimir.start();
às vezes pra imprimir um extrato de uma 1 página apenas, demora quase 2 minutos para aparecer a caixa de dialogo da impressora, o q poderia ser? será q existe alguma solução?
Além disso os meus relatorio feitos com o jasper também demoram um pouco para serem gerados, eu utilizo os arquivos .jasper já compilados, e também qnd pede pra imprimir o relatorio demora muito pra encontrar as impressoras… seria um problema de máquina? valeu pela atenção.