java 套打

/**
        Program   Name:   PrintJob.java
        Author:   罗政
        Purpose:   实现java套打.
        Copyright   2002,   developer_luozheng
  */

import   java.awt.*;
import   java.awt.print.*;
import   java.awt.font.FontRenderContext;
import   javax.swing.*;
import   java.awt.print.Pageable;

public   class   PrintJob   implements   Printable   {
        private   int   PAGES=0;
        private   int   columns_Index=1;
        private   String[][]   printPageText;
        private   Accessdatabase   printObject=new   Accessdatabase();


    /**Graphics指明打印的图形环境;
      *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(rect.width> rect.height)//重新设置剪切矩形,以反映纸张是横向打印的.
                  pf.setOrientation(pf.LANDSCAPE);
                  g2.setClip((int)pf.getImageableX(),
                                        (int)pf.getImageableY(),
                                        (int)pf.getImageableWidth(),
                                        (int)pf.getImageableHeight());*/


              //System.out.print( "page=: "+page);
              //System.out.print( "PAGES= "+PAGES);

              if   (page   > =PAGES)   //当打印页号大于需要打印的总页数时,打印工作结束
                    return   Printable.NO_SUCH_PAGE;
              /*getImageableX(),getImageableY(),返回可打印区域左上角的X和Y坐标.
                  getImageableWidth(),getImageableHeight(),返回可打印区域宽度和高度.
              */
              System.out.print( "X= "+pf.getImageableX()+ "Y= "+pf.getImageableY()+ "Width= "+pf.getImageableWidth()+ "heigth= "+pf.getImageableHeight()+ "\n ");
              g2.translate(pf.getImageableX(),   pf.getImageableY());//转换坐标,确定打印边界
            //   g2.translate(130,130);


            //   g2.scale(0.5,0.5);//设置比例因子,将按此比列打印超大图形.


              drawCurrentPageText(g2,   pf,   page);   //调用drawCurrentPageText()打印当前页文本
              return   Printable.PAGE_EXISTS;   //存在打印页时,继续打印工作
            }


            /*打印指定页号的具体文本内容*/
        private   void   drawCurrentPageText(Graphics2D   g2,   PageFormat   pf,   int   page)
{

                  //注意此处数据是从访问数据库的javaBean中获得.
                  String   c_id       =printPageText[page+1][1];
                  String   c_type   =printPageText[page+1][2];
                  String   w_cause=printPageText[page+1][3];
                  String   h_money=printPageText[page+1][4];
                  String   w_date   =printPageText[page+1][5];

              //   System.out.print( "当前页的待打印文本内容:\n ");
                //获取默认字体及相应的尺寸
                //FontRenderContext   context   =   g2.getFontRenderContext();
                //Font   f   =   area.getFont();
                            //   g2.drawLine(0,0,453,0);
                              //g2.drawLine(0,8,500,8);
                            //   g2.drawLine(0,16,800,16);

                                g2.drawString(c_id,30,30);
                                g2.drawString(c_type,120,30);
                                g2.drawString(w_cause,180,30);
                                g2.drawString(h_money,30,90);
                                g2.drawString(w_date,100,90);//具体打印每一行文本,同时走纸移位

                }


        //完成具体的打印操作
      public     void   printTextAction(String   sql)
        {

                printObject.connectiondatabase(sql);
                printPageText=printObject.getArr();//连结数据库获得打印内容.

                //PrintJob   a=new   PrintJob();
                PAGES=printPageText.length-1;//查看打印内容是否为空.

                if   (printPageText.length> 0&&printPageText.length!=1)   //当打印内容不为空时
                {
                        //PAGES   =   getPagesCount(printStr);   //获取打印总页数
                      //   System.out.print( "打印总页数= "+PAGES+ "\n ");

                        PrinterJob   myPrtJob   =   PrinterJob.getPrinterJob();   //获取默认打印作业

                        PageFormat   pageFormat   =   myPrtJob.defaultPage();   //获取默认打印页面格式

                      /*   PageFormat   pageFormat=myPrtJob.validatePage(new   PageFormat());
                        Paper   paper=pageFormat.getPaper();
                        paper.setSize(300,200);
                        pageFormat.setPaper(paper);*///生成新的页面属性


                        //pageFormat=myPrtJob.pageDialog(pageFormat);//进行页面设置的对话框

                        /*if(rect.width> rect.height)
                        pageFormat.setOrientation(pageFormat.LANDSCAPE);//设置横向打印,注意须在print()方法中实现setClip()*/


                        myPrtJob.setPrintable(this,   pageFormat);   //设置打印工作

                        if   (myPrtJob.printDialog())   //显示打印对话框
                        {
                                try
                                {
                                        myPrtJob.print();   //进行每一页的具体打印操作

                                }
                                catch(PrinterException   pe)
                                {
                                        pe.printStackTrace();
                                }
                        }
                }
                else
                {
                        //如果打印内容为空时,提示用户打印将取消
                        System.out.print( "如果打印内容为空时,提示用户打印将取消\n ")   ;
                        JOptionPane.showConfirmDialog
(null,   "Sorry,   Printer   Job   is   Empty,   Print   Cancelled! ",   "Empty ",
JOptionPane.DEFAULT_OPTION,   JOptionPane.WARNING_MESSAGE);
                }
        }


        //   计算需要打印的总页数
        public     int     getPagesCount(   )
{
                    int   PAGES1;
                    PAGES1=printObject.getRows();
                    return   PAGES1;
}

    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值