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

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

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

框架用的是Springboot

话不多说,直接上代码

下面展示一些 内联代码片

java 复制代码
@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;
    }
这里要用到的依赖
xml 复制代码
 		<dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.30</version>
        </dependency>
最后

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

相关推荐
计算机学姐2 分钟前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis
救救孩子把18 分钟前
深入理解 Java 对象的内存布局
java
落落落sss20 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
万物皆字节26 分钟前
maven指定模块快速打包idea插件Quick Maven Package
java
夜雨翦春韭33 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
简单.is.good38 分钟前
【测试】接口测试与接口自动化
开发语言·python
我行我素,向往自由39 分钟前
速成java记录(上)
java·速成
一直学习永不止步1 小时前
LeetCode题练习与总结:H 指数--274
java·数据结构·算法·leetcode·数组·排序·计数排序
邵泽明1 小时前
面试知识储备-多线程
java·面试·职场和发展
Yvemil71 小时前
MQ 架构设计原理与消息中间件详解(二)
开发语言·后端·ruby