私はこの回答に対して高いものと低いものを検索し、空白になっています。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)
きっと誰かがこの基本的な機能を行うための簡単な方法を発見しました。
お手数をおかけしていただきありがとうございます。
+1、良い質問:-) – kleopatra
MessageFormatは最終的なものではありません。最初にメッセージを指定した後、メッセージを印刷する直前にMessageFormat.applyPatternを試してみましたか?また、ページの計算はsun.swing.text.TextComponentPrintable.javaで行われます。これらは非常に複雑ですが、サブクラス化またはリダイレクトされて実際の印刷をバイパスしても、ページの合計と2回目の印刷時間を得ることができます。ちょっとしたアイデア... – Boann
私はまだそれらのどれも試していません。ヒントありがとうございます。print()メソッドでヘッダーとフッターを変更する方法がわかりません。もし私がそこに着く前に何とかページ数を計算することができれば、print()メソッドは単純なままになります。 – Banjo