Java实现打印功能

来源:互联网 发布:aipc 性能测试 知乎 编辑:程序博客网 时间:2024/06/05 08:12

主要调整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();       }}




原创粉丝点击