网络规划设计师讲义百度网盘下载/北京网站优化实战
最近接到用户提过来的需求,需要一个能够自动打印图纸的功能,经过几天的研究整出来个初版了的,分享出来给大家,希望能有帮助。
需求描述:
生产车间现场每天都有大量的图纸需要打印,一个一个打印太慢了,希望可以有个批量打印的功能。
分析:
我们的图纸是存在服务器上,都是pdf版本的,所以批量打印程序可以通过文件名称,然后程序自动将共享文件推送到打印机上打印,这样就可以实现自动化了,并且后续还可以根据情况进行扩展
代码:
初版的程序比较简单,使用的是springboot + spring shell 来实现,具体代码如下:
<!-- pom.xml 片段 -->
<!-- spring-boot-starter 版本是随意选的 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.14</version>
</parent>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- spring-shell 版本需要与 spring-boot-starter 匹配 --><dependency><groupId>org.springframework.shell</groupId><artifactId>spring-shell-starter</artifactId><version>2.1.11</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version><optional>true</optional><scope>compile</scope></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.26</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.22</version></dependency></dependencies><build><finalName>DrawPrinter</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.4</version> <!-- 使用适合你的Spring Boot版本 --><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
shell命令代码
package xxxx;import cn.hutool.core.util.StrUtil;
import com.higer.ipd.tools.drawprinter.commons.PdfPrinter;
import com.higer.ipd.tools.drawprinter.entity.DrawInfoEntity;
import com.higer.ipd.tools.drawprinter.service.IDrawInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;import java.io.File;
import java.util.HashMap;
import java.util.List;@ShellComponent
public class CommonCommand {@Autowiredprivate IDrawInfoService drawInfoService;@ShellMethod(value = "打印消息",key="000",group = "test")public void printMessage(String message) {System.out.println(message);}@ShellMethod(value = "查看本地打印机",key="101",group = "print")public void showLocPrinter(){PdfPrinter.getLocalPrinter().keySet().forEach(System.out::println);}@ShellMethod(value="打印图纸",key="103",group = "print")public void printPdf(String printerName,String fileName,String pageSize){try {String result = PdfPrinter.print(new File(fileName), printerName, pageSize);if(StrUtil.isBlank(result)){System.out.println("打印成功!");}else{System.out.println(result);}} catch (Exception e) {e.printStackTrace();System.out.println("打印出错!");}}
}
上面开发了两个shell命令:“查看本地打印机"和"打印图纸”.
打印图纸代码片段如下:
public static String print(File file, String printerName,String pageSize) throws Exception {if(StrUtil.isBlank(printerName) || file == null || !file.exists()){return "未指定打印机或待文件不存在,请确认!";}// 1.根据打印机名称找到对应的打印机服务,Map<String, PrintService> printerMap = getLocalPrinter();PrintService printService = printerMap.get(printerName);if(printService == null){return "没有找到指定的打印机!";}// 2.加载pdf文件,并设置打印配置,打印try (PDDocument document = PDDocument.load(file)){PrinterJob printJob = PrinterJob.getPrinterJob();printJob.setJobName(file.getName());printJob.setPrintService(printService);PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.SCALE_TO_FIT);Book book = new Book();PageFormat pageFormat = new PageFormat();pageFormat.setOrientation(PageFormat.PORTRAIT);//纵向pageFormat.setPaper(getPaper(pageSize));//设置纸张book.append(pdfPrintable, pageFormat, document.getNumberOfPages());printJob.setPageable(book);printJob.setCopies(1);//设置打印份数HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet();pars.add(Sides.ONE_SIDED); //设置单双页printJob.print(pars);}return "";
}
效果:
启动后进入输入命令状态,输入help可以看到帮助信息,效果如下:
输入 help 103 可以看到打印图纸的帮助信息,命令格式为: 103 打印机名称 文件名称 页面大小(A3/A4)
源码下载
相关文章:

PDF自动打印
最近接到用户提过来的需求,需要一个能够自动打印图纸的功能,经过几天的研究整出来个初版了的,分享出来给大家,希望能有帮助。 需求描述: 生产车间现场每天都有大量的图纸需要打印,一个一个打印太慢了࿰…...

【C#】类型转换-显式转换:括号强转、Parse法、Convert法、其他类型转string
目录 一、括号强转 1.有符号整型 2.无符号整型 3.浮点之间 4.无符号和有符号 5.浮点和整型 6.char和数值类型 7.bool和string是不能够通过 括号强转的 二、Parse法 1.有符号 2.无符号 3.浮点型 4.特殊类型 三、Convert法 1.转字符串 2.转浮点型 3.特殊类型转换…...

【智能家居】4、智能家居框架设计和代码文件工程建立
目录 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 SourceInsight创建新工程步骤 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 创建一个名为si的文件夹用于保存SourceInsight生成的文件信息,然后在SourceInsig…...

【GAN】数据增强基础知识
最近要用到,但是一点基础都没有,故开个文章记录一下笔记 目录 GAN DCGAN WGAN EEGGAN GAN 参考 生成对抗网络(GAN) - 知乎 (zhihu.com) 文章 [1406.2661] Generative Adversarial Networks (arxiv.org) 代码 GitHub - …...

Skywalking流程分析_3(服务的准备、启动、关闭)
前文将SkyWalkingAgent.premain中的: SnifferConfigInitializer.initializeCoreConfig(agentArgs)pluginFinder new PluginFinder(new PluginBootstrap().loadPlugins())这两个方法分析完毕,下面继续分析premain方法其余部分 创建byteBuddy final By…...

mysql中的各种日志文件redo log、undo log和binlog
mysql中的各种日志文件redo log、undo log和binlog mysql中的各种日志文件redo log、undo log和binlog1.MySQL日志文件类型2.redo log日志2.1 作用2.2工作原理:2.3详解 3.undo log日志4.binlog日志5.总结 mysql中的各种日志文件redo log、undo log和binlog 1.MySQL…...

【电视剧-长相思】经典语录
小编看了这么长时间的电视剧,突然感觉摘抄经典语录最有成就感,嘿嘿,下面是我在《长相思》(第一季)中感觉好的一些语录,语录是乱序排列哈 玟小六:我怕寂寞,寻不到长久的相依ÿ…...

串口通信原理及应用
Content 1. 前言介绍2. 连接方式3. 数据帧格式4. 代码编写 1. 前言介绍 串口通信是一种设备间非常常用的串行接口,以比特位的形式发送或接收数据,由于成本很低,容易使用,工程师经常使用这种方式来调试 MCU。 串口通信应用广泛&a…...

python爬取穷游网景点评论
爬取穷游网的景点评论数据,使用selenium爬取edge浏览器的网页文本数据。 同程的评论数据还是比较好爬取,不像大众点评需要你登录验证杂七杂八的,只需要找准你想要爬取的网页链接就能拿到想要的文本数据。 这里就不得不提一下爬取过程中遇到的…...

Phar 文件上传以及反序列化
1.phar反序列化 触发条件: 1、能将phar文件上传 2、可利用函数 stat、fileatime、filectime、file_exists、file_get_contents、file_put_contents、file、filegroup、fopen、fileinode、filemtime、fileowner、fileperms、is_dir、is_executable、is_file、is_link…...

面试其他注意事项
面试其他注意事项 一、面试反问 这个岗位的日常工作和主要职责是什么?咱们这边主要负责什么业务,用到了哪些技术呢?对于我们校招生有没有培养体系呢?脱产培训,还是边工作边熟悉?会有导师带嘛?…...

sklearn 笔记 BallTree/KD Tree
由NearestNeighbors类包装 1 主要使用方法 sklearn.neighbors.BallTree(X, leaf_size40, metricminkowski, **kwargs) X数据集中的点数leaf_size改变 leaf_size 不会影响查询的结果,但可以显著影响查询的速度和构建树所需的内存metric用于距离计算的度量。默认为…...

ConstraintLayout使用详解
作为一名程序员,可能会经历以下难受的事情: 解决难以调试的代码错误处理复杂的代码库和维护遗留代码修改已经存在很长时间的代码,需要考虑兼容性和稳定性长时间工作,缺乏身体运动和社交互动,导致压力和孤独感遇到不能…...

Java8Stream快速使用
将List集合存入流中 List<String> list new ArrayList<>();list.add("张一");list.add("张二");list.add("张三");list.add("李四");list.add("赵五");list.add("张六");list.add("王八"…...

work环境配置
1.计算机右键找到属性 2.配置环境变量 3.新加环境变量 4.修改环境变量path .bat文件内容 php ApplicationsChatstart_register.php ApplicationsChatstart_gateway.php ApplicationsChatstart_businessworker.php pause...

Flutter应用-使用sqflite升级数据库
文章目录 问题描述具体做法代码示例更多条件限制升级 数据库迁移和备份简介数据库迁移数据库备份 问题描述 使用fluttter开发的应用程序发布后,发现数据库有些设计不合理。如何来更新数据库呢? 使用sqflite来处理数据库,但是第一版软件发布后…...

集群搭建(redis7)
一、主从复制(replica)(不推荐) 介绍 主从复制 mmaster以写为主,slave以读为主当master数据变化时,自动将新的数据异步同步到其他slave数据库 读写分离down机恢复数据备份水平扩容支撑高并发 基本操作 配从不配主 权限细节 maste…...

高能分享:软件测试十大必问面试题(附带答案)
1 介绍之前负责的项目 参考答案:先大概描述一下这个项目是做什么的(主要功能),包括哪些模块,是什么架构的(B/S、C/S、移动端?),你在其中负责哪些模块的测试。期间经历了几…...

Java 反射设置List属性
使用 Java 反射可以动态地设置对象的属性值,包括 List 类型的属性。以下是一个示例代码,演示如何通过反射设置 List 类型的属性: 假设有一个类 Person,包含一个 List 类型的属性 names: java public class Person { …...

wpf devexpress Property Grid创建属性定义
WPF Property Grid控件使用属性定义定义如何做和显示 本教程示范如何绑定WP Property Grid控件到数据和创建属性定义。 执行如下步骤 第一步-创建属性定义 添加PropertyGridControl组件到项目。 打开工具箱在vs,定位到DX.23.1: Data 面板,选择Prope…...

78.子集--77.组合
78,子集 递归 class Solution(object):def subsets(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""# 结果ans[]# 临时结果dp_[]def dfs(nums,index):if indexlen(nums):# 保存结果co_dpdp_[:]ans.append(co_dp)r…...

【C++】模版-初阶
目录 泛型编程--模版 函数模版 类模版 泛型编程--模版 函数模版 如何实现一个通用的交换函数呢?void Swap(int& left, int& right){int temp left;left right;right temp;}void Swap(double& left, double& right){double temp left;left right;righ…...

【JavaEE初阶】 TCP服务器与客户端的搭建
文章目录 🌲前言🌴ServerSocket API🎄Socket API🍀TCP中的长短连接🎍建立TCP回显客户端与服务器🚩TCP搭建服务器🚩TCP搭建客户端🚩通信过程展示: 🌳多个客户端…...

23111710[含文档+PPT+源码等]计算机毕业设计基于SpringBoot的体育馆场地预约赛事管理系统的设计
文章目录 **软件开发环境及开发工具:****功能介绍:****论文截图:****数据库:****实现:****代码片段:** 编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 软件开发环境及…...

【论文解读】GPT Understands, Too
一.论文 1.1 P-tuning 区别于之前的工作,这篇工作认为promote可以在句子中的任意位置起到作用,可以将它们插入上下文或目标中 上图中,左图是不使用任何操作,右图是选择在居首和目标前插入promote的embedding,插入pro…...

组合式API_生命周期
选项式API_生命周期 <template><h3>选项式API</h3><p>{{ message }}</p> </template> <script> export default {data(){return{message:""}},mounted(){this.message "选项式API生命周期函数"} } </scr…...

WPF如何实现应用程序托盘
在WPF中实现应用程序托盘图标和菜单功能通常需要使用System.Windows.Forms.NotifyIcon类,因为WPF本身并没有直接提供这样的控件。为了使用NotifyIcon,你需要添加对System.Windows.Forms的引用。以下是如何实现的步骤: 1. 添加对 System.Wind…...

ERROR: column “xxxx.id“ must appear in the GROUP BY
org.postgresql.util.PSQLException: ERROR: column “xxx.id” must appear in the GROUP BY clause or be used in an aggregate function 错误**:列“XXXX.id”必须出现在GROUP BY子句中或在聚合函数中使用** 出现这种错误的sql如下: select name,…...

【C++ 学习 ㊲】- 五种特殊类的设计
目录 一、设计一个禁止拷贝的类 二、设计一个只能在堆区上创建对象的类 三、设计一个只能在栈区和静态区上创建对象的类 四、设计一个不能继承的类 五、设计一个只能创建一个对象的类(单例模式) 一、设计一个禁止拷贝的类 拷贝只会发生在两个场景中…...

探索arkui(2)--- 布局(列表)--- 2(支持分组/实现响应滚动位置)
前端开发布局是指前端开发人员宣布他们开发的新网站或应用程序正式上线的活动。在前端开发布局中,开发人员通常会展示新网站或应用程序的设计、功能和用户体验,并向公众宣传新产品的特点和优势。前端开发布局通常是前端开发领域的重要事件,吸…...