如何在 JTextPane 页脚中打印总页数?

2022-09-04 23:23:49

我搜索了高低的这个答案,并出现了空白。

我需要打印JTextPane的内容,页脚写着“Page <n><m>页”。在Java中似乎不可能完成这个简单的功能。

当我获得可打印时,我可以设置页脚以打印页码,例如

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

但是,在调度打印机对话框之前,似乎无法找到要打印的总页数。我假设这是因为该对话框用于在将页面发送到打印机之前对其进行格式化。打印机对话框始终显示只有 1(一)页。

因此,我开始编写一个例程,该例程将遍历JTextPane文档并通过从print()方法中的PageFormat获取可查看区域来计算页面,然后使用每行的高度(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 ...
      }

但是,在系统回调 print() 方法之前,PageFormat 不可用,当它到达 print() 方法时,似乎不可能修改页脚,因为在方法调用中,页眉和页脚都被定义为“final”:


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

当然,有人已经找到了一种简单的方法来执行此基本功能。

提前感谢任何可以提供帮助的人。


答案 1

我不确定下面关于JEditorPane / JTextPane的分页和打印的文章的链接是否会为您解决问题,但可以肯定的是,它们为我做了很多事情:

  1. JEditorPane Component 中的分页。第一部分.
  2. JEditorPane Component 中的分页。第二部分(印刷)。
  3. JEditorPane Component 中的分页。第三部分(页眉和页脚)。
  4. JEditorPane Component 中的分页。第四部分(分页符)。

答案 2

似乎没有“直接”的方法来实现这一目标。JTextComponent上的教程是这样说的:

由于在打印时间之前不知道输出中的总页数,因此无法指定编号格式,例如“第 1 页,共 5 页”。


推荐