java 定位输出_java定位打印(如:超市,票据打印)

Java自从问世以来在各方面发展迅速,但是一直以来,打印输出是java最弱的方面。事实上,java1.0不支持任何打印功能。Java1.1在 java.awt包里包含了一个叫做PrintJob的类,但是这个类提供的打印功能十分粗糙和不可靠。当java1.2问世,它围绕 PrinterJob设计了一个完整独立的打印机制(叫做java2D printing API),并且在java.awt.print包里定义了一些新的类和接口。这些使得基于PrintJob打印机制(就是AWT printing)基本荒废,虽然PrintJob从未被抨击而且至少在这篇文章里仍然是一个提供技术的类。

在J2SE1.3里当PrintJob的功能扩展到可以通过在java.awt包里的JobAttributes 和PageAttributes两个类设定工程和页面的属性时发生了一些额外的改变。随着J2SE1.3的发布,打印功能相应的得到了完善;但是在混合使用这两种完全不同的打印机制的时候仍然存在一些问题。比如,这两种机制使用java.awt.Graphics这个类的一个接口来展现打印内容,意味着所有要打印的东西都必须用一张图片表示。另外,完善的PrintJob提供了很有限的工程相关属性的设置;这两种机制都没有办法通过程序来选择目标打印机。

Java打印最大的改变来自于J2SE1.4的发布带来的Java打印服务API。这个第三代Java打印支持接口突破了先前提到的局限性。因为新的API就是以前两种旧的打印机制定义的功能函数的一个父集。

下面是我通过这些API写的定位打印示例代码,希望对用java实现打印的朋友有一定的帮助!

在CentOS4.4,jdk1.6下测试通过。

4f1150b881333f12a311ae9ef34da474.pngimportjava.awt.Color; 

4f1150b881333f12a311ae9ef34da474.pngimportjava.awt.Font; 

4f1150b881333f12a311ae9ef34da474.pngimportjava.awt.Graphics; 

4f1150b881333f12a311ae9ef34da474.pngimportjava.awt.Graphics2D; 

4f1150b881333f12a311ae9ef34da474.pngimportjava.awt.print.PageFormat; 

4f1150b881333f12a311ae9ef34da474.pngimportjava.awt.print.Printable; 

4f1150b881333f12a311ae9ef34da474.pngimportjava.awt.print.PrinterException; 

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.Doc; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.DocFlavor; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.DocPrintJob; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.PrintException; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.PrintService; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.PrintServiceLookup; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.SimpleDoc; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.attribute.DocAttributeSet; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.attribute.HashDocAttributeSet; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.attribute.HashPrintRequestAttributeSet; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.attribute.PrintRequestAttributeSet; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.print.attribute.standard.MediaSizeName; 

4f1150b881333f12a311ae9ef34da474.pngimportjavax.swing.JOptionPane; 

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif/** *//**d18c02628675d0a2c816449d98bda930.png* java定位打印,把打印内容打到指定的地方。 

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png*@authorlyb 

d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png*/1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassLocatePrintimplementsPrintable9b8a8a44dd1c74ae49c20a7cd451974e.png

d18c02628675d0a2c816449d98bda930.pngprivateintPAGES=0; 

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.pngprivateString printStr; 

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif/**//*d18c02628675d0a2c816449d98bda930.png     * Graphic指明打印的图形环境;PageFormat指明打印页格式(页面大小以点为计量单位, 

d18c02628675d0a2c816449d98bda930.png     * 1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点);page指明页号 

ecedf933ec37d714bd4c2545da43add2.png*/d18c02628675d0a2c816449d98bda930.pngpublicintprint(Graphics gp, PageFormat pf,intpage) 

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifthrowsPrinterException9b8a8a44dd1c74ae49c20a7cd451974e.png

d18c02628675d0a2c816449d98bda930.png        Graphics2D g2=(Graphics2D) gp; 

d18c02628675d0a2c816449d98bda930.png        g2.setPaint(Color.black);//设置打印颜色为黑色d18c02628675d0a2c816449d98bda930.pngif(page>=PAGES)//当打印页号大于需要打印的总页数时,打印工作结束d18c02628675d0a2c816449d98bda930.pngreturnPrintable.NO_SUCH_PAGE; 

d18c02628675d0a2c816449d98bda930.png        g2.translate(pf.getImageableX(), pf.getImageableY());//转换坐标,确定打印边界d18c02628675d0a2c816449d98bda930.pngFont font=newFont("宋体", Font.PLAIN,24);//创建字体d18c02628675d0a2c816449d98bda930.pngg2.setFont(font); 

d18c02628675d0a2c816449d98bda930.png//打印当前页文本d18c02628675d0a2c816449d98bda930.pngintprintFontCount=printStr.length();//打印字数d18c02628675d0a2c816449d98bda930.pngintprintFontSize=font.getSize();//Font 的磅值大小d18c02628675d0a2c816449d98bda930.pngfloatprintX=595/2;//给定字符点阵,X页面正中d18c02628675d0a2c816449d98bda930.pngfloatprintY=842/2;//给定字符点阵,Y页面正中d18c02628675d0a2c816449d98bda930.pngfloatprintMX=printX-(printFontCount*printFontSize/2);//打印到正中间d18c02628675d0a2c816449d98bda930.pngfloatprintMY=printY-printFontSize/2;//打印到正中间d18c02628675d0a2c816449d98bda930.pngg2.drawString(printStr, printMX, printMY);//具体打印每一行文本,同时走纸移位d18c02628675d0a2c816449d98bda930.pngg2.drawString(printStr, printMX-printFontSize*printFontCount, 

d18c02628675d0a2c816449d98bda930.png                printMY+printFontSize);//具体打印每一行文本,同时走纸移位d18c02628675d0a2c816449d98bda930.pngg2.drawString(printStr, printMX+printFontSize*printFontCount, 

d18c02628675d0a2c816449d98bda930.png                printMY+printFontSize);//具体打印每一行文本,同时走纸移位d18c02628675d0a2c816449d98bda930.pngg2.drawString(printStr, printMX, printMY+printFontSize*2);//具体打印每一行文本,同时走纸移位d18c02628675d0a2c816449d98bda930.pngreturnPrintable.PAGE_EXISTS;//存在打印页时,继续打印工作ecedf933ec37d714bd4c2545da43add2.png}d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//打印内容到指定位置97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicvoidprintContent()9b8a8a44dd1c74ae49c20a7cd451974e.png

d18c02628675d0a2c816449d98bda930.png        printStr="打印测试内容";//获取需要打印的目标文本d18c02628675d0a2c816449d98bda930.pngif(printStr!=null&&printStr.length()>0)//当打印内容不为空时97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png

d18c02628675d0a2c816449d98bda930.png            PAGES=1;//获取打印总页数 

d18c02628675d0a2c816449d98bda930.png//指定打印输出格式d18c02628675d0a2c816449d98bda930.pngDocFlavor flavor=DocFlavor.SERVICE_FORMATTED.PRINTABLE; 

d18c02628675d0a2c816449d98bda930.png//定位默认的打印服务d18c02628675d0a2c816449d98bda930.pngPrintService printService=PrintServiceLookup 

d18c02628675d0a2c816449d98bda930.png                    .lookupDefaultPrintService(); 

d18c02628675d0a2c816449d98bda930.png//创建打印作业d18c02628675d0a2c816449d98bda930.pngDocPrintJob job=printService.createPrintJob(); 

d18c02628675d0a2c816449d98bda930.png//设置打印属性d18c02628675d0a2c816449d98bda930.pngPrintRequestAttributeSet pras=newHashPrintRequestAttributeSet(); 

d18c02628675d0a2c816449d98bda930.png//设置纸张大小,也可以新建MediaSize类来自定义大小d18c02628675d0a2c816449d98bda930.pngpras.add(MediaSizeName.ISO_A4); 

d18c02628675d0a2c816449d98bda930.png            DocAttributeSet das=newHashDocAttributeSet(); 

d18c02628675d0a2c816449d98bda930.png//指定打印内容d18c02628675d0a2c816449d98bda930.pngDoc doc=newSimpleDoc(this, flavor, das); 

d18c02628675d0a2c816449d98bda930.png//不显示打印对话框,直接进行打印工作97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.giftry9b8a8a44dd1c74ae49c20a7cd451974e.png

d18c02628675d0a2c816449d98bda930.png                job.print(doc, pras);//进行每一页的具体打印操作97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif}catch(PrintException pe)9b8a8a44dd1c74ae49c20a7cd451974e.png

d18c02628675d0a2c816449d98bda930.png                pe.printStackTrace(); 

ecedf933ec37d714bd4c2545da43add2.png            }97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif        }else9b8a8a44dd1c74ae49c20a7cd451974e.png

d18c02628675d0a2c816449d98bda930.png//如果打印内容为空时,提示用户打印将取消d18c02628675d0a2c816449d98bda930.pngJOptionPane.showConfirmDialog(null, 

d18c02628675d0a2c816449d98bda930.png"Sorry, Printer Job is Empty, Print Cancelled!", 

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png"Empty", JOptionPane.DEFAULT_OPTION, 

d18c02628675d0a2c816449d98bda930.png                    JOptionPane.WARNING_MESSAGE); 

ecedf933ec37d714bd4c2545da43add2.png        }ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicstaticvoidmain(String[] args)9b8a8a44dd1c74ae49c20a7cd451974e.png

d18c02628675d0a2c816449d98bda930.png        LocatePrint lp=newLocatePrint(); 

d18c02628675d0a2c816449d98bda930.png        lp.printContent(); 

ecedf933ec37d714bd4c2545da43add2.png    }d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java是一种面向对象编程语言,拥有强大的打印和网络编程功能。打印票据和使用Socket进行网络通信是Java编程中常见且重要的功能之一。 在Java打印票据,通常可以使用Java打印库中的JasperReports或iText等第三方库。这些库可以帮助开发人员快速生成、设计和打印复杂而庞大的票据,同时提供丰富的定制功能。开发人员可以通过这些库创建报表模板,并将数据源与模板连接,以生成所需的打印输出格式。 使用Java Socket进行网络通信则需要实现客户端和服务器之间的连接。开发人员可以使用Java Socket API中的socket、ServerSocket和DatagramSocket等类来实现这些连接。Socket通常用于建立TCP连接,而DatagramSocket用于建立UDP连接。 在使用Java Socket进行网络通信时,需要考虑到通信协议、消息格式、端口号等方面的细节,以确保数据的安全传输。开发人员还可以在Socket之上使用SSL/TLS协议来加密通信内容,进一步保护网络安全。 总的来说,Java打印票据和使用Socket进行网络通信方面具有强大的能力,开发人员可以利用这些功能来构建高质量、安全可靠的应用程序。 ### 回答2: Java打印票据Socket是一种将Java技术与网络通信技术相结合的应用方式。通过这种方式,可以在网络上实现打印票据的功能,具有方便、高效、安全等多种优势。 首先,Java打印票据Socket利用Java的网络编程技术,从服务器获取打印票据的信息,然后将其传输到打印机进行打印,这样可以避免了在本地进行复杂的设置和操作,从而提高了效率。 其次,Java打印票据Socket的特点是具有安全性和稳定性,它可以通过设置协议、安全认证、数据加密等方式来保护数据的安全性,同时可以通过错误处理、重连机制、超时控制等方式保证网络通信的稳定性。 最后,Java打印票据Socket是一种灵活的应用方式,可以适应各种应用环境。无论是在小型企业、零售店铺还是大型商场、展览会场,都可以通过Java打印票据Socket实现打印票据的功能。 总之,Java打印票据Socket是一种优秀的应用方式,可以提高打印效率、保证打印安全、稳定性,并适应各种应用环境的要求。 ### 回答3: Java打印票据可以通过Socket实现。首先,需要在客户端程序中创建Socket连接,连接到打印机所在的IP地址和端口号。接着,将要打印的文本内容通过Socket传输到打印机端,然后在打印机端进行解析并打印出来。 在打印机端,需要编写一个Socket服务器程序来监听客户端的连接请求,接收客户端传输的文本内容,并将文本写入到打印机的缓存中。当缓存区中的文本达到打印机的缓存大小时,打印机就会打印出文本内容。 需要注意的是,在打印票据时,需要设置打印机的一些参数,如字体大小、字体样式、对齐方式等,以保证打印结果符合要求。 在实现中,可以使用Java自带的Socket类或者第三方库如Netty来处理Socket通信和打印机驱动的编写。此外,还需要了解一些Socket编程和打印机驱动的知识,以确保程序能够正确地实现打印功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值