cp 为printable类,其写法可参考
http://www-900.ibm.com/developerWorks/cn/java/l-javaprint/index.shtml
(我将里面的pagescount部分移出到本类)public void startPrint()  throws PrinterException{
     int PAGES = 0;
     if (printStr != null && printStr.length() > 0) //当打印内容不为空时
      {
            PAGES = getPagesCount(printStr); //获取打印总页数
            cp.setPAGES(PAGES);
            PrinterJob myPrtJob = PrinterJob.getPrinterJob(); //获取默认打印作业
            PageFormat pageFormat = myPrtJob.defaultPage(); //获取默认打印页面格式
            .......
            myPrtJob.setPrintable(cp,pageFormat); //设置打印工作
            cp.setPrintStr(printStr);            if (myPrtJob.printDialog()) //显示打印对话框,如果删掉就不会弹出对话框
            {
                try{
                    myPrtJob.print(); //进行每一页的具体打印操作
                }catch(PrinterException pe) {
                    throw new PrinterException("PrinterException: "+ pe.toString ());
                }
                System.exit(0);
             }
        }
        else {
            System.out.println("无打印内容!");
        }
   }

解决方案 »

  1.   

    还没搞定?
    给你printable类(根据那篇文章修改)import java.awt.*;
    import java.awt.font.*;
    import java.awt.print.*;
    import java.awt.print.Printable;public class CPrintable implements Printable{
      private int PAGES = 0;
      private int PAGEROW = 0;
      private String printStr;
      private Font font;//字体
      private float ASCENT; //给定字符点阵
      private int ROWHEIGHT;  public void setPAGEROW(int n){
        this.PAGEROW = n;
      }  public void setFont(Font f){
        this.font = f;
      }  public void setPAGES(int n){
        this.PAGES = n;
      }  public void setPrintStr(String str){
        this.printStr = str;
      }  public void setAscent(float h){
        this.ASCENT = h;
      }  public void setRowHeight(int h){
        this.ROWHEIGHT = h;
      }  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];
            String drawText;
            float ascent=ASCENT;
            int k, i = ROWHEIGHT, lines = 0;  //i 为行距        while(s.length() > 0 && lines < PAGEROW)
            {
                k = s.indexOf('\n');
                if (k != -1)
                {
                    lines += 1;
                    drawText = s.substring(0, k);
                    g2.setFont(font);
                    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 < PAGEROW)
                {
                    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++;
                }
            }
            return drawText;
        }}