//Source file: c:\\集益班列\\wxy\\jy\\cn\\net\\plt\\util\\PLTPrintApplet.javapackage cn.net.plt.util;import java.applet.Applet;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;
import java.awt.print.Paper;
import java.awt.print.PageFormat;
import java.awt.Graphics;
import java.awt.print.PrinterException;
import java.util.Enumeration;
import java.awt.Graphics2D;
import javax.swing.*;
import java.awt.event.*;
import java.net.*;/**
 * PLT打印控制类
 * @author 吴学友
 * @version 1.0
 */
public class PLTPrintApplet extends Applet implements Printable
{   /**
    * 左边距
    */
   private double lMargin;   /**
    * 右边距
    */
   private double rMargin;   /**
    * 上边距
    */
   private double tMargin;   /**
    * 下边距
    */
   private double bMargin;   /**
    * 用户自定义的打印格式
    */
   private PageFormat aPageFormat;   /**
    * 用户是否重新设置了页边距
    */
   private boolean marginReset;   /**
    * 用户是否设置了打印时的横纵向
    */
   private boolean directionReset;   /**
    * 打印实体s
    */
   private PLTPrintContentsEO contentLink;
  private JButton jButtonPrint = new JButton();
  private JButton jButtonSetContent = new JButton();
  private JButton jButtonMargin = new JButton();
  private JButton jButtonOrientation = new JButton();   public PLTPrintApplet()
   {
    this.lMargin=0;
    this.rMargin=0;
    this.tMargin=0;
    this.bMargin=0;
    this.aPageFormat=null;
    this.marginReset=false;
    this.directionReset=false;
    this.contentLink=null;
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }   }   /**
    * Access method for the contentLink property.
    *
    * @return   the current value of the contentLink property
    */
   public PLTPrintContentsEO getContentLink()
   {
      return contentLink;
   }   /**
    * Sets the value of the contentLink property.
    *
    * @param aContentLink the new value of the contentLink property
    */
   public void setContentLink(PLTPrintContentsEO aContentLink)
   {
      contentLink = aContentLink;
   }   /**
    * 打印setContents中设置的内容
    */
   public void printContent()
   {
      //tell whether there exists sth 2 print
      //if(this.contentLink==null)
      //  return;      try
      {
         java.awt.print.PrinterJob job =PrinterJob.getPrinterJob();
         PageFormat pf;         //whether PageFormat is customed set or not
         pf=job.defaultPage();
         if(this.marginReset)
         {
           Paper paper=new Paper();
           double xRatio=pf.getWidth()/21;
           double yRatio=pf.getHeight()/29.7;
           paper.setImageableArea(this.lMargin*xRatio,
                                  this.rMargin*yRatio,
                                  pf.getWidth()-this.rMargin*xRatio-this.lMargin*xRatio,
                                  pf.getHeight()-this.bMargin*yRatio-this.tMargin*yRatio);
           pf.setPaper(paper);
           this.marginReset=false;
         }         //whether orientation is reset or not
         if(this.directionReset)
         {
           pf.setOrientation(this.aPageFormat.getOrientation());
           this.directionReset=false;
         }         //pf.setPaper(this.aPageFormat.getPaper());
         job.setPrintable(this,pf);         if(job.printDialog())
         {
           job.print();
         }
       }
       catch(Exception e)
       {
         e.printStackTrace();
       }
   }   /**
    * @param graphics
    * @param pageFormat
    * @param pageIndex
    * @return int
    * @throws java.awt.print.PrinterException
    */
   public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException
   {
     if(pageIndex>=1) return Printable.NO_SUCH_PAGE;
     Graphics2D g2=(Graphics2D)graphics;     g2.translate(pageFormat.getImageableX(),pageFormat.getImageableY());     //get printer capabilities by dot
     double xPrinter=pageFormat.getWidth();
     double yPrinter=pageFormat.getHeight();     double xRatio=xPrinter/21;  //21 is the width of the paper
     double yRatio=yPrinter/29.7;//29.7 is the height of the paper
    // Enumeration contentEnum=this.contentLink.getContentList().elements();
    // while(contentEnum.hasMoreElements())
    // {
    //   PLTPrintContentEO aPrintContent=(PLTPrintContentEO)contentEnum.nextElement();
    //   g2.drawString(aPrintContent.getContent(),(int)(aPrintContent.getXPosition()*xRatio),(int)(aPrintContent.getYPosition()*yRatio));
    // }
     g2.drawString("whatya",(int)(3*xRatio),(int)(3*yRatio));     for(int i=0;i<500;i++)
       g2.drawLine(0,0,i,0);
     for(int j=0;j<500;j++)
       g2.drawLine(0,0,0,j);    return Printable.PAGE_EXISTS;
   }   /**
    * 设置页边距
    * @param left - 左边距
    * @param right - 右边距
    * @param top - 上边距
    * @param bottom - 上边距
    */
   public void setMargin(double left, double right, double top, double bottom)
   {
     this.lMargin=left;
     this.rMargin=right;
     this.tMargin=top;
     this.bMargin=bottom;
     this.marginReset=true;
   }   /**
    * 设置横纵向
    * @param orient - 横纵向
    */
   public void setOrientation(int orient)
   {
     this.aPageFormat.setOrientation(orient);
     this.directionReset=true;
   }
  private void jbInit() throws Exception
  {
    /*UIManager.put("Label.font",new Font("宋体"));
    UIManager.put("Button.font",new Font("...."));
    UIManager.put("Menu.font",new Font("...."));
    UIManager.put("MenuItem.font",new Font("...."));*/
    jButtonPrint.setText("打印");
    jButtonPrint.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        jButtonPrint_actionPerformed(e);
      }
    });
    jButtonSetContent.setText("设置打印内容");
    jButtonSetContent.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        jButtonSetContent_actionPerformed(e);
      }
    });
    jButtonMargin.setText("设置页边距");
    jButtonMargin.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        jButtonMargin_actionPerformed(e);
      }
    });
    jButtonOrientation.setText("设置横纵向");
    jButtonOrientation.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        jButtonOrientation_actionPerformed(e);
      }
    });
    this.add(jButtonPrint, null);
    this.add(jButtonSetContent, null);
    this.add(jButtonMargin, null);
    this.add(jButtonOrientation, null);
  }  void jButtonPrint_actionPerformed(ActionEvent e)
  {
    this.printContent();
  }  void jButtonSetContent_actionPerformed(ActionEvent e)
  {
//    this.setContentLink();
  }  void jButtonMargin_actionPerformed(ActionEvent e)
  {
    this.setOrientation(1);
  }  void jButtonOrientation_actionPerformed(ActionEvent e)
  {
    this.setMargin(3,3,3,3);
  }
}
这个例子实现了套打,在左3厘米,上3厘米处输出一个字符串

解决方案 »

  1.   

    谢谢你,lifeis!我的意思是从数据库中取出一些数据,如:
       姓名:chj    年龄:
       性别:
    是在每行都设置它的位置还是使用循环如果这些数据是不规则怎办?
      

  2.   

    谢谢你,lifeis!我的意思是从数据库中取出一些数据,如:
       姓名:chj    年龄:
       性别:
    是在每行都设置它的位置还是使用循环如果这些数据是不规则怎办?
      

  3.   

    谢谢你,lifeis!我不是男生。