2022-10-25 CUPS

1.OS打印流程

image.png

2.cups基本概念

CUPS : Common Unix Print System , 通用Unix 打印系统
CUPS 最初是一款独立的产品,后来被 Apple 买断并保持开源。

CUPS 采用 IPP (因特网打印协议) 标准作为打印任务管理的基础,使用 PostScript 打印机描述文件(PDD)作为打印机驱动程序的基础。

3.cupsd

CUPS 的后台进程为 /usr/sbin/cupsd
cupsd 会将缓冲文件通过一系列被称为打印链的进程进行处理,这些进程把缓冲文件转化为目标打印机能够理解的格式。

4.PPD:PostScript 打印机描述文件

PPD:PostScript Printer Description ,PostScript打印机描述。

PPD是一个文本文件,它包含了有关一个特定的打印机的特征和性能的描述,因此它包含如下信息:

支持的纸张大小
可打印区域
纸盒的数目和名称
可选特性,例如附加的纸盒或双面打印单元等
字体
分辨率
打印机驱动程序 解析 PPD文件 来发现这台打印机的可用性能。打印机驱动程序根据这个信息来确立用户界面,另外,PPD文件还包含了使用这些性能所需的PostScript命令,当用户通过驱动程序的用户界面选择一个功能时,例如双面打印或水印打印,就会从PPD文件中提取适用该功能的 PostScript 代码并将其添加到要发送到打印机的PostScript文件中去,这样就可以实现你所选择的打印功能了。

一旦添加了一台打印机配置,/etc/cups/ppd 中就会放置一个以该设备命名的 pdd 文件副本;并且另外两个配置文件还会被修改:/private/etc/cups/printers.conf , /Library/Preferences/org.cups.printers.plist。

5.CUPS安装 编译安装过于繁琐,需要gcc,c++编译依赖

      安装过程过于繁琐,我们使用哦另外一种安装模式;

https://blog.csdn.net/linglongwunv/article/details/5213030

7. 通过yum 安装打印服务 yum install cups

image.png
image.png

7.1 修改配置

cd /etc/cups

image.png

7.2 启动

systemctl restart cups.service

7.3 添加打印机 网络打印机使用AppSocket/HP JetDirect模式

image.png

7.4 配置socket URL

socket://192.168.XXX.XXX:9100

image.png

7.5 填写打印机name ,description,location信息

image.png

7.6 选择斑马打印机

image.png

7.7 选择ZPL

image.png

7.8 设置默认打印机

image.png

8. Java打印服务, windows可以正常运行,Linux不能

http://cn.voidcc.com/question/p-bcfcjrcg-bcd.html

    public JsonResult> getPrinterList() {
        List 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 JsonResult.ok(list);
    }
https://www.nuomiphp.com/eplan/120839.html
我终于找到了一种方法,可以使用jipsi:

URI printerURI = new URI("ipp://SERVER:631/printers/PRINTER_NAME");
IppPrintService svc = new IppPrintService(printerURI);
InputStream stream = new BufferedInputStream(new FileInputStream("image.epl"));
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc myDoc = new SimpleDoc(stream, flavor, null);
DocPrintJob job = svc.createPrintJob();
job.print(myDoc, null);
我不得不承认,对于使用第三方库来执行某些看起来很简单的事情(例如打印到特定打印机)感到失望。

https://github.com/peizihui/jspi

https://github.com/harwey/cups4j

https://github.com/harwey/cups4j

9.4 CupsClient 原始打印,打印cups-raw

https://www.javaroad.cn/questions/341894

CupsClient cupsClient = new CupsClient(IP, port);
URL url = new URL(printerName);
CupsPrinter cupsPrinter = cupsClient.getPrinter(url);
HashMap map = new HashMap<>();
map.put("document-format", "application/vnd.cups-raw");
PrintJob printJob = new PrintJob.Builder(bytes).attributes(map).build();
PrintRequestResult printRequestResult = cupsPrinter.print(printJob);

你可能感兴趣的:(2022-10-25 CUPS)