展开全部

下面是实现Java批量打印功能的具体工具类,其中的Info类和UserClass为具体的快递面单中要打印的信息e68a8462616964757a686964616f31333363383935,以参数的方式传递过来,循环调用Java PrinterJob服务进行打印;这里的快递尺寸已经调整好,可以使用,如需添加只要根据实际的面单进行调整,也可以专门写一个接口类的形式来创建快递面单的尺寸,本人没有尝试;如遇问题欢迎留言,共同探讨!

import java.awt.BasicStroke;

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.HashMap;

import java.util.List;

import java.util.Map;

import javax.swing.JOptionPane;

import com.myprint.model.Info;

import com.myprint.model.UserClass;

public class PrintUtil implements Printable{

/**

* 纸张尺寸

*/

private double width;

private double height;

/**

* 打印起始坐标

*/

private double startX;

private double startY;

//打印页数

private int pages;

//打印数据坐标

private Map pcoord;

//发件方信息

private SenderInfo info;

//打印数据源

private List sourcelist;

//private int PAGES = 0;

//private PrintPaper printpaper;

private UserObject obj;

public PrintUtil(){}

public PrintUtil(int expkind, UserObject obj, List sourcelist)

{

this.pcoord = this.pcoord == null ? new HashMap() : this.pcoord;

this.pcoord.clear();

this.info = info;

this.sourcelist = sourcelist;

switch(expkind)

{

case 0: //EMS

this.width = 652;

this.height = 360;

this.startX = 30;

this.startY = 80;

this.pages = this.sourcelist == null ? 0 : this.sourcelist.size();

pcoord.put("nameX", 30F);

pcoord.put("nameY", 80F + 30F);

pcoord.put("numX", 30F + 90F);

pcoord.put("numY", 80F + 30F);

pcoord.put("cmpX", 30F);

pcoord.put("cmpY", 80F + 60F);

pcoord.put("addrX", 30F);

pcoord.put("addrY", 80F + 90F);

pcoord.put("RnameX", 30F + 290F);

pcoord.put("RnameY", 80F + 30F);

pcoord.put("RnumX", 30F + 390);

pcoord.put("RnumY", 80F + 30);

pcoord.put("RcmpyX", 30F + 280);

pcoord.put("RcmpyY", 80F + 55);

pcoord.put("RaddrX", 30F + 280);

pcoord.put("RaddrY", 80F + 90);

break;

case 1://顺风快递

this.width = 632;

this.height = 412;

this.startX = 40;

this.startY = 30;

this.pages = this.sourcelist == null ? 0 : this.sourcelist.size();

pcoord.put("nameX", 285F);

pcoord.put("nameY", 126F);

pcoord.put("numX", 200F);

pcoord.put("numY", 185F);

pcoord.put("cmpX", 120F);

pcoord.put("cmpY", 126F);

pcoord.put("addrX", 120F);

pcoord.put("addrY", 145F);

pcoord.put("RnameX", 275F);

pcoord.put("RnameY", 240F);

pcoord.put("RnumX", 200F);

pcoord.put("RnumY", 300F);

pcoord.put("RcmpyX", 130F);

pcoord.put("RcmpyY", 240F);

pcoord.put("RaddrX", 130F);

pcoord.put("RaddrY", 270F);

break;

case 2://申通快递

this.width = 652;

this.height = 360;

this.startX = 30;

this.startY = 80;

this.pages = this.sourcelist == null ? 0 : this.sourcelist.size();

pcoord.put("nameX", 42F);

pcoord.put("nameY", 100F);

pcoord.put("numX", 62F);

pcoord.put("numY", 200F);

pcoord.put("cmpX", 42F);

pcoord.put("cmpY", 126F);

pcoord.put("addrX", 42F);

pcoord.put("addrY", 155F);

pcoord.put("RnameX", 320F);

pcoord.put("RnameY", 100F);

pcoord.put("RnumX", 330F);

pcoord.put("RnumY", 200F);

pcoord.put("RcmpyX", 310F);

pcoord.put("RcmpyY", 126F);

pcoord.put("RaddrX", 310F);

pcoord.put("RaddrY", 155F);

break;

default:

break;

}

}

/**

* @param Graphic指明打印的图形环境

* @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595×842点)

* @param pageIndex指明页号

**/

public int print(Graphics gra, PageFormat pf, int pageIndex) throws PrinterException {

//转换成Graphics2D

Graphics2D g2 = (Graphics2D) gra;

//设置打印颜色为黑色

g2.setColor(Color.black);

switch(pageIndex){

case 0:

Font font = new Font("新宋体", Font.PLAIN, 13);

g2.setFont(font);//设置字体

//BasicStroke bs_3=new BasicStroke(0.5f);

float[] dash1 = {2.0f};

g2.setStroke(new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 2.0f, dash1, 0.0f));

g2.drawString(info.getSname() == null ? "" : info.getSname(), pcoord.get("nameX"), pcoord.get("SnameY"));

g2.drawString(info.getSnum() == null ? "" : info.getSnum(), pcoord.get("numX"), pcoord.get("numY"));

g2.drawString(info.getScmp() == null ? "" : info.getScmp(), pcoord.get("cmpX"), pcoord.get("cmpY"));

g2.drawString(info.getSaddr() == null ? "" : info.getSaddr(), pcoord.get("addrX"), pcoord.get("addrY"));

g2.drawString(obj.getRname() == null ? "" : obj.getRname(), pcoord.get("rnameX"), pcoord.get("rnameY"));

g2.drawString(obj.getRnum() == null ? "" : obj.getRnum(), pcoord.get("rnumX"), pcoord.get("rnumY"));

g2.drawString(obj.getRcmpy() == null ? "" : obj.getRcmpy(), pcoord.get("rcmpyX"), pcoord.get("rcmpyY"));

g2.drawString(obj.getRaddr() == null ? "" : obj.getRaddr(), pcoord.get("raddrX"), pcoord.get("raddrY"));

return PAGE_EXISTS;

default:

return NO_SUCH_PAGE;

}

}

// 打印内容到指定位置

public void printContent()

{

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

{

//PAGES = printpaper.getSourcelist().size(); // 获取打印总页数

// 书、文档

Book book = new Book();

// 设置成竖打

PageFormat pf = new PageFormat();

pf.setOrientation(PageFormat.PORTRAIT);

// 通过Paper设置页面的空白边距和可打印区域。

Paper p = new Paper();

p.setSize(this.width,this.height);//纸张大小

p.setImageableArea(this.startX,this.startY, this.width,this.height);//设置打印区域

pf.setPaper(p);

// 把 PageFormat 和 Printable 添加到书中,组成一个页面

book.append(this, pf);

//获取打印服务对象

PrinterJob job = PrinterJob.getPrinterJob();

// 设置打印类

job.setPageable(book);

try {

//直接打印

for(UserObject obj: sourcelist)

{

this.obj= obj;

job.print();

}

//}

} catch (PrinterException e) {

e.printStackTrace();

}

}

else

{

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

JOptionPane.showConfirmDialog(null,

"对不起, 打印内容为空, 打印取消!",

"提示", JOptionPane.DEFAULT_OPTION,

JOptionPane.WARNING_MESSAGE);

}

}

}

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java 批量打印_用java怎样实现批量打印相关推荐

  1. java 预览打印_请问JAVA如何实现打印及打印预览功能?

    展开全部 package com.szallcom.tools; import java.awt.BorderLayout; import java.awt.Color; import java.aw ...

  2. java new thread()_(一)java多线程之Thread

    Thread类 学习java线程的开发者,首先遇到的第一个类就是Thread,通过使用Thread类,我们就可以启动,停止,中断一个线程. 在同一个时间片里, 可能会有多个线程在执行, 每个线程都拥有 ...

  3. .net实现批量在线打印_如何实现报表的批量打印需求

    在 web 报表应用中,经常会遇到批量打印的需求,即点击一次打印按钮,实现多张报表的打印输出.润乾报表提供了两种不同的打印方式(applet 打印.PDF 打印)实现批量打印需求,同时也支持横纵报表打 ...

  4. java 分割一个_分割java

    [java]分割字符串工具类,霸气 jdk自带的 java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij ...

  5. java 字符串包_包java字符串

    Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...

  6. bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道

    字符串是不可变的 字符串是不可变的,也就是说当字符串的内容发生改变的时候,会创建一个新的String对象:但是如果内容没有发生改变的时候,String类的方法会返回原字符串对象的引用. 而正则表达式往 ...

  7. java假死_分析java进程假死

    一.引言 1.编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 2.编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现 ...

  8. java perm 查看_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细

    jinfo 可以输出并修改运行时的java 进程的opts. jps 与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat 一个极强 ...

  9. java 持续交付_【Java架构:持续交付】一篇文章搞掂:Jenkins

    1.1.使用yum安装JDK a.检查系统是否有安装open-jdk rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没有输入信息表示 ...

最新文章

  1. 每日程序C语言33-打印杨辉三角
  2. 【机器学习】传统目标检测算法之DPM
  3. Pandas: 使用read_excel、describe、loc方法求极差、变异系数与四分位数间距
  4. php判断微信版本,判断是否是微信访问并获取版本号
  5. MongoDB Collections
  6. Spring AOP介绍
  7. 程序员工资为什么普遍很高,原来是因为这个...
  8. Redis实现计数器---接口防刷
  9. 魔改部署自己专属的合成大西瓜(一:运行篇)
  10. 使用油猴脚本在网页中插入按键
  11. JanusGraph内部架构概述
  12. 康威定律,作为架构师还不会灵活运用?
  13. 28岁女生转行前端晚吗?前景怎么样?
  14. 华硕笔记本开机自动进入bios,进不了windows系统的解决方法
  15. 智慧立法平台,以“智慧”赋能立法工作新格局
  16. 【新概念4】【6】the sporting spirit
  17. 影院活动管理系统需求分析报告
  18. 位图BitMap图像的读取与存储
  19. 华为HCIE有什么方向?哪个最热门
  20. Ant Design Pro 菜单icon图标修改或新增

热门文章

  1. 大数据 别让技术蛊惑
  2. K均值与DBSCAN聚类效果
  3. nyoj82 迷宫寻宝(一) (bfs)
  4. 【模拟电路】关于NPN和PNP导通的应用以及条件
  5. 项目管理中什么最重要?
  6. 2023年计算机考研数学一考试大纲
  7. Docker - 重新启动关闭的容器
  8. Autodesk SketchBook手机版 v5.1.5安卓版
  9. “无剑胜有剑”软件大师之路的一点探索(一)
  10. Nginx 简易教程