Как печатать() без printDialog()?

Итак, у меня есть этот код, который печатает несколько строковых строк, и я хочу напечатать его без необходимости выбирать принтер, и как я могу установить формат страницы?

      import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.swing.JPanel;

public class Test extends JPanel {

    public static void main(String[] args) {
        try {
            PrinterJob pjob = PrinterJob.getPrinterJob();
            pjob.setJobName("Graphics Demo Printout");
            pjob.setCopies(1);
            pjob.setPrintable(new Printable() {
                public int print(Graphics pg, PageFormat pf, int pageNum) {
                    if (pageNum > 0) // we only print one page
                        return Printable.NO_SUCH_PAGE; // ie., end of job

                    pg.drawString("aaaaa", 10, 10);
                    pg.drawString("bbbbb", 10, 20);

                    return Printable.PAGE_EXISTS;
                }
            });

            if (!pjob.printDialog()) // choose printer
                return;
            pjob.print();
        } catch (PrinterException pe) {
            pe.printStackTrace();
        }
    }

}

1 ответ

Вы можете указать в качестве дополнительного параметра для setPrintable()метод. Для создания объекта вы можете задать PrinterJobобъект.

И как только вы предоставите PageFormatвозражать против вызова printerDialog()(по крайней мере, на моей машине) больше не нужен.

Я соответствующим образом изменил ваш пример кода:

      import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.print.PrintService;

public class Test {

    public static void main(String[] args) {
        try {
            PrinterJob pjob = PrinterJob.getPrinterJob();
            pjob.setJobName("Graphics Demo Printout");
            pjob.setCopies(1);
            // on my machine `printServices[2]` is a virtual PDF printer - good for testing since it doesn't any paper
            // PrintService[] printServices = PrinterJob.lookupPrintServices();
            // pjob.setPrintService(printServices[2]);
            PageFormat pageFormat = pjob.defaultPage();
            pjob.setPrintable(new Printable() {
                public int print(Graphics pg, PageFormat pf, int pageNum) {
                    if (pageNum > 0) // we only print one page
                        return Printable.NO_SUCH_PAGE; // ie., end of job

                    Font f = pg.getFont();
                    pg.setFont(f.deriveFont(Font.PLAIN, 24));
                    pg.setColor(Color.black);
                    pg.drawString("aaaaa", 100, 100);
                    pg.drawString("bbbbb", 100, 200);

                    return Printable.PAGE_EXISTS;
                }
            }, pageFormat);

            pjob.print();
        } catch (PrinterException pe) {
            pe.printStackTrace();
        }
    }
}
Другие вопросы по тегам