在Java内,实现打印要用到两个类:PrinteJob 和 实现Printable 接口的类。
打印的关键在于Printable接口的Print方法的实现。你可以把你要打印的文本
全部画到图形环境上,再打印。看看下面的代码,但愿能给你一些帮助: 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()));      drawPage(g2);
      return Printable.PAGE_EXISTS;
   }   public void drawPage(Graphics2D g2)
   {  FontRenderContext context = g2.getFontRenderContext();
      Font f = new Font("Serif", Font.PLAIN, 72);
      GeneralPath clipShape = new GeneralPath();      TextLayout layout = new TextLayout("Hello", f, context);
      AffineTransform transform
         = AffineTransform.getTranslateInstance(0, 72);
      Shape outline = layout.getOutline(transform);
      clipShape.append(outline, false);      layout = new TextLayout("World", f, context);
      transform
         = AffineTransform.getTranslateInstance(0, 144);
      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));
      }
   }

解决方案 »

  1.   

    我也碰到一样的问题,我把整页纸的内容都打全了,但是每次打印机都要重新换一页纸,而且什么都不打。我的程序和上面差不多,PEgirl用的是针式打印机么?我用的是EPSON LQ300K.打印纸格式什么的都设置好了,但就是程序里面解决不了。
      

  2.   

    to wzc740116(初学者) :
    如何打印我已经实现,我的问题是如何多次调print方法仍然可以在一页上打印而不是每调一次print打印机就换一次纸,因为我每次只用打印一行数据,比如说早上8:00在一张纸上打了第一行,然后晚上8:00我需要在同一张纸上打印第二行,如何实现呢?
      

  3.   

    why not 用专业的报表省时省力啊..?
    Style/Report
      

  4.   

    实现Printable 接口的类:是哪个???
      

  5.   

    如果你是要在连本地PC的打印机上输出的话,可以不使用printable ,直接对PC的并口输出,就能达到你要的效果。如果不是,你可以在方法:
    print(Graphics g, PageFormat format, int pageIndex) 中对pageIndex 参数和方法的返回值 return Printable.PAGE_EXISTS 做修改。 改变方法的返回值可能会使得在下次print被调用时,影响pageIndex 的值。我没试过,你试试吧。
      

  6.   

     哦, 有个急问题?
     UNIX环境生成报表文件, 由另一个程序启动命令行命令打印这个报表 每页要有表头什么的, 要按一定行数换页. 如何去实现?  我现在的做法是:  在这个TXT的报表文件中, 计算行数, 够一页的时候, 就写表头的信息 所以. 用VI打开的时候, 可以看到象报表的样子,  有PAGE 页号什么的, 但不知道打印的时候会怎么样,客户要求用换页符,  我的方法可以吗?  不行的话,有什么其他的方法 ?
     在线等待 ..................