java链接打印机打印文件

Java调用打印机打印(远程、本地皆可用) Java调用打印机打印(远程、本地皆可用)背景准备MAVEN环境步骤获取PrinterJob设置PrinterJob纸张样式打印PDF 背景 开发个Java项目需要远程调用共享打印机打印 准备 环境 内容 JDK 1.8.0_212 开发工具 IDEA 打印机端和服务器端配置 配置参考链接 MAVEN环境 一般打印都生成PDF然后打印,PDF常用API有两个,pdfbox和itextpdf,依赖如下 pdfbox依赖 <dependency> 阅读详情

获取打印机的名字:

// 获取打印机
public static List<String> findPrints() {
    List<String> list = new ArrayList<>();
    HashPrintRequestAttributeSet requestAttributeSet = new HashPrintRequestAttributeSet();
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
    //查找所有的可用的打印服务
    PrintService[] printService = PrintServiceLookup.lookupPrintServices(flavor, requestAttributeSet);
    if (printService == null || printService.length == 0) {
        log.info("打印获取失败,未找到可用打印机,请检查。");
    }
    if (printService != null) {
        for (PrintService print : printService) {
            list.add(print.getName());
        }
    }
    return list;
}


PFD文件打印

  <!--打印-->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.6</version>
        </dependency>

代码:

需要获得打印机的名称

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPrintable;
import org.apache.pdfbox.printing.Scaling;

import javax.print.PrintService;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.standard.Sides;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.IOException;

public class DYController {
    public static void main(String[] args) throws Exception {
        
        String pdfFile = "E:\\a.pdf";//文件路径
        File file = new File(pdfFile);
        String printerName = "HP MFP M436 PCL6";//打印机名包含字串
        PDFprint(file,printerName);
    }

    public static void PDFprint(File file , String printerName) throws Exception {
        PDDocument document = null;
        try {
            document = PDDocument.load(file);
            PrinterJob printJob = PrinterJob.getPrinterJob();
            printJob.setJobName(file.getName());
            if (printerName != null) {
                // 查找并设置打印机
                //获得本台电脑连接的所有打印机
                PrintService[] printServices = PrinterJob.lookupPrintServices();
                if(printServices == null || printServices.length == 0) {
                    System.out.print("打印失败,未找到可用打印机,请检查。");
                    return ;
                }
                PrintService printService = null;
                //匹配指定打印机
                for (int i = 0;i < printServices.length; i++) {
                    System.out.println(printServices[i].getName());
                    if (printServices[i].getName().contains(printerName)) {
                        printService = printServices[i];
                        break;
                    }
                }
                if(printService!=null){
                    printJob.setPrintService(printService);
                }else{
                    System.out.print("打印失败,未找到名称为" + printerName + "的打印机,请检查。");
                    return ;
                }
            }
            //设置纸张及缩放
            PDFPrintable pdfPrintable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);
            //设置多页打印
            Book book = new Book();
            PageFormat pageFormat = new PageFormat();
            //设置打印方向
            pageFormat.setOrientation(PageFormat.PORTRAIT);//纵向
            pageFormat.setPaper(getPaper());//设置纸张
            book.append(pdfPrintable, pageFormat, document.getNumberOfPages());
            printJob.setPageable(book);
            printJob.setCopies(1);//设置打印份数
            //添加打印属性
            HashPrintRequestAttributeSet pars = new HashPrintRequestAttributeSet();
            pars.add(Sides.DUPLEX); //设置单双页
            printJob.print(pars);
        }finally {
            if (document != null) {
                try {
                    document.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static Paper getPaper() {
        Paper paper = new Paper();
        // 默认为A4纸张,对应像素宽和高分别为 595, 842
        int width = 595;
        int height = 842;
        // 设置边距,单位是像素,10mm边距,对应 28px
        int marginLeft = 10;
        int marginRight = 0;
        int marginTop = 10;
        int marginBottom = 0;
        paper.setSize(width, height);
        // 下面一行代码,解决了打印内容为空的问题
        paper.setImageableArea(marginLeft, marginRight, width - (marginLeft + marginRight), height - (marginTop + marginBottom));
        return paper;
    }

}

excel转换成pdf 

生成excel请看下面的链接:

java导出Excel_Mr_Jin.的博客-优快云博客_java导出excel方法https://blog.youkuaiyun.com/Java_Mr_Jin/article/details/124076055?spm=1001.2014.3001.5501

当然我们的excel要想打印可以转换成pdf的形式,再用上面的进行打印:

关于word转换pdf需要用到jaboc,所以在这需要先下载jaboc.jar包,链接及提取码如下:

链接: 链接: https://pan.baidu.com/s/17nLuDAYC33Yu8KvwS2J2gA 

提取码: qwer 

将jar包解压后

1.将Jacob.jar包复制到程序的jdk的lib文件夹下

2.将dll文件复制到jdk的bin目录下 

 然后在idea中引入jacob.jar包

 


		<dependency>
			<groupId>com.hynnet</groupId>
			<artifactId>jacob</artifactId>
			<version>1.18</version>
		</dependency>

 在java中进行实现excel转换成pdf:

package com.sangeng.controller;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

import java.io.File;

public class DYPdfController {
    //word转化pdf,传入转换前的文件路径(例:"E:\\a.docx")和转换后的文件路径(例:"E:\\a.pdf")

    public static void main(String[] args) {
        String sFilePath = "D:\\java-demo\\zzzzz\\qqq.doc";//文件路径
        String toFilePath = "D:\\java-demo\\zzzzz\\qqq.pdf";
        wordToPDF(sFilePath,toFilePath);
    }

    public static void wordToPDF(String sFilePath,String toFilePath) {

        System.out.println("启动 Word...");
        long start = System.currentTimeMillis();
        ActiveXComponent app = null;
        Dispatch doc = null;
        try {
            app = new ActiveXComponent("Word.Application");
            app.setProperty("Visible", new Variant(false));
            Dispatch docs = app.getProperty("Documents").toDispatch();
            doc = Dispatch.call(docs, "Open", sFilePath).toDispatch();

            System.out.println("打开文档:" + sFilePath);
            System.out.println("转换文档到 PDF:" + toFilePath);

            File tofile = new File(toFilePath);
            if (tofile.exists()) {
                tofile.delete();
            }
            Dispatch.call(doc, "SaveAs", toFilePath,17);//17是pdf格式 // FileName
            long end = System.currentTimeMillis();
            System.out.println("转换完成..用时:" + (end - start) + "ms.");
        } catch (Exception e) {
            System.out.println("========Error:文档转换失败:" + e.getMessage());
        } finally {
            Dispatch.call(doc, "Close", false);
            System.out.println("关闭文档");
            if (app != null)
                app.invoke("Quit", new Variant[]{});
        }
        // 如果没有这句话,winword.exe进程将不会关闭
        ComThread.Release();
    }
}

 当然转换打印完成后。记得删除生成的pdf文件:

                File file=new File(toFilePath);
                if(file.exists()&&file.isFile())
                    file.delete();

直接excel进行打印

缺点:就是不能更改打印参数

package com.sangeng.controller;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class WordController {
    public static void main(String[] args) {

        String filePath = "E:\\a.docx";//文件路径
        String printerName = "HP MFP M436 PCL6";//打印机名包含字串
        printWord(filePath,printerName);

    }

    public static void printWord(String filePath, String printerName){
//        初始化线程
        ComThread.InitSTA();
        ActiveXComponent word = new ActiveXComponent("Word.Application");
        //设置打印机名称
        word.setProperty("ActivePrinter", new Variant(printerName));
        // 这里Visible是控制文档打开后是可见还是不可见,若是静默打印,那么第三个参数就设为false就好了
        Dispatch.put(word, "Visible", new Variant(false));
        // 获取文档属性
        Dispatch document = word.getProperty("Documents").toDispatch();
        // 打开激活文挡
        Dispatch doc=Dispatch.call(document, "Open", filePath).toDispatch();
        //Dispatch doc = Dispatch.invoke(document, "Open", Dispatch.Method,
        //  new Object[] { filePath }, new int[1]).toDispatch();
        try{
            Dispatch.callN(doc, "PrintOut");
            System.out.println("打印成功!");
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("打印失败");
        }finally {
            try {
                if (doc != null) {
                    Dispatch.call(doc, "Close", new Variant(0));//word文档关闭
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
            //退出
            word.invoke("Quit", new Variant[0]);
            //释放资源
            ComThread.Release();
            ComThread.quitMainSTA();
        }
    }
}

导入C盘失效 

文件不能直接导入c盘,因为权限问题。所以先创建一个文件夹,再导入即可

 File dir=new File("C:\\nmgbzj");
        File file2=new File(dir.getPath()+"/");
        if(!dir.exists()){
            dir.mkdir();
            file2.createNewFile();
        }else{
            if(file2.exists()){
                file2.delete();
                file2.createNewFile();
            }else{
                file2.createNewFile();
            }

        }

java 调用打印机 打印pdf方案 网上检索到的Java Printing Service方案//1.得到一个文件的输入流 FileInputStream fiStream; try { psStream = new FileInputStream("./sample.PDF"); } catch (FileNotFoundException ffne) { } if (psStream == null) { retu... 阅读详情

相关推荐

在麒麟操作系统(基于Linux)上,如何调用打印机进行打印

*最实用建议**:对于大多数应用,使用**Python + PyCUPS**是最佳选择,因为它提供了良好的跨平台支持和易于使用的API。conn.printFile(printer_name, "/path/to/file.pdf", "打印任务", {})1. **权限问题**:确保用户有打印权限(在lpadmin组)4. **网络打印**:CUPS也支持网络打印机(IPP协议)## 4. **Qt/C++(GUI应用推荐)**## 1. **Python(推荐)**

让编程变的很简单!! 546

Java读取打印机列表

Java读取打印机列表 Java读取打印机列表 //查找所有打印服务 PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); System.out.println("*****从配置文件读取的打印机型号*****"); System.out.println(services.length); System.out.println("**********"); Java读取默认打印机 PrintService

weixin_44064275的博客 1411

华为OD机试题,用 Java 解【打印文件】问题 | 含解题说明

本篇题目:打印文件 题目 有 5 台打印机打印文件,每台打印机有自己的待打印队列。 因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10不同的优先级,其中数字越大优先级越高。 打印机会从自己的待打印队列中选择优先级最高的文件来打印。 如果存在两个优先级一样的文件,则选择最早进入队列的那个文件。 现在请你来模拟这5台打印机的打印过程。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

java连接打印机并进行打印

通过java在同网段连接打印机并进行文件的打印

qq_42203603的博客 1万+

JAVA通过网络调用网络打印机的工具类

公司需要一个用户下单后自动打印订单金额发票和快递单号的功能,所以特地写的工具类。 具体作用是:java通过网络,调用网络打印机,打印自定义内容,比如快递单号、发票等等,文档中附带了部分快递公司的快递单模版。

JAVA网络调用打印机工具类

需要一个用户下单后自动打印订单金额发票和快递单号的功能。 具体作用是:java通过网络,调用网络打印机,打印自定义内容,比如快递单号、发票等等,文档中附带了部分快递公司的快递单模版。

【华为OD机试 2023】 打印机队列(C++ Java JavaScript Python)

因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10不同的代先级,其中数字越大优先级越高。每个测试用例第一行给出发生事件的数量N(0 < N < 1000)。如果存在两个优先级一样的文件,则选择_最早进入队列_的那个文件。打印机会从自己的待打印队列中选择_优先级最高_的文件来打印。接下来有 N 行,分别表示发生的事件。有5台打印机打印文件,每台打印机有自己的待打印队列。

m0_57042151的博客 533

Windows 10/11 零基础配置 SillyTavern 连接 Claude API 完整指南(含 Node.js 环境搭建)

本文提供Windows 10/11系统下零基础配置SillyTavern连接Claude API的完整教程,涵盖Node.js环境搭建、SillyTavern初始化及API连接配置等关键步骤。通过详细的操作指南和实用技巧,帮助用户快速搭建AI聊天界面并优化对话体验,实现与Claude AI的高效交互。

weixin_30642561的博客 134

Linux Centos 7 实现java控制打印机打印文件**

Centos7实现java打印文件

qq_36428133的博客 2327

手把手教你逆向抖店滑块验证码:从抓包到生成captchaBody的完整流程(附Python复现代码)

本文详细解析了抖店滑块验证码的逆向过程,从抓包分析到参数生成,最终用Python完整复现验证流程。涵盖关键接口分析、指纹参数生成、轨迹加密逻辑及核心加密算法实现,帮助开发者突破抖店的多重安全机制,实现高效的人机验证绕过。

weixin_30681121的博客 424

Flink项目基础配置指南

在大数据处理领域,Apache Flink凭借强大的实时流处理和批处理能力,成为众多开发者的首选工具。在日常工作中,开发Flink Jar任务是常见需求,但每次都需重复配置日志、梳理pom依赖、设置打包插件等,流程繁琐且易出错。为提升开发效率,减少重复劳动,将这些基础配置进行整理归纳十分必要。本文将围绕Flink项目的本地日志配置、pom依赖及插件配置展开详细介绍,为开发者提供一套可直接复用的基础配置方案,助力Flink项目高效开发。在Flink项目中,日志是了解任务运行状态、排查问题的重要依据。本地日志配

qq_42773076的博客 1210

得力打印机(DL888D型号)Linux对接——Java+C版

任务由于得力打印机(DL888D型号)不提供Linux版本驱动,其驱动开发商 seagull 只为Windows服务。故需要在Linux下提供能够对接打印机的软件。打印机描述:该型号打印机是用来打印条形码、二维码等黑白图片的打印机(貌似叫热感打印机)。该打印机支持tspl指令。输入:1、输入图像在纸上打印的长、宽(单位 mm),2、要打印的图像输出:将输入的图片居中打印在打印纸上。所需Lib1、l...

qq_27307641的博客 9249

Simulink/Requirements Toolbox 学习(一):概述

编写、导入、导出需求并使需求正式化;两种创建需求的模块:需求编辑器、需求透视;描述需求的方式:文本、图像和关键字;通过导入和导出需求文件,与第三方需求管理工具(例如 Microsoft Word、Microsoft Excel®、IBM DOORS和 IBM DOORS Next)集成。涉及模块:Requirements Eidtor、Requirements Table等;

854

6打印文件|华为od机考

6

weixin_65293439的博客 453

Matlab实战:从零搭建弹道导弹六自由度仿真模型(附完整代码)

本文详细介绍了如何使用Matlab从零搭建弹道导弹六自由度仿真模型,涵盖仿真环境配置、核心运动方程实现、气动力建模及仿真结果分析。通过完整代码示例,帮助读者掌握弹道导弹六自由度仿真的关键技术,适用于航空航天工程和复杂系统建模领域。

x8y9z0的博客 946

从时序迷宫到稳定通信:FSMC配置中的时间参数深度解析与实战避坑指南

本文深入解析STM32 FSMC配置中的时间参数,特别是AddressSetupTime和DataSetupTime的实战配置技巧。通过STM32F407连接SRAM的实际案例,提供从理论计算到CubeMX配置的全流程指南,帮助开发者避免常见时序陷阱,确保稳定通信。

nginx7reverse的博客 81

使用open Office和free spire for xls实现前端展示excel文件和后台打印文件服务。

使用open Office和free spire for xls实现前端展示excel文件和后台打印文件服务。 作为今年的应届生,实习加正式工作1年十来天了,到现在还没写过一点技术性的博客,现在想想还是把在工作遇到的比较有用的问题解决方法简单的写一下会比较好点。 这主要是要解决两个需求,一个是获取生成好的excel文件,将excel文件展示到前端给用户预览。 另一个是通过后台调用打印机将office文件进行打印。 Bzhan 号:24024792(虽然啥都没有,但也许某天会有东西呢。哈哈哈,主要是本人太懒了

xiaoxin_123321的博客 870

Transformer实战(38)——视觉Transformer (Vision Transformer, ViT)

Transformer 在自然语言处理 (NLP) 领域取得了显著成就,在许多不同的任务中都表现出色。在本节中,我们将探索视觉 Transformer (Vision Transformer, ViT) 模型。正如 NLP 领域创建了多种模型一样,视觉领域也开发了多种模型,每种模型都为计算机视觉提供了新的视角。通过本节,将学习如何使用 ViT 等模型进行计算机视觉任务,了解基于 Transformer 的预训练计算机视觉模型的工作原理,以及如何针对特定任务进行微调。

盼小辉丶的博客 2814

Java调用浏览器打开连接网页

package com.yifang.demo; import java.io.File; public class OpenPageDemo { public static void main(String[] args) { try { //String url = "http://www.baidu.com";

hins 3674

K230在原有LVGL控件触摸屏控制的基础上,增加USB鼠标控制!

搭配CanMV图形化编程,中小学生可快速开发“键鼠控制AI小游戏”“智能画板”等趣味项目,降低AI学习门槛;:HDMI屏幕+键鼠组合,直接在开发板上调试代码、修改ISP参数、查看AI推理日志,无需频繁连接电脑;:打造带交互的AI设备(如工业控制面板、智能显示器),鼠标操作菜单、键盘输入指令,体验媲美小型PC;:无网络场景下,通过键盘直接向AI设备录入数据、配置参数,适配野外监测、本地工控等场景。,自动识别、快速响应,完美适配交互控制、参数调试、数据输入等场景。

weixin_47446386的博客 145

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java 打开网页并运行脚本_Java调用浏览器打开网页完整实例

本文实例讲述了Java调用浏览器打开网页的方法。分享给大家供大家参考。具体实现方法如下:package com.yifang.demo;import java.io.File;public class OpenPageDemo {public static void main(String[] args) {try {//String url = "http://www.baidu.com";St...

weixin_36409144的博客 610

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java调用指定浏览器_Java调用浏览器打开网页完整实例

本文实例讲述了Java调用浏览器打开网页的方法。分享给大家供大家参考。具体实现方法如下:package com.yifang.demo;import java.io.File;public class OpenPageDemo {public static void main(String[] args) {try {//String url = "http://www.baidu.com";St...

weixin_42502146的博客 339

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java获取浏览器url_java 打开浏览器 url

public class openBrowers {public static void main(String[] args) {try {//String url = "http://www.baidu.com";String url = "http://www.baidu.com/";java.net.URI uri = java.net.URI.create(url);// 获取当前系统桌...

weixin_32821251的博客 665

java连接浏览器_Java调用浏览器打开连接网页

package com.yifang.demo;import java.io.File;public class OpenPageDemo {public static void main(String[] args) {try {//String url = "http://www.baidu.com";String url = "http://blog.csdn.net/kenhins";ja...

weixin_31922807的博客 457

Java GUI界面打开网页html的两种方式

Java GUI界面打开网页html的两种方式

YoungStar70的博客 8078

java调用网页_Java调用浏览器打开网页

本来是想研究下不使用js,通过java去实现打开新的页面,但是未能解决。弄出个打开浏览器新网页的东西,做个记录,然后再继续寻摸方法实现:package com.demo;import java.io.File;public class OpenPageDemo {public static void main(String[] args) {try {//String url = "http://...

weixin_30247833的博客 225
上一篇: minio安装部署及使用
下一篇: 前端的多种事件
辣椒太少不适合吃
博客等级 码龄5年 2691粉丝 88原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值