java行距getprinter_java 打印 类似打印存折的打印

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 ;

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值