2012-02-09 13 views
12

私はこの回答に対して高いものと低いものを検索し、空白になっています。JTextPaneフッターの総ページ数はどのように表示されますか?

私は、「ページ< N <メートル>ページの>」と言うフッターにJTextPaneの内容を印刷する必要があります。 Javaでこの単純な機能を実行することは不可能です。

Printableを取得したときにページ番号を印刷するようにフッターを設定できます。

 

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

しかし、プリンタのダイアログボックスが送信されるまで、印刷されるページの総数を見つける方法はないようです。私は、ダイアログがプリンタに送信される前にページの書式設定に使用されているためと考えています。プリンタのダイアログボックスには、常に1ページだけが表示されます。

私は、JTextPaneドキュメントを通り、print()メソッド のPageFormatから表示可能な領域を取得し、次に各行の高さ(fontsize)を使ってページを数えるルーチンを作成し始めました。各ページの行数をカウントし、続いてpages.egの数を数えます

 

     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には使用できません。ヘッダーとフッターは、両方のメソッド呼び出しでは「最終」として定義されています。

 


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

きっと誰かがこの基本的な機能を行うための簡単な方法を発見しました。

お手数をおかけしていただきありがとうございます。

+0

+1、良い質問:-) – kleopatra

+0

MessageFormatは最終的なものではありません。最初にメッセージを指定した後、メッセージを印刷する直前にMessageFormat.applyPatternを試してみましたか?また、ページの計算はsun.swing.text.TextComponentPrintable.javaで行われます。これらは非常に複雑ですが、サブクラス化またはリダイレクトされて実際の印刷をバイパスしても、ページの合計と2回目の印刷時間を得ることができます。ちょっとしたアイデア... – Boann

+0

私はまだそれらのどれも試していません。ヒントありがとうございます。print()メソッドでヘッダーとフッターを変更する方法がわかりません。もし私がそこに着く前に何とかページ数を計算することができれば、print()メソッドは単純なままになります。 – Banjo

答えて

2

私がJEditorPaneの/ JTextPaneのの改ページと印刷に関する記事へ下記のリンクはあなたのためのトリックを行いますかどうかわからないんだけど、確かに彼らは私のために多くのことをやった:

  1. Pagination in the JEditorPane Component. Part I.
  2. Pagination in the JEditorPane Component. Part II (Printing).
  3. Pagination in the JEditorPane Component. Part III (Headers and footers).
  4. Pagination in the JEditorPane Component. Part IV (Page Breaks).
+0

+1チェックするもう1つの記事http://java-sl.com/JEditorPanePrinter.htmlページ別のプリンタを修正して、独自のフッターを追加するのは簡単です。 – StanislavL

1

これを達成するための「直接的な」方法はないようです。 tutorial on JTextComponentには、次の言葉:出力の総ページ数が 印刷時間前に知られていないので

、 「5の1ページ」のような番号形式を指定する方法はありません。

関連する問題