如何打印表格

JTable类提供对打印表的支持。 JTable打印 API 包含允许您实现基本和高级打印任务的方法。对于常见的打印任务,当您只需要简单地打印表格时,请直接使用print方法。 print方法具有几种形式,并带有各种参数集。此方法准备表,获取相应的Printable对象,并将其发送到打印机。

如果Printable对象的默认实现不能满足您的需要,则可以通过覆盖getPrintable方法来包装默认Printable甚至完全替换它来自定义打印布局。

打印表的最简单方法是调用不带参数的print方法。请参见下面的代码示例。

try {
    boolean complete = table.print();
    if (complete) {
        /* show a success message  */
        ...
    } else {
        /*show a message indicating that printing was cancelled */
        ...
    }
} catch (PrinterException pe) {
    /* Printing failed, report to the user */
    ...
}

当您调用不带参数的print方法时,将显示一个打印对话框,然后以FIT_WIDTHPattern 以交互方式打印表,而没有页眉或页脚。下面的代码示例显示print方法签名以及完整的参数集。

boolean complete = table.print(JTable.PrintMode printMode,
                               MessageFormat headerFormat,
                               MessageFormat footerFormat, 
                               boolean showPrintDialog,
                               PrintRequestAttributeSet attr,
                               boolean interactive,
                               PrintService service);

当使用所有参数调用print方法时,您将明确选择打印功能,例如打印 Pattern,页眉和页脚文本,打印属性,目标打印服务,以及是否显示打印对话框以及是否显示交互式或非交互式打印。要确定最适合您需要的参数,请参阅下面的可用功能描述。

JTable打印 API 提供以下功能:

交互式或非交互式打印

在交互 Pattern 下,将在打印期间显示带有中止选项的进度对话框。这是进度对话框的示例。

打印进度对话框的屏幕截图

该对话框使用户可以跟踪打印进度。进度对话框是 Pattern 对话框,这意味着,尽管对话框显示在屏幕上,但用户无法与表格进行交互。重要的是,表在打印时保持不变,否则打印行为将不确定。但是,交互式打印不会阻止其他开发人员的代码更改表格。例如,有另一个线程使用SwingUtilities.invokeLater方法发布更新。因此,为确保正确的打印行为,您应确保自己的代码不会在打印过程中修改表。

或者,您可以非交互式地打印表格。在这种 Pattern 下,打印将立即在事件分发线程上开始,并完全阻止所有要处理的事件。一方面,此 Pattern 可以安全地防止表格发生任何变化,直到完成打印为止。另一方面,此 Pattern 完全剥夺了用户与 GUI 的任何交互。因此,仅当从具有不可见 GUI 的应用程序进行打印时,才建议非交互式打印。

您可以显示一个标准的打印对话框,允许用户执行以下操作:

  • 选择打印机

  • 指定份数

  • 更改打印属性

  • 开始打印之前取消打印

  • Start printing

打印对话框的屏幕截图

您可能会注意到,“打印”对话框未指定打印输出中的总页数。这是因为表格打印实现使用Printable API,并且在打印之前未知总页数。

将页眉或页脚(或两者)添加到打印版式

页眉和页脚由MessageFormat参数提供。这些参数允许对页眉和页脚进行本地化。阅读MessageFormat类的文档,因为某些字符(例如单引号)是特殊字符,需要避免。页眉和页脚都居中。您可以使用\ {0}插入页码。

MessageFormat footer = new MessageFormat("Page - {0}");

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

Printing Modes

打印 Pattern 负责缩放输出并将其分布在页面上。您可以通过以下方式之一打印表格:

  • PrintMode.NORMAL

  • PrintMode.FIT_WIDTH

NORMALPattern 下,将以当前尺寸打印表格。如果列不适合页面,则它们将根据表的ComponentOrientation分布在其他页面上。在FIT_WIDTHPattern 下,如果需要,表的大小较小,以适合每一页上的所有列。请注意,宽度和高度都按比例缩放以提供相同纵横比的输出。在两种 Pattern 下,行依次分布在多个页面上,并且页面上的行越多越好。

自动布局和分页

使用JTable打印 API,您无需担心布局和分页。您只需为print方法指定适当的参数,例如打印 Pattern 和页脚文本格式(如果要在页脚中插入页码)。如前所述,您可以通过在MessageFormat footer 参数提供的字符串 中包含"{0}"来在页脚中指定页码。在打印的输出中,\ {0}将被当前页码替换。

表格打印示例

让我们来看一个名为TablePrintDemo1的示例。该程序的完整代码可以在TablePrintDemo1.java中找到。该演示的丰富 GUI 由NetBeans IDE GUI 构建器自动构建。这是TablePrintDemo1应用程序的图片。

TablePrintDemo1 的屏幕截图

Note

boolean print()
boolean print(printMode)
布尔打印(printMode,MessageFormat,MessageFormat)
布尔值打印(printMode,MessageFormat,MessageFormat,布尔值,PrintRequestAttributeSet,布尔值)
布尔打印(printMode,MessageFormat,MessageFormat,布尔,PrintRequestAttributeSet,布尔,PrintService)如果不带参数调用,将显示一个打印对话框,然后以FIT_WIDTHPattern 交互地打印此表,而没有页眉或页脚文本。如果用户 continue 打印,则返回true,如果用户取消打印则返回false
当使用一整套参数调用时,将根据指定的参数打印此表。第一个参数指定打印 Pattern。两个MessageFormat参数指定页眉和页脚文本。第一个布尔参数定义是否显示打印对话框。另一个布尔参数指定是否以交互方式打印。使用其他两个参数可以指定打印属性和打印服务。
每当省略PrintService参数时,将使用默认打印机。

« PreviousTrailNext »