Java печать - страница - PullRequest
       22

Java печать - страница

0 голосов
/ 26 октября 2009

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

Поскольку я точно знаю каждый макет страницы (я указал точное количество изображений и компонентов) на каждой странице (общее количество изображений является динамическим), я могу точно рассчитать, сколько страниц мне потребуется для печати. ​​

Я реализовал интерфейс Printable следующим образом:

public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.BLACK);    //set default foreground color to black
    RepaintManager.currentManager(this).setDoubleBufferingEnabled(false);
    Dimension d = this.getSize();    //get size of document
    double panelWidth = d.width;    //width in pixels
    double panelHeight = d.height;   //height in pixels
    double pageHeight = pf.getImageableHeight();   //height of printer page
    double pageWidth = pf.getImageableWidth();    //width of printer page
    double scale = pageHeight / panelHeight;
    int totalNumPages = (int) Math.ceil(scale * panelWidth / pageWidth);

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


    g2.translate(pf.getImageableX(), pf.getImageableY());
    g2.translate(0f, -pageIndex * pageHeight);
    g2.scale(scale, scale);
    this.paint(g2);
    return Printable.PAGE_EXISTS;
}

Кажется, все работает нормально. Поскольку у меня нет принтера, я протестировал его на принтере PDF и на принтере нескольких клиентов - и результаты были хорошими.

Однако на одном из принтеров моего пользователя - кажется, что-то не работает с расчетом, поскольку он разрывает страницу в середине изображения.

Есть ли более элегантный способ сделать эти вычисления? Могу ли я вместо этого добавить куда-нибудь уведомление о разрыве страницы?

Спасибо

Ответы [ 2 ]

1 голос
/ 26 октября 2009

В прошлом я обнаружил, что попытка реализовать интерфейс для печати сама по себе вызывала проблемы с форматированием, которые вы испытываете. Одна вещь, которую я сделал в прошлом, которая значительно сократила усилия с моей стороны и работала хорошо, заключалась в использовании JasperReports для управления этим. Вы можете создать определение jrxml с одним изображением / страницей, а затем просто передать изображения в jasperreport. Отсюда вы можете использовать объект JasperPrint и отправить его прямо на принтер. Это хорошо сработало для меня. Кроме того, у него есть несколько преимуществ, поскольку экспорт уже встроен в отчеты яшмы, такие как pdf, если это необходимо.

0 голосов
/ 03 декабря 2009

Сам код выглядит нормально, особенно если учесть, что он работает для принтера PDF. У меня просто есть несколько идей по отладке:

1) Вы проверили настройки принтера для принтера пользователя? Возможно, размер страницы установлен неправильно. 2) Каким образом вы можете подключить свою машину для разработки к этому принтеру и отладить ее?
3) Если нет, вы можете добавить запись в журнал, чтобы сообщить вам pg.getImageableWidth и pg.getImageableHeight и другую информацию на протяжении всего расчета, чтобы увидеть, где это неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...