Как распечатать общее количество страниц в нижнем колонтитуле JTextPane? - PullRequest
12 голосов
/ 09 февраля 2012

Я искал верхний и нижний значения этого ответа и получил пустое значение.

У меня есть требование распечатать содержимое JTextPane с нижним колонтитулом, на котором написано "Страница из страниц».Кажется, невозможно выполнить эту простую функцию в Java.

Я могу настроить нижний колонтитул на печать номеров страниц, когда получу возможность печати, например,


     String header = "whatever";
     String footer = " Page - {0}";
     printText(textPane.getPrintable(new MessageFormat(header), 
        new MessageFormat(footer)));

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

Итак, я начал писать процедуру, которая будет проходить через документ JTextPane и подсчитывать страницы, получая видимую область из PageFormat вметод print () и затем использование высоты каждой строки (размер шрифта) для подсчета строк на каждой странице и последующего подсчета количества страниц. Например:


      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)

Конечно, кто-то нашел простой способ сделать эту основную функцию.

Заранее спасибо всем, кто может помочь.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012
1 голос
/ 19 декабря 2012

Кажется, нет "прямого" способа сделать это.В руководстве по JTextComponent говорится следующее:

Поскольку общее количество страниц в выводе неизвестно до времени печати, нет способа указать формат нумерации, напримерСтраница 1 из 5 ".

...