Java程序在Linux容器中无驱动通过网络打印点阵打印机原始文本
直接通过网络向Epson LQ-590发送原始文本打印方案
核心结论
完全可以通过静态IP+端口直接向Epson LQ-590发送原始文本实现打印,无需安装任何驱动,轻量化满足需求。
端口相关问题
- 绝大多数网络打印机(包括Epson LQ-590)默认监听9100端口(基于RAW打印协议),这个端口是厂商预设的固定值,无需手动配置。
- 你可以通过打印机的Web管理界面(浏览器输入打印机静态IP)查看或修改端口设置,一般保持默认9100即可。
- 端口并非自动分配,是固定的预设监听端口。
具体实现步骤
1. 配置打印机静态IP
通过打印机物理面板进入网络设置菜单,设置静态IP、子网掩码和网关,确保Linux容器所在服务器能ping通该IP(验证网络可达性)。
2. Java代码实现(轻量化)
直接通过Socket连接打印机的IP和9100端口,将格式化后的原始文本写入OutputStream即可,无需依赖任何打印驱动或框架。示例代码如下:
import java.io.OutputStream; import java.net.Socket; public class RawPrinter { public static void printRawText(String printerIp, int port, String content) { // 匹配打印机默认编码,Epson LQ-590通常默认GBK try (Socket socket = new Socket(printerIp, port); OutputStream out = socket.getOutputStream()) { // 写入打印内容 out.write(content.getBytes("GBK")); out.flush(); // 发送结束指令:额外换行让打印机走纸到下一页起始位置 out.write("\r\n\r\n".getBytes("GBK")); out.flush(); } catch (Exception e) { // 根据实际需求处理异常,比如日志记录 e.printStackTrace(); } } public static void main(String[] args) { // 替换为你的打印机静态IP String printerIp = "192.168.3.10"; int printerPort = 9100; // 自定义格式化原始文本 String printContent = "订单编号: 20240520001\n" + "客户姓名: 张三\n" + "商品名称: 测试商品\n" + "-------------------------\n"; printRawText(printerIp, printerPort, printContent); } }
关键注意事项
- 编码匹配:如果打印出现乱码,尝试将编码改为
UTF-8,或在打印机Web界面查看并设置对应编码。 - 格式扩展:如果需要简单格式控制(如加粗、行距调整),可以使用Epson的ESC/POS控制指令,例如:
- 开启加粗:
out.write(new byte[]{0x1B, 0x45}); - 关闭加粗:
out.write(new byte[]{0x1B, 0x46}); - 设置行距:
out.write(new byte[]{0x1B, 0x33, 0x10});(设置行距为16点)
- 开启加粗:
- 容器网络:确保Linux容器的网络模式能访问打印机所在网段(例如使用host模式,或容器所在虚拟网络与打印机路由可达),同时服务器防火墙需放行9100端口的出站请求。
内容的提问来源于stack exchange,提问作者Dilip Raj Baral
相关产品推荐
相关产品推荐

