Я долго искал этот ответ и ничего не нашел.
Мне нужно распечатать содержимое JTextPane с нижним колонтитулом, который гласит "Страница
Я могу установить нижний колонтитул для печати номеров страниц, когда я получаю Printable, например
String header = "whatever"; String footer = " Page - {0}"; printText(textPane.getPrintable(new MessageFormat(header), new MessageFormat(footer)));
Но, похоже, нет способа узнать общее количество страниц, которые будут напечатаны, пока не будет отправлено диалоговое окно принтера. Я предполагаю, что это потому, что диалоговое окно используется для форматирования страниц перед их отправкой на принтер. Диалоговое окно принтера всегда говорит, что есть только 1 (одна) страница.
Итак, я начал писать процедуру, которая будет проходить через документ JTextPane и подсчитывать страницы, получая область просмотра из PageFormat в методе print() и затем, используя высоту каждой строки (fontsize), считать строки на каждой странице, а затем считать количество страниц.например
int maxh = (int) pf.getImageableHeight (); Element section = doc.getDefaultRootElement(); for (int i=0; i<paraCount; i++) { Element e = section.getElement(i); // Get the attributeSet for this paragraph (Element) // The attributeSet contains the Styles, which contain // the fonts etc. AttributeSet attrs = e.getAttributes(); int fontsize = StyleConstants.getFontSize(attrs); // .... add up the lines and count filled pages ... }
Однако, PageFormat недоступен, пока система не вернется к методу print(), и к тому времени, когда он доберется до метода print(), оказывается невозможным изменить колонтитул, поскольку и колонтитул, и заголовок определены как "final" в вызове метода:
public Printable getPrintable(final MessageFormat headerFormat, final MessageFormat footerFormat)
Конечно, кто-то нашел простой способ сделать эту базовую функцию.
Заранее спасибо всем, кто может помочь.