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; // 存在打印页时,继续打印工作
}
// 打印内容到指定位置


发布评论