Как установить размер печатной страницы в Java? - PullRequest
2 голосов
/ 29 ноября 2011

Я написал программу, которая использует API печати Java для печати страниц с принтера. Я считаю, что я ввел код, чтобы установить размер страницы на букву, но он по-прежнему печатает на принтере любого размера по умолчанию. Вот мой printPage() метод:

public void printPage() {
    getTot();
    PrinterJob job = PrinterJob.getPrinterJob();
    PageFormat pf = job.defaultPage();
    Paper paper = pf.getPaper();
    paper.setSize(8.5 * 72, 11 * 72);
    paper.setImageableArea(0.5 * 72, 0.0 * 72, 7.5 * 72, 10.5 * 72);
    pf.setPaper(paper);
    job.setPrintable(this);
    boolean ok = job.printDialog();
    if (ok) {
        if (cov)
            try {
                for (j = 0; j < printPaths.size(); j++)
                    job.print();
                cov = false;
            } catch (PrinterException ex) {
                System.out.println(ex.getMessage());
            }
        if (summ)
            try {
                job.print();
                summ = false;
            } catch (PrinterException ex) {
                System.out.println(ex.getMessage());
            }
    }

}

Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 29 ноября 2011

Можете ли вы попробовать добавить этот кусок кода и запустить снова:

Book book = new Book();//java.awt.print.Book
book.append(this, pf);
job.setPageable(book);

вместо

job.setPrintable(this);
2 голосов
/ 05 июля 2013

Книга не работала для меня на примере с несколькими страницами (в результате была напечатана только первая страница), но она дала мне другую идею. Вместо:

Book book = new Book();//java.awt.print.Book
book.append(this, pf);
job.setPageable(book);

Я попробовал другой перегруженный метод, и он работал для всех страниц:

PageFormat pf = job.defaultPage();
pf.setPaper(paper);
job.setPrintable(this, pf);

Если вам нужен нестандартный размер бумаги, вам нужно переслать его в метод print в качестве аргумента (что Java сделает для вас, но вы должны передать его в метод setPrintable). Изменение PaperFormat после запуска метода будет влиять только на вторую и последующие страницы или вообще не повлиять.

В любом случае, спасибо вам обоим.

...