Печать данных jpanel, где ширина страницы больше высоты - PullRequest
1 голос
/ 07 декабря 2011

В настольном приложении мне нужно распечатать данные jPanel на матричном принтере, где размер бумаги должен быть 10x6. В Java есть ограничение, что ширина не должна превышать высоту. Но как я могу выполнить свою задачу, переступив этот предел. Если я установил формат страницы, высота которого меньше ширины, он будет обрабатываться как бумага формата А4 и подавать бумагу снизу.

Если я не указал формат страницы, он печатается нормально, но дает много полей (сверху, снизу, слева, справа). Я не могу изменить поля. Если заданы только поля, страница обрабатывается как A4, а подача отображается снизу.

Мне нужно распечатать данные на предварительно напечатанной странице с выравниванием. Есть ли другой способ сделать это. Можно ли использовать альбомную ориентацию, если да, то как управлять потоком текста (снизу вверх - ось X).

Это мой код

PrinterJob job = PrinterJob.getPrinterJob();
PageFormat pageFormat = job.defaultPage();
pageFormat.setOrientation(PageFormat.LANDSCAPE);
job.setPrintable(this,pageFormat);
try {
          job.print();
     } catch (PrinterException ex) {
      System.out.println(ex);
     }

метод краски

    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {

        if (page > 0) { 
            return NO_SUCH_PAGE;
        }
        g.setFont(new java.awt.Font("Sans Serif", java.awt.Font.PLAIN, 10));
        Graphics2D g2d = (Graphics2D)g;
        AffineTransform old = g2d.getTransform();
        if (pf.getOrientation() == PageFormat.LANDSCAPE) {
            g2d.rotate( -Math.PI / 2, 0, 0);
            g2d.translate( -pf.getImageableWidth(), 0);
        }
        else {
            g2d.rotate(Math.PI / 2, 0, 0);
            g2d.translate(0, -pf.getImageableHeight());
        }
        jPanel1.printAll(g2d);
        g2d.setTransform(old);
        //g2d.translate(70, 30);
        return PAGE_EXISTS;
    }

Заранее спасибо.

1 Ответ

1 голос
/ 07 декабря 2011

Установить ориентацию PageFormat на альбомную и повернуть содержимое.В методе print () вращайте и переводите содержимое.

Graphics2D g2d = (Graphics2D) g;
AffineTransform old = g2d.getTransform();
if (contentOrientation == ORIENTATION_DOWN_UP) {
    g2d.rotate( -Math.PI / 2, 0, 0);
    g2d.translate( -w, 0);
}
else {
    g2d.rotate(Math.PI / 2, 0, 0);
    g2d.translate(0, -h);
}
//paint all your content here
g2d.setTransform(old);
...