我写了一个应用程序,我用poi生成了excel表格, 想问下怎么通过java连接打印机打印excel表格...网上的方法太杂,有人说用ireport和jasperReport可以实现,不过没有例子,时间又紧.....  希望大家给点例子...  如果不能用java直接打印excel的话那能用什么方式代替...最后还是先谢谢大家, 最好贴代码例子,可以的话直接贴出来,方便其他人学习,太多的话就发到,谢谢

解决方案 »

  1.   

     问下:“ 通过java连接打印机打印excel表格” 什么意思 ?  
      

  2.   


    我是想能不能把excel表格转成流的方式传给打印机,然后打印。  就像打开Excel后有个打印的按钮,一点,打印。。
      

  3.   

    你是想不打开 excel, java程序直接调打印机,批量打印excel里面的内容吗 ?  如果是这样, 那只有坐等高人了 !
      

  4.   


    不是批量,就打印一张excel表格, 如果不能这样的话其他有没有其他方法,因为我要打印的是表格, 我能一行行打印字符串,但是这样的话还要自己画那些表格线,所以问下能不能直接用代码打开excel,再连接打印机打印....
      

  5.   


    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */package javaapplication2;import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Shape;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.font.FontRenderContext;
    import java.awt.font.TextLayout;
    import java.awt.geom.AffineTransform;
    import java.awt.geom.GeneralPath;
    import java.awt.geom.Line2D;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
    import java.awt.print.PageFormat;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;/**
     *
     * @author Stephen
     */
    public   class   PrintTest
    {     public   static   void   main(String[]   args)
          {     JFrame   frame   =   new   PrintTestFrame();
                frame.show();
          }
    }class   PrintTestFrame   extends   JFrame implements   ActionListener
    {
        public   PrintTestFrame()
        {
            setTitle( "PrintTest ");
            setSize(500,   500);
            addWindowListener(new   WindowAdapter()
                  {     public   void   windowClosing(WindowEvent   e)
                        {     System.exit(0);
                        }
                  }   );        Container   contentPane   =   getContentPane();
            canvas   =   new   PrintPanel();
            //            contentPane.add(canvas,   "Center ");
            contentPane.add(canvas,BorderLayout.CENTER);
            JPanel   buttonPanel   =   new   JPanel();
            printButton   =   new   JButton( "Print ");
            buttonPanel.add(printButton);
            printButton.addActionListener(this);        pageSetupButton   =   new   JButton( "Page   setup ");
            buttonPanel.add(pageSetupButton);
            pageSetupButton.addActionListener(this);        //            contentPane.add(buttonPanel,   "North ");
             contentPane.add(buttonPanel, BorderLayout.NORTH);
          }    public   void   actionPerformed(ActionEvent   event)
        {
            Object   source   =   event.getSource();
            if   (source   ==   printButton)
            {     PrinterJob   printJob   =   PrinterJob.getPrinterJob();
                  if   (pageFormat   ==   null)
                        pageFormat   =   printJob.defaultPage();
                  printJob.setPrintable(canvas,   pageFormat);
                  if   (printJob.printDialog())
                  {     try
                        {     printJob.print();
                        }
                        catch   (PrinterException   exception)
                        {     JOptionPane.showMessageDialog(this,   exception);
                        }
                  }
            }
            else   if   (source   ==   pageSetupButton)
            {     PrinterJob   printJob   =   PrinterJob.getPrinterJob();
                  if   (pageFormat   ==   null)
                        pageFormat   =   printJob.defaultPage();
                  pageFormat   =   printJob.pageDialog(pageFormat);
            }
        }      private   JButton   printButton;
          private   JButton   pageSetupButton;      private   PrintPanel   canvas;
          private   PageFormat   pageFormat;
    }class   PrintPanel   extends   JPanel  implements   Printable
    {
        @Override
         public   void   paintComponent(Graphics   g)
          {     super.paintComponent(g);
                Graphics2D   g2   =   (Graphics2D)g;
    //            drawPage(g2);
          }      public   int   print(Graphics   g,   PageFormat   pf,   int   page)throws   PrinterException
          {
              if   (page >= 1)
                    return   Printable.NO_SUCH_PAGE;
                Graphics2D   g2   =   (Graphics2D)g;
                g2.setPaint(Color.black);
                g2.translate(pf.getImageableX(),   pf.getImageableY());
                g2.draw(new   Rectangle2D.Double(0,   0, pf.getImageableWidth(),   pf.getImageableHeight()));
                System.out.println("pf.getImageableWidth()" + pf.getImageableWidth());
                System.out.println("pf.getImageableHeight()" + pf.getImageableHeight());            drawPage(g2);
                return   Printable.PAGE_EXISTS;
          }      public   void   drawPage(Graphics2D   g2)
          {
              FontRenderContext   context   =   g2.getFontRenderContext();
                Font   f   =   new   Font( "宋体",   Font.PLAIN,   18);
                GeneralPath   clipShape   =   new   GeneralPath();            TextLayout   layout   =   new   TextLayout( "公司订购单 ",   f,   context);
                AffineTransform   transform  =   AffineTransform.getTranslateInstance(50,   18);
                Shape   outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "公司名: AAAA              日期:2010-10-10 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   50);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "品名             重量/斤      单价/元      金额/元 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   100);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "花生油1            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   150);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "花生油2            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   200);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);
                layout   =   new   TextLayout( "花生油3            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   250);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);
                layout   =   new   TextLayout( "花生油4            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   300);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);
                layout   =   new   TextLayout( "花生油5            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   350);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);
                layout   =   new   TextLayout( "花生油6            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   400);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "花生油7            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   450);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "花生油8            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   500);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "花生油9            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   550);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "花生油10            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   600);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "花生油11            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   650);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);            layout   =   new   TextLayout( "花生油12            2             2.2         4.4 ",   f,   context);
                transform =   AffineTransform.getTranslateInstance(0,   700);
                outline   =   layout.getOutline(transform);
                clipShape.append(outline,   false);                       g2.draw(clipShape);
                g2.clip(clipShape);            final   int   NLINES   =50;
                Point2D   p   =   new   Point2D.Double(0,   0);
                for   (int   i   =   0;   i   <   NLINES;   i++)
                {     double   x   =   (2   *   getWidth()   *   i)   /   NLINES;
                      double   y   =   (2   *   getHeight()   *   (NLINES   -   1   -   i))  /   NLINES;
                      Point2D   q   =   new   Point2D.Double(x,   y);
                      g2.draw(new   Line2D.Double(p,   q));
                }
          }
    }
    用上面的代码能打印,但是不知道怎么分页,望高手指点。
      

  6.   

    如果是windows平台,建议调windows API.
      

  7.   


    是windows平台,怎么调用windoss API   
      

  8.   

    参考这里
    http://www.iplab.cs.tsukuba.ac.jp/liuxj/jdk1.2/zh/docs/guide/2d/spec/j2d-print.fm3.html