Problema ao imprimir com PrinterJob

0 respostas
N

Estou tendo 2 problemas ao utilizar o PrinterJob.
1º, Quando eu mando imprimir demora uma eternidade para a impressora começar a imprimir
2º, Não esta formatando corretamente, Exemplo, Se eu mando imprimir em uma impressora virtual para gerar um PDF, ele não demora pra gerar, e fica perfeito, mas quando eu mando imprimir em minha impressora jato de tinta, alem de demorar muito para iniciar a impressão, quando imprime ele não aplica as magens e corta 1/4 do lado direito do JPanel que esta sendo impresso, o mesmo não acontece com a impressora virtual.

segue abaixo meu código do PrinterJob (PS. o código foi pego de varios lugares na net e só adaptado as minhas necessidades.)

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

public class Imprimir implements Printable {

    private PageFormat pageFormat;
    private Paper paper;
    private PrinterJob printerJob;
    private Component comp;
    boolean scaleWidthToFit = true;

    public Imprimir(Component comp, double width, double height, double Marge) {
        pageFormat = new PageFormat();
        paper = new Paper();
        paper.setSize(width, height);
        paper.setImageableArea(Marge, 1, width - ((Marge + 7) * 2), height);

        pageFormat.setOrientation(PageFormat.PORTRAIT);
        pageFormat.setPaper(paper);

        printerJob = PrinterJob.getPrinterJob();
        this.comp = comp;
        printDialog();
    }

    private void printDialog() {
        if (printerJob.printDialog()) {
            printerJob.setPrintable(this, pageFormat);
            try {
                printerJob.print();
            } catch (PrinterException e) {
                System.out.println("MSG: ");
            }
        }
    }

    @Override
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {

        Graphics2D graphics2D;

        graphics2D = (Graphics2D) graphics;

        /* As coordenadas (0, 0) costumam ficar fora da área de impressão, 
         * portanto traduzimos as coordenadas (X, Y) de acordo com o PageFormat 
         */
        graphics2D.translate(paper.getImageableX(), paper.getImageableY());

        // Carrega a largura e a altura da página com base no PageFormat  
        double pageWidth = paper.getImageableWidth();
        double pageHeight = paper.getImageableHeight();

        // Carrega a largura e a altura do componente a ser impresso  
        double compWidth = (double) comp.getWidth();
        double compHeight = (double) comp.getHeight();


        /* Redimensiona o graphics se a largura do componente for 
         * maior que a largura da página  
         */
        if (compWidth >= pageWidth) {
            double scale = pageWidth / compWidth;
            graphics2D.scale(scale, scale);
            compHeight *= scale;
        }

        /* Redimensiona o graphics se a altura do componente for 
         * maior que a altura da página  
         */
        if (compHeight >= pageHeight) {
            double scale = pageHeight / compHeight;
            graphics2D.scale(scale, scale);
        }

        if (pageIndex > 0) {
            return Printable.NO_SUCH_PAGE;
        }

        graphics2D.translate(graphics2D.getClipBounds().getX(), graphics2D.getClipBounds().getY());

        comp.paint(graphics2D);
        return Printable.PAGE_EXISTS;
    }
}
Como eu chamo ele
JFrame f = new JFrame();
        DuplicataPDF Dpdf = new DuplicataPDF();
              
        Dpdf.setPanelSize(632,484);
        Dpdf.setBackground(Color.white);
        
        f.setSize(Dpdf.getPanelPx(), Dpdf.getPanelPy());
               
        f.getContentPane().add(Dpdf);        

        f.setVisible(true);
        Dpdf.setVisible(true);
        
        Imprimir printer = new Imprimir(Dpdf, 632, 484, 40);
Criado 15 de outubro de 2013
Respostas 0
Participantes 1