textarea 的内容到打印机

Posted

技术标签:

【中文标题】textarea 的内容到打印机【英文标题】:contents of textarea to the printer 【发布时间】:2014-12-25 21:22:10 【问题描述】:

主要通过使用下面的语句,我能够轻松地打印 JTable 的内容。但是,这不适用于打印 textarea 组件的内容。是否有打印 textarea 组件内容的简单方法?我在网上看到了一些使用多个类的非常令人困惑的示例。但我正在尝试找到一种更简单的方法。

我在原始帖子后大约 24 小时添加了第二个代码区域。请注意,它似乎很有希望,但会产生错误“添加参数以匹配打印(图形)”。如何修复该代码?

table.print(JTable.PrintMode.NORMAL, header, footer);




JButton btnNewButton_7 = new JButton("Print");
    btnNewButton_7.addActionListener(new ActionListener() 
    @Override
        public void actionPerformed(ActionEvent arg0)   

        try
            boolean complete = textArea_2.print();
            //The above line reads the error "Add argument to match print(Graphics)"
            if(complete)
                JOptionPane.showMessageDialog(null,  "Printjob Finished", "Report",
                        JOptionPane.INFORMATION_MESSAGE);
            else
                JOptionPane.showMessageDialog(null, "Printing", "Printer", JOptionPane.ERROR_MESSAGE);
                
            catch(PrinterException e)JOptionPane.showMessageDialog(null, e);
            



        

    );

【问题讨论】:

【参考方案1】:

Google 和 JavaDocs 是你的朋友

JTextArea#print

显示打印对话框的便捷打印方法,然后 以交互模式打印此 JTextComponent,没有标题或 页脚文本。注意:此方法会阻塞,直到打印完成。注:在 无头模式,不会显示任何对话框。

该方法调用全功能打印方法来执行 打印。

返回: true,除非用户取消打印

JTextArea#print(MessageFormat headerFormat, MessageFormat footerFormat)

显示打印对话框的便捷打印方法,然后 使用指定的交互模式打印此 JTextComponent 页眉和页脚文本。注意:此方法会阻塞,直到打印完成 完毕。注意:在无头模式下,不会显示任何对话框。

该方法调用全功能打印方法进行打印。

参数: headerFormat - MessageFormat 中的文本,用作 页眉,或 null 表示没有页眉footerFormat - 文本,在 MessageFormat,用作页脚,或 null 表示没有页脚返回: true,除非用户取消打印

JTextArea#print(MessageFormat headerFormat, MessageFormat footerFormat, boolean showPrintDialog, PrintService service, PrintRequestAttributeSet attributes, boolean interactive) throws PrinterException

...你自己看那个,太长了...

JTextArea#getPrintable(MessageFormat headerFormat, MessageFormat footerFormat)

返回一个 Printable 用于打印 this 的内容 文本组件。返回的 Printable 按外观打印文档 除了被重新格式化以适合纸张。返回的 Printable 可以包装在另一个 Printable 中以创建 复杂的报告和文件。返回的 Printable 共享 带有此 JTextComponent 的文档。这是该部门的责任 开发人员确保文档在此期间不会发生变异 使用可打印的。当文档是未定义的打印行为 在打印过程中发生变异。

页眉和页脚文本可以通过提供添加到输出中 MessageFormat 参数。打印代码从 格式,提供可以包含在 格式化字符串:表示当前页码的 Integer。

打印时返回的Printable,格式化文档内容 适合页面大小。为了正确换行 所有页面的可成像宽度必须相同。看 PageFormat.getImageableWidth().

此方法是线程安全的,尽管大多数 Swing 方法不是。 请参阅如何使用线程了解更多信息。

返回的 Printable 可以在任何线程上打印。

这个实现返回的 Printable 在 事件调度线程,不管它用在什么线程上。

参数: headerFormat - MessageFormat 中的文本,用作 页眉,或 null 表示没有页眉 footerFormat - 文本,在 MessageFormat,用作页脚,或 null 表示没有页脚 返回: 用于打印此内容的 Printable 文本组件

对我来说很好用...

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PrinterException;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestPrint 

    public static void main(String[] args) 
        new TestPrint();
    

    public TestPrint() 
        EventQueue.invokeLater(new Runnable() 
            @Override
            public void run() 
                try 
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                 catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) 
                    ex.printStackTrace();
                

                JTextArea ta = new JTextArea(20, 100);
                try (FileReader reader = new FileReader(new File("C:/Script.txt"))) 
                    ta.read(reader, ta);
                 catch (IOException ex) 
                    ex.printStackTrace();
                

                JButton print = new JButton("Print");
                print.addActionListener(new ActionListener() 
                    @Override
                    public void actionPerformed(ActionEvent e) 
                        MessageFormat header = new MessageFormat("Star Wars IV A new Hope");
                        MessageFormat footer = new MessageFormat("Page 0");
                        try 
                            ta.print(header, footer);
                         catch (PrinterException ex) 
                            ex.printStackTrace();
                        
                    
                );

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(ta));
                frame.add(print, BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            
        );
    


【讨论】:

是的,我尝试了以下方法: textArea_2.print(new MessageFormat("My text component header"),new MessageFormat("Footer. Page - 0"), true, null, null,真的);我收到以下错误消息:删除参数以匹配“打印(图形)” 对我来说很好用。考虑提供一个runnable example 来证明您的问题。这将导致更少的混乱和更好的响应 感谢您的信息和时间。我要看看你发给我的代码和信息。我需要一点时间来试着弄清楚。明天我会告诉你的。 我刚刚用附加代码更新了我的原始帖子。其中一行有一个错误,我花了好几个小时试图弄清楚。

以上是关于textarea 的内容到打印机的主要内容,如果未能解决你的问题,请参考以下文章

jqPrint 无法打印textArea

如何打印 TextArea 的内容?

JQuery 将 textarea 值复制到 div 中进行打印

输出控制台(打印功能)到 Gui TextArea

当 textarea 溢出时打印

从标准输出实时输出到 wx.TextArea