使用Java实现一个面单打印插件

2023-12-29 21:52

本文主要是介绍使用Java实现一个面单打印插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么写这个面单打印插件

做电商的都知道,每次收到订单需要打印面单的时候,通过发起一个后端请求,拿到面单地址,在前端页面进行展示,然后在点击打印操作按钮,选择打印机 点击打印,这一套流程下来,比较繁琐。因为面单压根就不需要预览,打印出来再预览再配货不是跟方便么?所以就开始往这方面思考了,甚至还可以做到自动打印,而不用手工操作,这样只要一出面单就知道有客户下单了,是不是很方便快捷,就像现在美团点外卖,饭店出单一样。基于这样,我就开始写代码。

我主要开发使用的语言是PHP,用PHP来实现这个,还是比较麻烦,然后现在也接触了Java一段时间,索性就用Java实现吧

框架用的是Springboot

话不多说,直接上代码
下面展示一些 内联代码片

@GetMapping("/printpdf")public @ResponseBody ApiResponse  printPDF(String file_name){String currentPath = System.getProperty("user.dir");String directoryPath = currentPath+"/static/"; // 目录路径String pdf = directoryPath+file_name;// 选择要打印的文档文件File documentFile = new File(pdf);// 获取默认的打印机PrintService defaultPrinter = PrintServiceLookup.lookupDefaultPrintService();// 创建打印任务DocPrintJob printJob = defaultPrinter.createPrintJob();// 打印文档FileInputStream inputStream;try {// 加载PDF文件PDDocument document = PDDocument.load(new File(pdf));// 创建打印任务PrinterJob job = PrinterJob.getPrinterJob();// 设置打印内容job.setPageable(new PDFPageable(document));// 可选:设置打印属性,如纸张大小、打印方向等PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();attributes.add(OrientationRequested.PORTRAIT);// 执行打印任务job.print(attributes);// 关闭文档document.close();System.out.println("PDF文件已成功打印。");/* inputStream = new FileInputStream(documentFile);Doc document = new SimpleDoc(inputStream, DocFlavor.INPUT_STREAM.AUTOSENSE, null);printJob.print(document, attributes);System.out.println(document.getPrintData());inputStream.close();*/} catch (FileNotFoundException e) {e.printStackTrace();System.out.println(e.getMessage());} catch (IOException e) {e.printStackTrace();System.out.println(e.getMessage());}catch (Exception e){e.printStackTrace();System.out.println(e.getMessage());}ApiResponse response = new ApiResponse();response.setCode("S000");response.setMessage("打印成功");response.setData(new ArrayList<>());return response;}
这里要用到的依赖
 		<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.30</version></dependency>
最后

通过get请求printpdf这个方法,就可以自动打印了,不需要预览

这篇关于使用Java实现一个面单打印插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550841

相关文章

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配