如何实现记事本的打印功能?

解决方案 »

  1.   

      网上找的  不知对不对啊
      import   java.awt.*;   
      import   java.io.*;   
      import   java.awt.print.*;   
      import   javax.swing.*;   
      import   javax.swing.text.*;   
        
      class   PrintableTextArea   extends   JTextArea   implements   Printable   {   
          String   str;   
          Font   font;   
          PrinterJob   pj;   
          PageFormat   defaultFormat;   
          int   visiblePageWidth   =   0,   visiblePageHeight   =   0;   
          final   static   int   PageX   =   10,   PageY   =   10;   
        
          PrintableTextArea(int   rows,   int   columns)   {   
              super(rows,   columns);   
          }   
        
          public   void   printIt(String   str,   Font   font)   {   
              this.str   =   str;   
              this.font   =   font;   
              pj   =   PrinterJob.getPrinterJob();   
              defaultFormat   =   pj.defaultPage();   
              pj.setPrintable(this,   defaultFormat);   
              visiblePageWidth   =   (int)defaultFormat.getImageableWidth();   
              visiblePageHeight   =   (int)defaultFormat.getImageableHeight();   
              if(pj.printDialog())   {   
                  try   {   
                      pj.print();   
                  }   catch(PrinterException   e)   {   
                  }   
              }   
          }   
        
          public   int   print(Graphics   g,   PageFormat   pf,   int   page)   throws   PrinterException   {   
              if(page   >=   1)   
                  return   Printable.NO_SUCH_PAGE;   
              Graphics2D   g2   =   (Graphics2D)   g;   
              g2.translate((int)pf.getImageableX(),   (int)pf.getImageableY());   
              g2.setFont(font);   
              int   fontHeight   =   0,   fontStringWidth   =   0;   
              int   line   =   0;   
              String   s   =   null;   
              FontMetrics   fm   =   getFontMetrics(font);   
              fontHeight   =   fm.getHeight();   
              try{   
                  DataOutputStream   osw   =   new   DataOutputStream(new   FileOutputStream("$temp.$$p"));   
                  osw.writeBytes(str);   
                  osw.close();   
              }   catch(IOException   e)   {   
              }   
              try   {   
                  BufferedReader   br   =   new   BufferedReader(new   FileReader("$temp.$$p"));   
                  s   =   br.readLine();   
                  while(s   !=   null)   {   
                      if(s.length()   ==   0)   
                          g2.drawString("   ",   PageX,   PageY   +   fontHeight*(line++));   
                      else   {   
                          //g2.drawString(s,   PageX,   PageY   +   fontHeight*(line++));   
                          fontStringWidth   =   fm.stringWidth(s);   
                          if(fontStringWidth   >   visiblePageWidth)   {   
                              String   s1,   s2;   
                              int   goBack   =   0;   
                              while(   fm.stringWidth(s1   =   s.substring(0,   s.length()   -   goBack))   >   
                                            visiblePageWidth)   {   
                                  goBack++;   
                              }   
                              s1   =   s.substring(0,   s.length()   -   goBack);   
                              s2   =   s.substring(s.length()   -   goBack   -   1);   
                              g2.drawString(s1,   PageX,   PageY   +   fontHeight*(line++));   
                              g2.drawString(s2,   PageX,   PageY   +   fontHeight*(line++));   
                          }   
                          else   {   
                              g2.drawString(s,   PageX,   PageY   +   fontHeight*(line++));   
                          }   
                      }   
                      s   =   br.readLine();   
                  }   
                  br.close();   
              }   catch(IOException   e)   {   
              }   
              return   Printable.PAGE_EXISTS;   
          }   
      

  2.   

    JTextArea 从 JTextComponent 继承了 三个 print 方法 和一个 getPrintable(MessageFormat headerFormat, MessageFormat footerFormat) 。
    其中
    void print() 一个便捷打印方法,它显示打印对话框,然后在交互 模式下打印此 JTextComponent,不打印标题和脚注文本。
      

  3.   

    Printing Support in Swing Components
    http://java.sun.com/docs/books/tutorial/2d/printing/swing.html