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实现打印的朋友有一定的帮助!

在jdk1.6下测试通过。

package com.eadd.test.print;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.print.PageFormat;

import java.awt.print.Printable;

import java.awt.print.PrinterException;

import javax.print.Doc;

import javax.print.DocFlavor;

import javax.print.DocPrintJob;

import javax.print.PrintException;

import javax.print.PrintService;

import javax.print.PrintServiceLookup;

import javax.print.SimpleDoc;

import javax.print.attribute.DocAttributeSet;

import javax.print.attribute.HashDocAttributeSet;

import javax.print.attribute.HashPrintRequestAttributeSet;

import javax.print.attribute.PrintRequestAttributeSet;

import javax.print.attribute.standard.MediaSizeName;

import javax.swing.JOptionPane;

/**

* 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;

g2.setPaint(Color.black); // 设置打印颜色为黑色

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

return Printable.NO_SUCH_PAGE;

g2.translate(pf.getImageableX(), pf.getImageableY());// 转换坐标,确定打印边界

Font font = new Font(“宋体”, Font.PLAIN, 24);// 创建字体

g2.setFont(font);

// 打印当前页文本

int printFontCount = printStr.length();// 打印字数

int printFontSize = font.getSize();// Font 的磅值大小

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

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

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

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

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

g2.drawString(printStr, printMX – printFontSize * printFontCount,

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

g2.drawString(printStr, printMX + printFontSize * printFontCount,

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

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

return Printable.PAGE_EXISTS; // 存在打印页时,继续打印工作

}

// 打印内容到指定位置

public void printContent() {

printStr = “打印测试内容”;// 获取需要打印的目标文本

if (printStr != null && printStr.length() > 0) // 当打印内容不为空时

{

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

// 指定打印输出格式

DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;

// 定位默认的打印服务

PrintService printService = PrintServiceLookup

.lookupDefaultPrintService();

// 创建打印作业

DocPrintJob job = printService.createPrintJob();

// 设置打印属性

PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

// 设置纸张大小,也可以新建MediaSize类来自定义大小

pras.add(MediaSizeName.ISO_A4);

DocAttributeSet das = new HashDocAttributeSet();

// 指定打印内容

Doc doc = new SimpleDoc(this, flavor, das);

// 不显示打印对话框,直接进行打印工作

try {

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

} catch (PrintException pe) {

pe.printStackTrace();

}

} else {

// 如果打印内容为空时,提示用户打印将取消

JOptionPane.showConfirmDialog(null,

“Sorry, Printer Job is Empty, Print Cancelled!”,

“Empty”, JOptionPane.DEFAULT_OPTION,

JOptionPane.WARNING_MESSAGE);

}

}

public static void main(String[] args) {

LocatePrint lp = new LocatePrint();

lp.printContent();

}

}

java 定位打印_java定位打印(如:超市,票据打印)相关推荐

  1. java 打印机编程_JAVA实现连接本地打印机并打印文件的实现代码

    JAVA实现连接本地打印机并打印文件的实现代码 发布时间:2020-08-31 15:52:25 来源:脚本之家 阅读:96 作者:piaoyunlive 实现代码一 import javax.pri ...

  2. java连接打印机_JAVA实现连接本地打印机并打印文件的实现代码

    实现代码一 import javax.print.*; import javax.print.attribute.DocAttributeSet; import javax.print.attribu ...

  3. java 虚拟打印机_Java 通过物理、虚拟打印机打印Word文档

    import com.spire.doc.Document; import com.spire.ms.System.Drawing.Printing.PrinterSettings; public c ...

  4. java 定位打印_Java定位打印(Java location printing).doc

    Java定位打印(Java location printing) Java定位打印(Java location printing) Suddenly, such as spring night, th ...

  5. java的圆周率_java学习日记,圆周率的打印

    前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...

  6. java 绘图 打印_java调用本地打印机,绘制打印模板,小票模板

    文章目录 jar资源 绘制打印模板 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java ...

  7. java根据打印模板打印_java调用本地打印机,绘制打印模板,小票模板

    jar资源 绘制打印模板 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt. ...

  8. java线程 打印_java多线程实现 5秒一次打印当前时间

    import javax.swing.JLabel; import java.util.Date; public class Time extends JFrame implements Runnab ...

  9. java调adobe打印_Java报表工具打印方案集锦 | 改变自己

    本文试图对市面上流行的纯java实现的web报表工具,jasperreport . stylereport .杰表.润乾报表.快逸.finererport为例,分析各报表工具采用的web打印技术的异同 ...

最新文章

  1. BaseTDI.sys 瑞星卡巴冲突,导致机器蓝屏
  2. IBM 推出 Bluemix :Swift 将支持服务器端开发
  3. Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)
  4. L2-004 这是二叉搜索树吗?-团体程序设计天梯赛GPLT
  5. Jupiter黑客松——IPFS开发者大赛火热报名中!
  6. H5 输入框text和number切换
  7. kbengine连接mysql报错
  8. Mac022-brew安装tool
  9. java.net.bindexception: address already in use: jvm_bind:8080
  10. 同学,那些个证书没屌用!
  11. 超全!JAVA基础知识点总结
  12. 疯狂星期四,但是程序员
  13. imx6 android8流畅,NXP iMX8和iMX6 ARM处理器网络性能对比
  14. 利用saopanel系统的UDP转发模式破解校园网
  15. Bug 引发的 18 次重大事故
  16. 从零开始免费搭建自己的博客(七)——迁移 CSDN 博客到个人博客站点
  17. ROS实践1:publisher详解
  18. N95滤材之父:滤材才是关键!道翰天琼认知智能机器人平台API接口大脑为您揭秘-2。
  19. 假设检验:使用p值来接受或拒绝你的假设
  20. 【前沿技术RPA】 万字吃透UiPath如何处理异常

热门文章

  1. JavaScript this指针的理解
  2. Matplotlib小白学习-1
  3. ubuntu faceswap
  4. 卡西欧计算机维修,卡西欧tr350死机 通过原因寻找修理办法
  5. 2018年9月26日公司断网情况处理(交换机环路,err-disable state)
  6. python abaqus二次开发 模拟3维裂纹扩展
  7. 如何批量生成GS1-128条码
  8. C#Url下载图片(jpg\pdf\png\jpeg...)
  9. 037 PHP登录、注册、留言、个人中心设计
  10. 运筹学基础【九】 之 马尔科夫分析