2024年4月15日发(作者:)

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

Java自从问世以来在各方面发展迅速,但是一直以来,打印输出是java最弱的方面。事实上,

java1.0不支持任何打印功能。Java1.1在 包里包含了一个叫做PrintJob的类,但

是这个类提供的打印功能十分粗糙和不可靠。当java1.2问世,它围绕 PrinterJob设计了一

个完整独立的打印机制(叫做java2D printing API),并且在包里定义了一

些新的类和接口。这些使得基于PrintJob打印机制(就是AWT printing)基本荒废,虽然

PrintJob从未被抨击而且至少在这篇文章里仍然是一个提供技术的类。

在J2SE1.3里当PrintJob的功能扩展到可以通过在包里的JobAttributes 和

PageAttributes两个类设定工程和页面的属性时发生了一些额外的改变。随着J2SE1.3的发

布,打印功能相应的得到了完善;但是在混合使用这两种完全不同的打印机制的时候仍然存在一

些问题。比如,这两种机制使用cs这个类的一个接口来展现打印内容,意味

着所有要打印的东西都必须用一张图片表示。另外,完善的PrintJob提供了很有限的工程相关

属性的设置;这两种机制都没有办法通过程序来选择目标打印机。

Java打印最大的改变来自于J2SE1.4的发布带来的Java打印服务API。这个第三代Java

打印支持接口突破了先前提到的局限性。因为新的API就是以前两种旧的打印机制定义的功能

函数的一个父集。

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

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

package ;

import ;

import ;

import cs;

import cs2D;

import rmat;

import ble;

import rException;

import ;

import vor;

import ntJob;

import xception;

import ervice;

import erviceLookup;

import Doc;

import ributeSet;

import cAttributeSet;

import intRequestAttributeSet;

import equestAttributeSet;

import izeName;

import nPane;

/**

* java定位打印,把打印内容打到指定的地方。

*

* @author lyb

*

*/

public class LocatePrint implements Printable {

private int PAGES = 0;

private String printStr;

/*

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

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

*/

public int print(Graphics gp, PageFormat pf, int page)

throws PrinterException {

Graphics2D g2 = (Graphics2D) gp;

nt(); // 设置打印颜色为黑色

if (page >= PAGES) // 当打印页号大于需要打印的总页数时,打印工作结束

return _SUCH_PAGE;

ate(geableX(), geableY());// 转换坐标,确定打印边界

Font font = new Font("宋体", , 24);// 创建字体

t(font);

// 打印当前页文本

int printFontCount = ();// 打印字数

int printFontSize = e();// Font 的磅值大小

float printX = 595 / 2; // 给定字符点阵,X页面正中

float printY = 842 / 2; // 给定字符点阵,Y页面正中

float printMX = printX - (printFontCount * printFontSize / 2);// 打印到正中间

float printMY = printY - printFontSize / 2;// 打印到正中间

ring(printStr, printMX, printMY); // 具体打印每一行文本,同时走纸移位

ring(printStr, printMX - printFontSize * printFontCount,

printMY + printFontSize); // 具体打印每一行文本,同时走纸移位

ring(printStr, printMX + printFontSize * printFontCount,

printMY + printFontSize); // 具体打印每一行文本,同时走纸移位

ring(printStr, printMX, printMY + printFontSize * 2); // 具体打印每一行文本,

同时走纸移位

return _EXISTS; // 存在打印页时,继续打印工作

}

// 打印内容到指定位置