博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java行距getprinter_java 打印 类似打印存折的打印
阅读量:5150 次
发布时间:2019-06-13

本文共 3885 字,大约阅读时间需要 12 分钟。

java 打印 类似打印存折的打印

前段时间由于需要做了个打印,主要是打印学生证。

需求很简单,就是在规定的坐标点打印规定的内容即可。

为了实现,却费尽了周折,不过还好,在大家的帮助下,终于实现了最终想要的功能。

其代码如下:

package yourPackage;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.print.Book;

import java.awt.print.PageFormat;

import java.awt.print.Paper;

import java.awt.print.Printable;

import java.awt.print.PrinterException;

import java.awt.print.PrinterJob;

import java.util.List;

import javax.print.PrintService;

import javax.print.PrintServiceLookup;

import javax.print.attribute.HashAttributeSet;

import javax.print.attribute.standard.PrinterName;

/**

* 打印服务程序

* @author Administrator

*

*/

@SuppressWarnings(“unchecked”)

public class PrintServiceTest implements Printable {

private String printInfo; // 打印内容

private int rowSpace; // 打印行距

private int rowNum = 0; // 打印行数 从0开始算起

private int[] regNums ; // 注册序号的集合,得到他就可以算出要打多少行,和每行Y轴的坐标

/**

* 下面的数组中封装的是数组对象,数组对象中封装了三个子对象,一个被打印的内容

* 一个是被打印内容的X坐标,最后一个是被打印内容的Y坐标,注意坐标的单位是 像素(点)

* 一点 = 1/72英寸, 一英寸 = 25.4mm

*/

private List infoList;

private int printNum ; // 打印份数 从0开始算起

public int[] getRegNums() {

return regNums;

}

public List getInfoList() {

return infoList;

}

public void setInfoList(List infoList) {

this.infoList = infoList;

}

public void setRegNums(int[] regNums) {

this.regNums = regNums;

}

public int getPrintNum() {

return printNum;

}

public void setPrintNum(int printNum) {

this.printNum = printNum;

}

public int getRowSpace() {

return rowSpace;

}

public void setRowSpace(int rowSpace) {

this.rowSpace = rowSpace;

}

public String getPrintInfo() {

return printInfo;

}

public void setPrintInfo(String printInfo) {

this.printInfo = printInfo;

}

public int getRowNum() {

return rowNum;

}

public void setRowNum(int rowNum) {

this.rowNum = rowNum;

}

/**

* 只是打印写死的内容,但也可以根据上面的infoList来组织多条内容。

* 注意:此方法并没有把多余一页的打印情况考虑进去,即每个打印都会在一页中。

*/

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)

throws PrinterException {

// 打印规定的份数

if(this.getPrintNum()!=0) {

// pageIndex 的值是从零开始的

if(pageIndex>(this.getPrintNum()-1)) {

return Printable.NO_SUCH_PAGE;

}

} else {

// pageIndex 的值是从0开始的,下面已经设置了打印一份,打印完一份时pageIndex就增1,所以当大于0后,即第一份已经完成

if(pageIndex>0) {

return Printable.NO_SUCH_PAGE;

}

}

Graphics2D g2 = (Graphics2D) graphics;

// g2.setPaint(Color.black); // 设置颜色

g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

Font font = new Font(“宋体”, Font.BOLD, 11);

g2.setFont(font);

g2.drawString(“—————–测试打印坐标为:X=50,Y=50———”, 50, 10);

g2.drawString(“要打印的第一行”, 0, 20);

return Printable.PAGE_EXISTS; // 只有存在此页的时候,才会执行打印的方法

}

/**

* 打印方法

*/

public void print() throws PrinterException{

PrinterJob printerJob = PrinterJob.getPrinterJob();

Book book = new Book();

PageFormat pf = printerJob.defaultPage(); // 得到printerJob 的默认页面格式。

Paper p = pf.getPaper();// 得到默认页

// System.out.println(“页面的 宽度”+p.getWidth()+”;页面的高度:”+p.getHeight());

/*

* 要注意的是:下面的设置是去掉了页边距的设置,如果不考虑页边距的影响,可以不做此操作。

*/

p.setImageableArea(0, 0, p.getImageableWidth()+70, p.getImageableWidth()+70);

// System.out.println(“可成像的宽度”+p.getImageableWidth()+”;可成像的高度:”+p.getImageableHeight());

pf.setPaper(p);

// book.append(this, pf);

//

// printerJob.setPageable(book);

// 查找此环境的默认printservice

PrintService ps = PrintServiceLookup.lookupDefaultPrintService();

if (ps == null) {

System.out.println(“无法找到打印机:”);

return;

}

printerJob.setPrintService(ps);

// printerJob.pageDialog(pf); // 设置打印页的属性

// printerJob.printDialog(); // 设置打印机的属性

printerJob.setCopies(1); // 只打印一份

printerJob.setPrintable(this,pf);

printerJob.print();

}

public static void main(String[] args) {

PrintServiceTest myprinttest = new PrintServiceTest();

try {

myprinttest.print();

} catch (PrinterException e) {

e.printStackTrace();

}

}

/**

* 毫米转换为点数 (取整)

* @param mm 毫米数

* @return 点数

*/

public static int returnPointNo(int mm)

{

return 72*mm/25 ;

}

}

上面的被注释掉的部分,可以释放开,以查看效果,此代码用到的服务器上默认的打印机,当然也可以根据需求来使用指定名称的打印机。

转载地址:http://hodnv.baihongyu.com/

你可能感兴趣的文章
C语言 链队列基本操作
查看>>
OO学习总结与体会
查看>>
阿狸的打字机(AC自动机+fail树)
查看>>
hibernate之一对多
查看>>
命令对象SqlCommand(二)执行命令,返回单个记录
查看>>
iOS 项目的目录结构能看出你的开发经验
查看>>
学习C#语言
查看>>
python pip安装和卸载,pycharm模块自动安装和卸载
查看>>
Android基础知识
查看>>
HttpClient使用代理IP
查看>>
IIS6.0 开启Gzip与PHP Gzip
查看>>
vivo输入法 需求分析
查看>>
虚拟机长时间不关造成的问题
查看>>
关键帧动画
查看>>
lingo 错误代码大全
查看>>
Android记事本06
查看>>
PHP函数-FTP文件传输函数
查看>>
http request method and response codes
查看>>
【资源】NOIP2013测试数据senior/junior 普及/提高 数据
查看>>
toString和valueOf的区别
查看>>