【问题标题】:How to Send JTable data to Print Job from Java Application?如何从 Java 应用程序将 JTable 数据发送到打印作业?
【发布时间】:2011-05-26 09:47:46
【问题描述】:

在我的应用程序中,我有一个带有数据的 JTable,我需要添加一个打印按钮,该按钮添加了在打印纸上打印表格中数据的功能(发送打印机作业),这怎么可能使用 @987654322 @ 班级? 我一直在寻找示例,但找不到从 JComponent 打印一些数据的简单示例。

这是我找到的网站之一:http://java.sun.com/products/java-media/2D/forDevelopers/sdk12print.html。 但是我不确定要关注什么来了解打印的工作原理(页面格式...等)。

谢谢

【问题讨论】:

    标签: java swing printing jtable


    【解决方案1】:

    我通过将整个表格绘制到打印机页面,相应地调整大小等来解决问题。因为打印实际上只是绘制到不同的接收器。

    @Saher 请check my answer to other question 提供链接,这些链接对我了解 API 如何工作/可以应用很有帮助。

    编辑:

    请务必检查教程,尤其是没有。 2. 我这样做的方式是我有一个 MyPrintUtility 类,它实现了 Printable 接口。 它的构造函数需要一个我想打印的组件。当它获取组件时,它会计算将占用多少页面并存储页面端点。然后我有一个我调用它的方法来初始化打印对话框。

        public void print()
        {
            PrinterJob printJob = PrinterJob.getPrinterJob();
            if(printJobName != null)
                printJob.setJobName(printJobName);
            printJob.setPrintable(this);    
            if(printJob.printDialog())
                try
                {
                    //for faster printing, turn off double buffering
                    disableDoubleBuffering(componentToPrint);
                    System.out.println("Calling PrintJob.print()");
                    printJob.print(new HashPrintRequestAttributeSet());
                    System.out.println("End PrintJob.print()");
                }catch(PrinterException pe)
                {
                    System.out.println("Error printing: " + pe);
                }finally//whatever happend (exception or not) turn back on the double buffering
                {
                    enableDoubleBuffering(componentToPrint);
                }
        }
    

    在 Printable 接口的public int print(Graphics g, PageFormat pf, int pageIndex) 方法中,我相应地翻译图形,为每一页剪裁表格。

    更多资源查看:

    http://www.java2s.com/Code/Java/2D-Graphics-GUI/PrintinJavaMultipage.htm --- 多页打印

    http://download.oracle.com/javase/tutorial/2d/printing/gui.html --- 打印 GUI 组件。

    http://www.sideofsoftware.com/print_preview_tutorial.htm---打印预览教程

    http://www.java-tips.org/java-se-tips/java.awt.print/print-the-text-file-and-print-preview-them.html --- 如何预览和打印文本文件的绝佳示例。

    EDIT2:

    You must seriously read this one.这里作者解释了如何在多个页面上进行拆分以及如何翻译图形和移动剪辑等。

    【讨论】:

    • 您是如何在打印机页面上绘制表格的?
    • @Saher 请检查我的编辑,我在其中描述了我的方法。另外,我会为您提供有关该主题的更多有用资源。您必须自己尝试理解它,否则如果我要给您一个现成的代码,我会对您不利。加上它是用波兰语写的,而且它很旧,当你意识到你需要改变它时,因为它没有做你想做的一切,你会很挣扎。我将尝试为您找到一个人很好地解释如何处理此打印的资源。他解释了如何移动剪辑等。
    • @Saher 我找到了以它开头的资源。它在 EDIT2 中。
    【解决方案2】:

    嗯,

    今天关于打印http://download.oracle.com/javase/tutorial/2d/printing/index.html 的Java6 Oracle 教程包含http://download.oracle.com/javase/7/docs/api/javax/swing/JTable.html#print%28%29,在JTable Tutorial 中描述,包括Runnable Examples,然后你必须搜索(在这个论坛上)正确的Print paginations and orientations

    例如

    PrintRequestAttributeSet set = new HashPrintRequestAttributeSet();
    set.add(OrientationRequested.LANDSCAPE);
    resultFxTable.print(JTable.PrintMode.FIT_WIDTH, header, footer, false, set, false);
    

    注意:我不确定是否可以正确设置 PrintHeader 的 Font、FontSize 和 FOntColor 以及 JTable 打印的 PrintFooter

    【讨论】:

    • +1 不错,我不知道他对 JTable 的便捷方法。你知道它是否还可以处理漂亮的表格打印,即向前移动标题而不是切割行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2012-07-04
    • 2018-09-27
    相关资源
    最近更新 更多