Java实现打印功能

38 篇文章 0 订阅

主要调整x,y坐标的变化来布局(记住类必须implements Printable接口

public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {  
	       
		Component c = null;  
        // 转换成Graphics2D  
        Graphics2D g2 = (Graphics2D) gra;  
        // 设置打印颜色为黑色  
        g2.setColor(Color.black);  
        // 打印起点坐标  
        double x = pf.getImageableX();//返回与此 PageFormat 相关的 Paper 对象的可成像区域左上方点的 x 坐标。  
        double y = pf.getImageableY(); 
        switch (pageIndex) {  
        case 0:  
            //新建一个打印字体样式(1.字体名称,2.样式(加粗).3字号)
            Font font = new Font("微软雅黑", Font.PLAIN, 14);  
            //给g2设置字体  
            g2.setFont(font);
            //保存虚线的参数(线长度,缺口长度)
            float[] dash1 = { 2.0f,0.0f };  
            // 设置打印线的属性。1.线宽 2、3、不知道,4、空白的宽度,5、线,6、偏移量  
            g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f));  
            float fontHeigth1 = font.getSize2D();  
            //标题
            String str1 ="利息支出凭证";  
            g2.drawString(str1, (int)x+60, (int)y + fontHeigth1+60);  
            //新建一个字体样式
            Font font2 = new Font("微软雅黑", Font.PLAIN, 9);  
            g2.setFont(font2);// 设置字体  
            // (刷新字体样式)设置打印线的属性。1.线宽 2、3、不知道,4、空白的宽度,5、线,6、偏移量  
            g2.setStroke(new BasicStroke(0.7f, BasicStroke.CAP_BUTT,  
                    BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f));  
            float fontHeigth2 = (int)font.getSize2D();  
              
            int tempHeight = (int) (fontHeigth1*2+10);  
            /*
             * 添加文本
             * */
            //创建一个文本对象
            String str3 ="单据编号:201745545623266656565655454";
            //添加到g2的指定位置
            g2.drawString(str3, (int)x+250, (int)y + fontHeigth2+10 +tempHeight);  
            /*
             * 画线
             * */
            //创建一条线对象
            Line2D lin = new Line2D.Float((int)x, (int)y + fontHeigth2*3+10+8 +tempHeight, (int)x, (int)y + fontHeigth2*10+20+4 +tempHeight);
            //把线添加到g2里面
            g2.draw(lin);
            
            //放置图片(二维码)
            Image src = Toolkit.getDefaultToolkit().getImage("D:\\1.jpg");  
            //把图片添加到g2中(1,图片来源,2.x坐标,3.y坐标,4.宽,5.高)
            g2.drawImage(src, (int) x+440, (int)( y + fontHeigth2 +tempHeight),50,50, c);//打印条形码  
            int img_Height = src.getHeight(c);  
            int img_width = src.getWidth(c);  
	  
	            return PAGE_EXISTS;  
	        default:  
	            return NO_SUCH_PAGE; 
	  
	      }  
	         
	   }  
	//测试
	public static void main(String[] args) {
		//新建一个文档   
	    Book book = new Book();  
	    //设置成竖打   
	    PageFormat pf = new PageFormat();    
	    pf.setOrientation(PageFormat.PORTRAIT);  
	    //通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。  
	    Paper p = new Paper();  
	    p.setSize(595, 842);//纸张大小   
	    p.setImageableArea(40,10, 595,842);//A4(595 X 842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72  
	    pf.setPaper(p);  
	    //把 PageFormat和 Printable添加到文档中,组成一个页面    
	    book.append(new Test3(), pf); 
	     //获取打印服务对象  
	     PrinterJob job = PrinterJob.getPrinterJob();        
	     // 设置打印类   
	     job.setPageable(book);  
	     try {  
	         //可以用printDialog显示打印对话框,在用户确认后打印;
	    	 //不加这个可以不提示直接用job.print();函数直接打印  
	         boolean a=job.printDialog();    
	         if(a)
	         {   //打印         
	             job.print();   
	         }else{
	        	 //取消
	             job.cancel();
	         }
	     } catch (PrinterException e) {  
	         e.printStackTrace();  
	     }
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值