当前位置: 首页 > web >正文

java操作打印机直接打印及详细linux部署(只适用于机器和打印机处于同一个网段中)

一、背景及机器说明

对接的打印机为 京瓷3252ci汉印n31

  • 京瓷3252ci在局域网中可以直接搜索到,很方便
  • 汉印n31这个就比较麻烦了,需要开启共享打印机,linux驱动安装也摸索了一阵

二、java代码

代码其实很简单的,没多少,直接上


/*** 打印工具类** @date 2025/4/15*/
@Slf4j
public class PrintUtils {/*** 打印** @param intput    输入流* @param printName 打印机名字*/public static void print(InputStream intput, String printName) throws Exception {//获取默认打印机或指定打印机PrintService printer = PrintServiceLookup.lookupDefaultPrintService();//遍历打印机列表PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);boolean flag = true;for (PrintService service : services) {log.info("打印机名字:{}", service.getName());if (service.getName().contains(printName)) {printer = service;flag = false;break;}}if (flag) {throw new ServiceException("未找到名字为" + printName + "的指定打印机");}// 创建打印任务DocPrintJob job = printer.createPrintJob();PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();//attributes.add(MediaSizeName.ISO_A4);//设置方向//attributes.add(OrientationRequested.PORTRAIT);// 读取待打印文件(支持文本/PDF/图片)Doc doc = new SimpleDoc(intput, DocFlavor.INPUT_STREAM.AUTOSENSE, null);// 提交打印任务job.print(doc, attributes);}
}

三、window部署

上面代码window跑起来很简单,装下驱动就可以找到对应的打印机,然后写好名字就完事了。
简单说下步骤:
image
image
局域网内的点击添加可以自动下载驱动,就不过多描述了

四、linux

4.1、安装cups

首先要先装个cups,这个是一个可视化安装打印机驱动的界面,可以让我们比较方便的安装驱动及观察打印机状态
centos https://cn.linux-terminal.com/?p=3324
Ubuntu https://blog.csdn.net/syrchina/article/details/126057197
详细的参考上面连接,下面仅供参考(似乎也够了)

sudo apt install cups//修改/etc/cups/cupsd.conf
Listen localhost:631
改为
Port 631//以下行将使 CUPS 显示本地网络上的共享打印机,以便同一网络中的其他计算机可以看到连接到计算机的打印机。
Browsing Off
改为
Browsing On//带有<Location />的都给加上
//要允许同一网络中的其他计算机进行访问,请将 Allow @LOCAL 添加到配置中
<Location /admin>Order allow,deny
</Location>改完后重启下即可
sudo systemctl restart cups

4.2、访问ip:631网站及添加京瓷打印机

添加京瓷打印机‌

  • 在CUPS界面选择Administration > Add Printer
  • 可能需要登录,输入登录linux的账号密码即可
    image
    会显示已经有的打印机,选择
    image
    勾选share,然后continue
    image
    手动选择驱动上传下
    驱动官网
    https://www.kyoceradocumentsolutions.com.cn/support/mfp/download
    image
    下载后是个压缩包,选择global,eu是欧洲的
    image
    image
    选择对应的pdd驱动上传上去即可
    image
    点击add printer就完事了
    image

4.3、添加汉印n31打印机(这个比较麻烦)

因为这个不显示在局域网中,所以需要手动添加

4.3.1、首先找一个window机器来共享这台打印机

不知道为啥,我自己的共享完之后京瓷的驱动失效了,java代码始终调用不到了,最后找官方工具卸载驱动才重新加上(折腾了好几个小时。。。)
共享步骤:点开共享,然后点击网络和共享中心
image
来宾和专用都开启
image
image
设置完使用其他电脑连接试试
image
这样子就会出来了
image
如果不行最好尽快换台电脑试试,之前使用一个同事的电脑(window11)共享,折腾半天就是不行。换台电脑共享几分钟搞定。

4.3.2、linux安装smb协议及驱动

window的共享就是通过smb协议来的,但是一开始在cups页面是没有这个东西的,需要安装下
image

#Ubuntu 
sudo apt install samba
sudo apt install cups-bsd
sudo apt install libcups2 samba-client#centos
sudo yum install samba
sudo yum install cups-client samba-client最后重启下就会出来上面的图片的那个东西了
sudo systemctl restart cups

之后也是老样子,添加驱动
image
弄完之后这里是这样的
status:显示Idle - "File "/usr/lib/cups/filter/raster-tspl" not available: No such file or directory"
而不是像我截图这样子的
image
后来看了一下人家的驱动文件,是包含raster-tspl这个文件的,只需要执行下这个install文件即可
image

//授权
chmod +x install
//运行
./install

4.3.3、尝试打印遇到的问题

问题1

驱动完事了,所以尝试着打印了下,代码没报错,cups上显示
image
不知道为啥,window已经关了账号密码验证了还报这个,没办法,只能在写驱动地址时候加上账号密码,
如下
smb://Administrator:9335118007@192.168.108.123/HPRT N31
对了说下怎么改已有的打印机,在这个下拉框中选。。。
image

问题2

打印又报错
2025年04月18日 星期五 13时47分05秒 "Tree connect failed (NT_STATUS_BAD_NETWORK_NAME)"
简单来说就是打印机名字写错了
可以敲个命令查询下

smbclient -L //192.168.108.123 -U 用户名

image
注意下window我给把共享名字改成了n31,linux这边不认的,只是个comment,名字还是前面那个
空格不能直接敲,要用%20
改成下面这样终于联通了打印机
smb://Administrator:9335118007@192.168.108.123/HPRT%20N31

五、docker部署应用

首先要先创建一个文件client.conf文件,注意:不是cupsd.conf
image

echo "ServerName /var/run/cups/cups.sock" > client.conf

dockerfile文件

FROM registry.cn-beijing.aliyuncs.com/hub-mirrors/openjdk:8-jdk-alpine# 设置工作目录和临时卷
WORKDIR /app
VOLUME /tmp# 安装 cups + 字体(防乱码),如果太慢可以去掉apk update &&
RUN apk update && apk add --no-cache \cups \cups-client \cups-libs \font-noto
# 复制本地编译好的 jar 文件(从target目录)
COPY device-supervision.jar app.jar
COPY 2.pdf .# 设置时区为中国时区
ENV TZ=Asia/Shanghai \#设置中文不乱码的    LANG=C.UTF-8 \LC_ALL=C.UTF-8# 暴露端口
EXPOSE 18881# 设置 Java 运行参数
ENTRYPOINT ["java", \"-Djava.security.egd=file:/dev/./urandom", \"-XX:+UseContainerSupport", \"-XX:MaxRAMPercentage=75.0", \"-jar", \"/app/app.jar"]

docker运行
需要使用–net=host,否则网络是不通的,没法调用打印机

docker run -d --net=host --name test \-v /var/run/cups/cups.sock:/var/run/cups/cups.sock \-v /etc/cups/client.conf:/etc/cups/client.conf:ro \test:0.0.1

六、其他问题

打印时候总是多出一张报错的纸张
image
代码不报任何错误,导致我一直以为还是驱动问题
后来才发现是代码问题,流没处理好

http://www.xdnf.cn/news/1707.html

相关文章:

  • windbg-A complete guide for Advanced Windows Debugging part1
  • 深入解析 Docker 容器进程的 cgroup 和命名空间信息
  • 机器学习 Day14 XGboost(极端梯度提升树)算法
  • window10部署MinerU
  • 电竞俱乐部护航点单小程序,和平地铁俱乐部点单系统,三角洲护航小程序,暗区突围俱乐部小程序
  • 玩转 C++ 算术运算符(五十二)
  • 拼团退款中采用分片处理降低对数据库
  • 关于Spring Boot构建项目的相关知识
  • Mysql的深度分页查询优化
  • 2194出差-节点开销Bellman-ford/图论
  • rk3588 驱动开发(三)第五章 新字符设备驱动实验
  • Android PackageManagerService(PMS)框架深度解析
  • 【4.23号更新,docker可用镜像源】2025最新 Docker 国内可用镜像源仓库地址
  • Linux 服务器运维常用命令大全
  • 性行为同意协议系统网站源码
  • JavaWeb:HtmlCss
  • 无锡SAP实施专家——哲讯智能科技助力企业数字化转型
  • 针对 Spring Boot 应用中常见的查询场景 (例如:分页查询、关联查询、聚合查询) 如何进行 SQL 优化?
  • C++区别于C语言的提升用法(万字总结)
  • 形象解释 HTTP 的四种常见请求方式及其中的区别联系
  • 二叉树进阶的解题思路
  • PostgreSQL-日志管理介绍
  • 如何将极狐GitLab 议题导出为 CSV?
  • 2025顶会:CNN+LSTM+Attention多热点搭配
  • 爬虫学习——使用HTTP服务代理、redis使用、通过Scrapy实现分布式爬取
  • MySQL SQL查询语句执行过程
  • QLExpress 深度解析:构建动态规则引擎的利器
  • 云蝠智能大模型呼叫:AI驱动的通信服务革新与实践
  • 格式工厂:多媒体转换工具
  • Red:1靶场环境部署及其渗透测试笔记(Vulnhub )