Мое приложение позволяет пользователю печатать содержимое экрана, состоящее из нескольких элементов управления Swing (изображения, тексты и т. Д.) - печатная панель сама длинна (несколько страниц) и ширина около 600 пикселей.Печать на Java - страница
Поскольку я точно знаю, что каждый макет страницы (я помещаю точное количество изображений и компонентов) на каждую страницу (общее количество изображений является динамическим), я могу точно рассчитать, сколько страниц мне потребуется для печати.
Я реализовал интерфейс печати следующим образом:
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 и нескольких принтеров клиентов, и результаты были хорошими.
Однако на одном из моих пользовательских принтеров - кажется, что что-то не работает с расчетом, так как он разбивает страницу посередине изображений.
Есть ли более элегантный способ выполнения этих расчетов? Могу я добавить вместо этого уведомление о «перерыве страницы»?
Благодаря
Пожалуйста, отформатируйте код для лучшей читаемости. –