//实现Printable接口 用于创建打印内容
public class UserTicket implements Printable {private String name1;private String tel1;private String addr1;private String name2;private String tel2;private String addr2;private Font font;public UserTicket(String name1, String tel1, String addr1, String name2,String tel2, String addr2) {super();this.name1 = name1;this.tel1 = tel1;this.addr1 = addr1;this.name2 = name2;this.tel2 = tel2;this.addr2 = addr2;}@Overridepublic int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {int right = 115;        //右边一张距离左边的距离int first_second = 0;   //第一行与第二行的距离// 转换成Graphics2D 拿到画笔Graphics2D g2 = (Graphics2D) graphics;// 设置打印颜色为黑色g2.setColor(Color.black);// 打印起点坐标double x = pageFormat.getImageableX();double y = pageFormat.getImageableY();// 设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)font = new Font("宋体", Font.BOLD, 10);g2.setFont(font);// 设置字体float heigth = font.getSize2D();// 字体高度// 标题 第一行g2.drawString("凤馨堂广和月子餐", (float) x, (float) y + heigth);g2.drawString("凤馨堂广和月子餐", (float) x + right, (float) y + heigth);float line = 2 * heigth + first_second;g2.scale(1, 1.5);            //对接下来的内容(字体)进行拉高font = new Font("宋体", Font.BOLD, 8);g2.setFont(font);// 设置字体heigth = font.getSize2D();// 字体高度// 标题 第一点五行,电话和名字g2.drawString(name1, (float) x, (float) y + line);g2.drawString(tel1, (float) x + 30, (float) y + line);g2.drawString(name2, (float) x + right, (float) y + line);g2.drawString(tel2, (float) x + right + 30, (float) y + line);line += 1.3*heigth;font = new Font("宋体", Font.BOLD, 8);g2.setFont(font);// 设置字体heigth = font.getSize2D();// 字体高度// 第二行:地址g2.drawString(addr1, (float) x , (float) y + line);g2.drawString(addr2, (float) x  +right, (float) y + line);line += heigth;g2.scale(1, 0.67);              //将比例还原// 第三行:广告语font = new Font("宋体", Font.BOLD, 8);g2.setFont(font);// 设置字体g2.drawString("科学坐月子、健康一辈子", (float) x, (float) 75);g2.drawString("科学坐月子、健康一辈子", (float) x + right, (float) 75);switch (pageIndex) {case 0:return PAGE_EXISTS;default:return NO_SUCH_PAGE;}}
public class UserTest {public static void PrintUser(String name1, String tel1, String addr1, String name2,String tel2, String addr2) {try {// 通俗理解就是书、文档Book book = new Book();// 设置成竖打PageFormat pf = new PageFormat();pf.setOrientation(PageFormat.PORTRAIT);// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。Paper paper = new Paper();paper.setSize(230, 85);// 纸张大小paper.setImageableArea(10, 3, 210, 75);pf.setPaper(paper);book.append(new UserTicket(name1,tel1,addr1,name2,tel2,addr2), pf);// 获取打印服务对象PrinterJob job = PrinterJob.getPrinterJob();// 设置打印类job.setPageable(book);job.print();} catch (PrinterException e) {e.printStackTrace();}}//该main函数是为了测试,可以在本地以图片的形式呈现一下打印小票的样式,方便打印测试,节省纸卷和碳带的资源public static void main(String[] args) {Font font = null;String path = "D:/testimg.png";int right = 120;        //右边一张距离左边的距离int first_second = 0;   //第一行与第二行的距离int w = 226;int h = 85;BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);Graphics2D g2 = img.createGraphics();g2.setColor(Color.black);PageFormat pf = new PageFormat();pf.setOrientation(PageFormat.PORTRAIT);Paper paper = new Paper();paper.setSize(226, 85);// 纸张大小paper.setImageableArea(10, 5, 200, 72);pf.setPaper(paper);double x = pf.getImageableX();double y = pf.getImageableY();font = new Font("宋体", Font.BOLD, 10);g2.setFont(font);// 设置字体float heigth = font.getSize2D();// 字体高度// 标题 第一行g2.drawString("凤馨堂广和月子餐", (float) x, (float) y + heigth);g2.drawString("凤馨堂广和月子餐", (float) x + right, (float) y + heigth);float line = 2 * heigth + first_second;g2.scale(1, 1.5);font = new Font("宋体", Font.BOLD, 8);g2.setFont(font);// 设置字体heigth = font.getSize2D();// 字体高度// 标题 第一点五行,电话和名字g2.drawString("马蓉蓉", (float) x, (float) y + line);g2.drawString("13023237878", (float) x + 30, (float) y + line);g2.drawString("王宝", (float) x + right, (float) y + line);g2.drawString("17877665566", (float) x + right + 30, (float) y + line);line += 1.3*heigth;font = new Font("宋体", Font.BOLD, 8);g2.setFont(font);// 设置字体heigth = font.getSize2D();// 字体高度// 第二行:地址g2.drawString("妇幼10楼38床", (float) x , (float) y + line);g2.drawString("中医药附10楼33床", (float) x  +right, (float) y + line);line += heigth;g2.scale(1, 0.67);// 第三行:广告语font = new Font("宋体", Font.BOLD, 8);g2.setFont(font);// 设置字体g2.drawString("科学坐月子、健康一辈子", (float) x, (float) 75);g2.drawString("科学坐月子、健康一辈子", (float) x + right, (float) 75);try {ImageIO.write(img, "PNG", new File(path));} catch (IOException e) {e.printStackTrace();}
}//这个就是正常的测试调用了
//public static void main(String[] args) {
//  //参数顺序,左边餐点时间,菜品明,右餐时间,菜名明,名字1,电话1,名字2,电话2
//  PrintUser("马蓉蓉","13023982321","妇幼10楼38床","王宝","13823894857","中医药附10楼33床");
//}
package com.laoyao.ticket;public class User {private String name;private String tel;private String addr;public User(String name, String tel, String addr) {super();this.name = name;this.tel = tel;this.addr = addr;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}}

自己整理出来的java实现打印机打印小票相关推荐

  1. JAVA连接打印机打印小票、产品信息。标签打印机

    2018年写了一个标签打印机(TSC TX600),标签打印程序,实现功能是通过串口读出设备ID生成二维码和设备信息,用于esp8266 smart config配网.源码和资料:https://do ...

  2. Java调用打印机打印(远程、本地皆可用)

    Java调用打印机打印(远程.本地皆可用) 背景 准备 MAVEN环境 步骤 获取PrinterJob 设置PrinterJob纸张样式 打印PDF 背景 开发个Java项目需要远程调用共享打印机打印 ...

  3. NWJS(NodeJS)调用打印机 - 打印小票

    1 背景 架构设计:VueJS + Spring Cloud微服务架构 功能要求: 调用小票打印机打印小票,功能和超市收银结算功能相同 使用NWJS包装VueJS前端代码实现exe安装包和可执行文件 ...

  4. Java连接打印机打印二维码

    首先导入依赖 implementation 'com.google.zxing:core:3.5.1' implementation 'com.google.zxing:javase:3.5.1' 1 ...

  5. Java调用打印机打印PDF文档的两种方法

    最近,由于项目需求,需要增加系统调用打印机打印PDF文档功能.以前在Asp.Net项目中做过套打,但是现在的需求直接文档打印,下面是实现代码调用打印机的两种方法. 1.Java Print Servi ...

  6. java 调用打印机打印

    要在 Java 中调用打印机打印,您可以使用 Java 的打印 API.下面是一个简单的示例,展示了如何使用 Java 打印 API 来打印文本: import java.awt.print.Prin ...

  7. Java调用打印机打印pdf

    要在Java中调用打印机打印PDF,可以使用Java打印API和第三方库,如Apache PDFBox或iText PDF. 以下是使用Java打印API打印PDF的基本步骤: 安装打印机:确保您已经 ...

  8. java 调用打印机 打印pdf方案

    网上检索到的Java Printing Service方案 类似的方法的确会向打印机发送打印任务,但是打印机无反应不响应打印 //1.得到一个文件的输入流 FileInputStream fiStre ...

  9. 记一次Electron 桌面应用实现调用打印机打印小票功能

    项目背景 实现一款交互屏桌面应用软件,类似医院那张种给用户操作办理业务的应用程序.操作业务中在充值后可供用户打印小票. 开发框架:electron-vue vue版本:v2.6.14 electron ...

最新文章

  1. CPA相关功耗分析(一)
  2. TroubleshootingGuide for JavaTM SE 6withHotSpot TM VM (翻译附录未完待续)-2
  3. SAP Spartacus界面看不到Carousel左右移动控件的一个可能原因
  4. mysql jdbc 表结构_JDBC操作表:JDBC修改表结构
  5. easyui-combobox
  6. C++_类和对象_对象特性_构造函数调用规则---C++语言工作笔记043
  7. 使用开源框架Sqlsugar结合mysql开发一个小demo
  8. Python PyCrypto,Paramiko模块安装和使用
  9. 图形图像会议期刊文章查询
  10. MySQL数据库:参数优化
  11. 常用的 Cron 时间表达式 定时器 正则表达式
  12. k2p华硕系统怎么设置_双频路由器怎么设置网速快(k2p刷华硕怎么设置网速好)
  13. gitlab鉴权失败
  14. Photographic Tone Reproduction for Digital Images
  15. COGS 336 Vijos 1018 NOI2003 智破连环阵
  16. 同步发电机 有功功率 无功功率调节
  17. 利用Python进行随机取名
  18. 移动端开发案例(Bootstrap布局,响应式开发)
  19. GCM 的升级版——FCM(firebase cloud messaging)
  20. ROS Subscribers

热门文章

  1. 一键还原涂鸦图片_涂鸦的图片可以复原吗
  2. MiniGUI——第一个程序helloworld
  3. 这156套PS笔刷合集!两天时间给大家盘来了!
  4. 微信小程序订阅信息之Java实现详解
  5. 基于C#的ArcEngine二次开发教程(03):ArcEngine的接口查询技术底层分析
  6. 网易2018实习生招聘笔试题-C++开发实习生解答
  7. 二维码墓碑:可手机“扫”墓祭祖
  8. 小白必看:合理搭建巨量引擎账户结构要点总结!
  9. 四大主流新闻App竞品分析
  10. anaconda安装及pytorch、tf、jupyter环境配置