热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何利用Java技术高效实现批量打印功能

展开全部下面是实现Java批量打印功能的具体工具类,其中的Info类和UserClass为具体的快递面单中要打印的信息e68a8462616964757a686964

展开全部

下面是实现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);

}

}

}

2Q==

已赞过

已踩过<

你对这个回答的评价是&#xff1f;

评论

收起



推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
author-avatar
百变精灵110
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有