java做这方面的应用不是强项,实现起来有难度。如果要做,我可以提点思路:
  1、java1.4 引入了打印的API
  2、页面打印
  3、将内容转成其它的格式,如PDF、EXCEL等进行打印
希望能帮到你。

解决方案 »

  1.   

    直接用java实现打印比较困难我参与的一些项目中是把数据用java生成PDF文件然后在pdf里边打印的
      

  2.   

    基本思路如下:首先我们需要实现Printable接口,然后按照每页最多54行的格式计算共需要打印多少页,当打印文本的按钮被点击时,执行相应的打印动作。打印文本的具体操作可通过Graphics2D的drawString方法来实现。1、实现Printable接口/*Graphic指明打印的图形环境;PageFormat指明打印页格式(页面大小以点为计量单位,
    1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595×842点);page指明页号*/
    public int print(Graphics g, PageFormat pf, int page) throws PrinterException
    {
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.black); //设置打印颜色为黑色
    if (page >= PAGES) //当打印页号大于需要打印的总页数时,打印工作结束
    return Printable.NO_SUCH_PAGE;
        g2.translate(pf.getImageableX(), pf.getImageableY());//转换坐标,确定打印边界
        drawCurrentPageText(g2, pf, page); //打印当前页文本
    return Printable.PAGE_EXISTS; //存在打印页时,继续打印工作
    }
    /*打印指定页号的具体文本内容*/
        private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page)
    {
    String s = getDrawText(printStr)[page];//获取当前页的待打印文本内容
            //获取默认字体及相应的尺寸
    FontRenderContext context = g2.getFontRenderContext();
            Font f = area.getFont();
            String drawText;
            float ascent = 16;  //给定字符点阵
            int k, i = f.getSize(), lines = 0;
            while(s.length() > 0 && lines < 54) //每页限定在54行以内
            {
             k = s.indexOf('\n'); //获取每一个回车符的位置
                if (k != -1)  //存在回车符
                {
                 lines += 1; //计算行数
                    drawText = s.substring(0, k); //获取每一行文本
                    g2.drawString(drawText, 0, ascent); //具体打印每一行文本,同时走纸移位
                    if (s.substring(k + 1).length() > 0)
                    {
                     s = s.substring(k + 1); //截取尚未打印的文本
                        ascent += i; 
                    }
                }
                else //不存在回车符
                {
                 lines += 1; //计算行数
                    drawText = s; //获取每一行文本
                    g2.drawString(drawText, 0, ascent); //具体打印每一行文本,同时走纸移位
                    s = ""; //文本已结束
                }
            }
        }
    /*将打印目标文本按页存放为字符串数组*/
    public String[] getDrawText(String s)
        {
            String[] drawText = new String[PAGES];//根据页数初始化数组
            for (int i = 0; i < PAGES; i++)
                drawText[i] = ""; //数组元素初始化为空字符串

            int k, suffix = 0, lines = 0;
            while(s.length() > 0)
            {
                if(lines < 54) //不够一页时
                {
                    k = s.indexOf('\n');
                    if (k != -1) //存在回车符
                    {
                        lines += 1; //行数累加
    //计算该页的具体文本内容,存放到相应下标的数组元素
                        drawText[suffix] = drawText[suffix] + s.substring(0, k + 1);
                        if (s.substring(k + 1).length() > 0)
                            s = s.substring(k + 1);
                    }
                    else
                    {
                        lines += 1; //行数累加
    //将文本内容存放到相应的数组元素
                        drawText[suffix] = drawText[suffix] + s; 
                        s = "";
                    }
                }
                else //已满一页时
                {
                    lines = 0; //行数统计清零
                    suffix++; //数组下标加1
                }
            }
            return drawText;
        }

      

  3.   

    编辑器能编辑文本,图形和表格.....  编辑器的打印和预览功能,  SWING PRINT.THANKS!!
      

  4.   

    实现这个打印如果不考虑图片被截断的情况,其实是很简单的你只要调用该pane的paint方法就可以了