2012-02-09 56 views
12

我已經搜索了這個答案的高和低,並已空白。如何打印JTextPane頁腳中的頁面總數?

我有一個要求,一個頁腳,上面寫着「頁面的<ň米>頁」打印的JTextPane的內容。 Java中做這個簡單的函數似乎是不可能的。

我可以設置頁腳打印頁碼,當我得到可打印,例如,

 

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

但似乎沒有辦法找到的將被打印到打印機對話框被分派後總頁數。我認爲這是因爲該對話框用於在將頁面發送到打印機之前對其進行格式化。打印機對話框始終表示只有一個(一個)頁面。

於是,我開始寫一個程序,將經過JTextPane的文件和計數通過獲取的print()方法 從PageFormat設置可視區域,然後用每行(字號)的高度的頁面計算每個頁面中的行數,然後計算頁面數量

 

     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 ... 
     } 

然而,直到系統回調到print()方法,並通過一次獲取到的print()方法的PageFormat不可用,這似乎是不可能修改頁腳自頁眉和頁腳都定義爲方法調用「最終」:

 


     public Printable getPrintable(final MessageFormat headerFormat, 
             final MessageFormat footerFormat) 

當然有人已經找到了一種簡單的方法來做到這一點基本功能。

在此先感謝任何幫助的人。

+0

+1,很好的問題:-) – kleopatra 2012-02-10 10:28:14

+0

MessageFormat不是最終的 - 你有沒有嘗試MessageFormat.applyPattern改變消息後初步指定它們,但在打印之前?此外,頁面計算在sun.swing.text.TextComponentPrintable.java中完成。它們非常複雜,但是也許你可以運行它們兩次,一次被分類或重定向以繞過實際打印,但獲得頁面總數和第二次打印。只是一些想法... – Boann 2012-02-10 13:02:57

+0

我還沒有嘗試過任何這些。感謝您的小費。我不知道如何獲取頁眉和頁腳來修改print()方法。如果我能以某種方式計算頁面數量,那麼它將保持print()方法的簡單。 – Banjo 2012-02-10 18:47:55

回答

2
+0

+1另一篇文章來檢查http://java-sl.com/JEditorPanePrinter.html很容易修改分頁打印機添加自己的頁腳。 – StanislavL 2012-02-18 16:31:03

1

似乎沒有「直接」的方法來完成這一點。該tutorial on JTextComponent說以下內容:

由於輸出的總頁數 打印時間之前是不知道,也沒有辦法來指定像 一個編號格式「第5 1」。