public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {
       System.out.println("pageIndex="+pageIndex);
       Component c = null;
      switch(pageIndex){
         case 0:
//我在这里处理gra对象的相应处理,画出了一个图像
         return PAGE_EXISTS;
         default:
         return NO_SUCH_PAGE;
      }
现在的问题是我调用打印功能:
    book.append(new PrintTest(), pf);
     PrinterJob job = PrinterJob.getPrinterJob();      
     job.setPageable(book);
但是new PrintTest()实例了有什么用?我打印出来的是白纸啊!在什么地方进行打印图像的设置呢?有没有不要利用Frame或者Compent的例子?java打印PrinterJob Printable

解决方案 »

  1.   

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.Rectangle2D;
    import java.awt.print.PageFormat;
    import java.awt.print.Paper;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;public class PrintableDemo implements Printable {
      public int print(Graphics g, PageFormat pf, int pageIndex) {
        if (pageIndex != 0)
          return NO_SUCH_PAGE;
        Graphics2D g2 = (Graphics2D) g;
        g2.setFont(new Font("Serif", Font.PLAIN, 36));
        g2.setPaint(Color.black);
        g2.drawString("Java Source and Support", 100, 100);
        Rectangle2D outline = new Rectangle2D.Double(pf.getImageableX(), pf
            .getImageableY(), pf.getImageableWidth(), pf
            .getImageableHeight());
        g2.draw(outline);
        return PAGE_EXISTS;
      }
      public static void main(String[] args) {
        PrinterJob pj = PrinterJob.getPrinterJob();    PageFormat pf = pj.defaultPage();
        Paper paper = new Paper();
        double margin = 36; // half inch
        paper.setImageableArea(margin, margin, paper.getWidth() - margin * 2,
            paper.getHeight() - margin * 2);
        pf.setPaper(paper);    pj.setPrintable(new PrintableDemo(), pf);
        if (pj.printDialog()) {
          try {
            pj.print();
          } catch (PrinterException e) {
            System.out.println(e);
          }
        }
      }
    }