Imprimir com Java

Olá pessoal!
Eu estou usando a classe a seguir para imprimir a minha tela de cadastro.
Só que a imagem da tela de cadastro fica muito grande e fica cortada na folha A4.
Tem como deixar a imagem menor?

import java.awt.*;
import java.awt.print.*;
import javax.swing.*;

/**
 *
 * @author Andreia
 */
public class PrintableDocument implements Printable {

    private Component compent;

    public static void printComponent(Component c) {
        new PrintableDocument(c).print();
    }

    public PrintableDocument(Component compent) {
        this.compent = compent;

    }

    public void print() {
        PrinterJob printJob = PrinterJob.getPrinterJob();
        printJob.setPrintable(this);
        if (printJob.printDialog()) {
            try {
                printJob.print();
            } catch (PrinterException ex) {
                ex.printStackTrace();
            }
        }
    }

    public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {
        if (pageIndex > 0) {
            return (NO_SUCH_PAGE);
        } else {
            Graphics2D graph = (Graphics2D) g;
            graph.translate(pageFormat.getImageableX(),
                    pageFormat.getImageableY());
            disableBuffering(compent);
            compent.paint(graph);
            enableBuffering(compent);
            return (PAGE_EXISTS);
        }
    }

    private void disableBuffering(Component c) {
        RepaintManager currentManager = RepaintManager.currentManager(c);
        currentManager.setDoubleBufferingEnabled(false);
    }

    private void enableBuffering(Component c) {
        RepaintManager currentManager = RepaintManager.currentManager(c);
        currentManager.setDoubleBufferingEnabled(true);
    }
}

Se alguém puder ajudar eu agradeço!

Alguém tem outro método para imprimir em Java onde eu possa definir o tamanho da imagem na impressão?

Essa classe está incompleta, porque passa um objeto Graphics2D ao componente ( compent.paint(graph); ) mas não ajusta corretamente as coordenadas (“AffineTransform”) do objeto Graphics2D, de forma que o componente seja impresso corretamente.
Esse é meu diagnóstico, mas não sei exatamente como resolver isso.
Outra coisa é que o componente, em si, não informa seu próprio tamanho. Dependendo do gerenciador de layout usado pelo componente, se ele tiver a informação da classe Graphics que o tamanho disponível é muito grande, ele acaba se reformatando de forma que fique gigante, o que foi seu problema.

Conselho: imprimir uma tela Swing (como você fez no seu programa) costuma ser uma má solução, o correto é usar um gerenciador de relatórios (como o JasperReports) para imprimir o que você deseja (no seu caso, dados de um cadastro). Eu concordo que o trabalho é duplicado, mas você não vai mais ter esse problema.

[quote=entanglement]Essa classe está incompleta, porque passa um objeto Graphics2D ao componente ( compent.paint(graph); ) mas não ajusta corretamente as coordenadas (“AffineTransform”) do objeto Graphics2D, de forma que o componente seja impresso corretamente.
Esse é meu diagnóstico, mas não sei exatamente como resolver isso.
Outra coisa é que o componente, em si, não informa seu próprio tamanho. Dependendo do gerenciador de layout usado pelo componente, se ele tiver a informação da classe Graphics que o tamanho disponível é muito grande, ele acaba se reformatando de forma que fique gigante, o que foi seu problema.

Conselho: imprimir uma tela Swing (como você fez no seu programa) costuma ser uma má solução, o correto é usar um gerenciador de relatórios (como o JasperReports) para imprimir o que você deseja (no seu caso, dados de um cadastro). Eu concordo que o trabalho é duplicado, mas você não vai mais ter esse problema. [/quote]

entanglement, obrigada pela sua resposta! Foi muito esclarecedora.
Vou ter que seguir o seu conselho mesmo. Obrigada!