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

设备:Hp LaserJet Pro MFP M126nw 打印机
操作系统: Centos7
yum源:163Centos7
cups版本: cups-1.6.3-51.el7.x86_64
hplip版本: 3.22.6
jdk:1.8
其余依赖: gcc、GUI库

操作步骤:
0.安装Centos的GUI
https://blog.csdn.net/babytiger/article/details/109563376 参考这篇文章
1.替换yum源并更新库,具体操作可以百度
2.yum install cups
3.systemctl start cups
前往
https://sourceforge.net/projects/hplip/files/hplip/3.22.6/
下载相应的tar.gz包,上传到服务器解压
tar -xjvf hplip-3.22.6.tar.gz
之后在解压后的路径/ppd/hpcpus 复制到 /usr/lib/cups/filter/下即可
也可用命令

 find / -name  hpcups*

查找
CUPS给Unix/Linux用户提供了一种可靠有效的方法来管理打印。它支持IPP,并提供了LPD,SMB(服务消息块,如配置为微软WINDOWS的打印机)、JetDirect等接口。CUPS还可以浏览网络打印机。
执行上述命令后,可以在浏览器打开 http://localhost:631用来配置网络打印机
4.安装 hplip依赖

yum install hplip-* -y
yum install gcc
yum install libusb  yum install libusb-devel(尤其是提示缺少libusb库的时候)

5.安装hplip
从https://sourceforge.net/projects/hplip/files/hplip/ 下载相应版本的 hplip.run文件 ,,run文件是一种自动安装的文件,相较于编译安装更加便捷,推荐3.22.6版本,3.17.11之前使用的是plug插件来作为驱动,之后的使用了hpcpus最为驱动链接
执行

sh hplip-3.22.6.run

一路选择分别是
y y a y y y y u y d(由于网络原因大概率下载不到最新的驱动,等待一会即可) y i u
接下来是重点部分

第三个红框输入 惠普打印机的 ip
之后点击下一步


这里可以i输入打印机的名称以及相应的描述信息
之后选择 Add Printer 后,添加完成
前往http://localhost:631页面
我因为已经装过几次了,所以不需要再注册账户了,否则的话第一次安装cups需要 注册相应的账号

在printers一栏会显示刚刚安装上的打印机,如果status一栏显示 idle不显示任何驱动则表明目前为止安装成功
如果显示
/usr/lib/cups/filter/hpcpus 不存在的话则,前往
https://sourceforge.net/projects/hplip/files/hplip/3.22.6/
下载相应的tar.gz包,上传到服务器解压

tar -xjvf hplip-3.22.6.tar.gz

之后在解压后的路径/ppd/hpcpus 复制到 /usr/lib/cups/filter/下即可
也可用命令 查找

 find / -name  hpcups*

之后选择


双击

打印测试也,如无意外可正常打印,至此Centos7链接打印机成功
下方附带Java的测试代码

package com.datawells.utils;import lombok.SneakyThrows;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPrintable;
import org.apache.pdfbox.printing.Scaling;import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
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.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;public class PrintUtils {public static void main(String[] args) throws Exception {String pdfFile = "E:\\a.pdf";//文件路径// File file = new File(pdfFile);System.out.println(findPrints().toString());URL url = new URL("url");File file =  urlToFile(url);String printerName ="HP_LaserJet_Pro_MFP_M126nw";// "HP LaserJet Pro MFP M126nw";//打印机名包含字串//HP_LaserJet_Pro_MFP_M126nwPDFprint(file,printerName);}@SneakyThrowspublic static void test(){String pdfFile = "E:\\a.pdf";//文件路径// File file = new File(pdfFile);System.out.println(findPrints().toString());URL url = new URL("url");File file =  urlToFile(url);String printerName = "1";//打印机名包含字串System.out.println("进入打印方法");PDFprint(file,printerName);}public static List<String> findPrints() {List<String> list = new ArrayList<>();HashPrintRequestAttributeSet requestAttributeSet = new HashPrintRequestAttributeSet();DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;//查找所有的可用的打印服务System.out.println("查找所有的可用的打印服务");PrintService[] printService = PrintServiceLookup.lookupPrintServices(flavor, requestAttributeSet);if (printService == null || printService.length == 0) {System.out.println("未找到可用的打印机列表");}if (printService != null) {for (PrintService print : printService) {list.add(print.getName());}}return list;}public static File urlToFile(URL url) {InputStream is = null;File file = null;FileOutputStream fos = null;try {file = File.createTempFile("tmp", null);URLConnection urlConn = null;urlConn = url.openConnection();is = urlConn.getInputStream();fos = new FileOutputStream(file);byte[] buffer = new byte[4096];int length;while ((length = is.read(buffer)) > 0) {fos.write(buffer, 0, length);}return file;} catch (IOException e) {return null;} finally {if (is != null) {try {is.close();} catch (IOException e) {}}if (fos != null) {try {fos.close();} catch (IOException e) {}}}}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) {// 查找并设置打印机//获得本台电脑连接的所有打印机System.out.println("获得本台电脑连接的所有打印机");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;}}System.out.println("匹配指定打印机");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, 842int width = 595;int height = 842;// 设置边距,单位是像素,10mm边距,对应 28pxint 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;}// 传入文件和打印机名称public static void JPGPrint(File file, String printerName) throws PrintException {if (file == null) {System.err.println("缺少打印文件");}InputStream fis = null;try {// 设置打印格式,如果未确定类型,可选择autosenseDocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG;// 设置打印参数PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();aset.add(new Copies(1)); //份数//aset.add(MediaSize.ISO.A4); //纸张// aset.add(Finishings.STAPLE);//装订aset.add(Sides.DUPLEX);//单双面// 定位打印服务PrintService printService = null;if (printerName != null) {//获得本台电脑连接的所有打印机PrintService[] printServices = PrinterJob.lookupPrintServices();if (printServices == null || printServices.length == 0) {System.out.print("打印失败,未找到可用打印机,请检查。");return;}//匹配指定打印机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) {System.out.print("打印失败,未找到名称为" + printerName + "的打印机,请检查。");return;}}fis = new FileInputStream(file); // 构造待打印的文件流Doc doc = new SimpleDoc(fis, flavor, null);DocPrintJob job = printService.createPrintJob(); // 创建打印作业job.print(doc, aset);} catch (FileNotFoundException e1) {e1.printStackTrace();} finally {// 关闭打印的文件流if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
}

Linux Centos 7 实现java控制打印机打印文件**相关推荐

  1. linux文件格式 磁盘修复6,linux(centos)下ext4硬盘格式误删文件后的恢复(testdisk与photorec的使用)...

    在使用winscp上传服务器图片时,由于不小心误删了相似的一个目录下的图片文件,正好在本地有没有这个文件夹的图片备份,所以只好寻找linux(centos)下的文件恢复工具. 在成功恢复完所在目录的图 ...

  2. 【满分】【华为OD机试真题2023 JAVA】 打印文件

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 打印文件 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 有5台打印机打印文件,每台打印机有自己的待打印队列.因为打印的 ...

  3. Linux(Centos)之安装Java JDK及注意事项

    1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a 解释:如果有x86_64就是64位的,没有 ...

  4. (转)Linux(Centos)之安装Java JDK及注意事项

    场景:天下事有难易乎?为之,则难者亦易矣:不为,则易者亦难矣.人之为学有难易乎?学之,则难者亦易矣:不学,则易者亦难矣. 1 准备工作 下面配置jdk的方式在具有root权限时候能够执行.如果没有ro ...

  5. Linux CentOS 7 安装 JAVA(jdk-8u181-linux-x64)

    1.下载JDK 官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 将该页面拉至最下方,点击图中Jav ...

  6. linux怎样删除定时任务,Linux(CentOS)使用定时任务删除Tomcat日志文件

    1. 查看定时任务 命令:crontab -l crontab -l 2. 编辑定时任务 命令:crontab -e HELL=/bin/bash PATH=/sbin:/bin:/usr/sbin: ...

  7. Linux centos+selenium+firefox+java (无图形界面)获取动态网页

    一.环境 Centos7.2 二.安装步骤 安装Firefox (2019-06-03日安装,centos7 下的firefox为 60 版本) yum install firefox firefox ...

  8. linux centos 卸载安装java jdk

    1.首先使用 java 或 javac 检查是否已经安装了jdk java 2.如果有检查你的jdk版本 java -version 3.查看jdk rpm -qa|grep java rpm -qa ...

  9. linux移动新建文件夹,Linux(centos)新建,删除,移动文件夹和文件的命令

    1.新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir /home/test 2.新建文本 在home下新建一个test.sh脚本 vi / ...

最新文章

  1. [译]Web Inspector开始支持CSS区域
  2. tcpdump for Android 移动端抓包
  3. cac会议投稿难度大吗_成考高升专难度大吗?考试通过率怎么样?
  4. react 实现数据双向绑定
  5. 张新波 | 十面埋伏 - 论大数据风控技术体系的构建
  6. Android 横竖屏切换时 Dialog 布局自适应
  7. eclipse 环境下整合 struts2+spring+hibernate 开发web应用常见问题及解答
  8. SqlServer系列笔记——数据类型转换
  9. 【前端开发】前端引入公共部分footer header的几种方法,及iframe自适应高度js
  10. 把ueditor的 p 标签 改成a标签_每周一签·35 | 云标签使用常见问题(QA)
  11. 计算机ip保留地址,ip地址显示为保留地址怎么解决
  12. 三维点云数据处理软件供技术原理说明_三维点云数据获取方法及获取系统技术方案...
  13. 计算机在室内设计的应用,计算机辅助设计软件在室内设计教学中的应用
  14. Java进阶篇设计模式之四 -----适配器模式和桥接模式
  15. 自制蹭网工具(全套-修改电脑MAC地址、IP、获取局域网内别人的MAC和IP)
  16. 计算机二级C语言-A程序填空题
  17. 交通 流量 时间序列预测,神经网络 机器学习 BPNN
  18. 数据库视图有什么作用
  19. aspose-words 解决Linux word转pdf 乱码和出现小方块问题
  20. [野火]一种Cortex-M内核中的精确延时方法-ns级别-DWT

热门文章

  1. 【FastGAN】★Towards Faster and Stabilized GAN Training for High-fidelity Few-shot Image Synthesis
  2. Docker的降维打击是怎么利用天时地利人和的?看这一篇就够了
  3. 如何快速的自建 DoH ( DNS over HTTPS) 服务
  4. 2021牛客暑假多校第二场 K题—Stack (链表)
  5. 从零开始用 Windows C++ 桌面程序制作方舟同人游戏(一)
  6. 如何练成某一领域的高手
  7. 初入python世界——python基础语法
  8. 图解Fiddler如何抓手机APP数据包【超详细】
  9. 计算机平均数据传输速率怎么算,如何计算总线数据传输速率
  10. 数值分析思考题(钟尔杰版)参考解答——第七章