cups+ippserver+cups4j 进行ipp 打印测试

发布时间 2023-04-15 18:09:08作者: 荣锋亮

cups 是一个打印标准,ippserver 属于一个测试mock 的ipp 服务(基于软件的),cups4j 是cups 的一个客户端

环境准备

具体配置参考github,实际配置来自ippsample 的测试配置

version: "3"
services:
  ippserver:
    image: dalongrong/ippserver
    hostname: ippserver
    volumes:
      - ./test:/config
      - ./data/print:/print
      - ./data/spool:/spool
      - ./data/tools:/tools
    command: ippserver -C /config -r _print
  cups:
    image: olbat/cupsd
    privileged: true
    ports:
      - "632:631"
    volumes:
      - ./cupsd.conf:/etc/cups/cupsd.conf
      - /var/run/dbus:/var/run/dbus

cups 配置

  • 添加打印机
    参考配置

    打印机信息

     

     

代码集成

  • 核心代码
    使用cups4j 客户端
 
package com.dalong;
 
import org.cups4j.CupsClient;
import org.cups4j.CupsPrinter;
import org.cups4j.PrintJob;
import org.cups4j.PrintRequestResult;
 
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
 
public class App {
 
    public static void main(String[] args) throws Exception {
        CupsClient cupsClient = new CupsClient("127.0.0.1", 632);
        CupsPrinter cupsPrinter = cupsClient.getDefaultPrinter();
        Map<String,String> attr = new HashMap<>();
        attr.put("document-format","application/pdf");
        attr.put("attributes-charset","utf-8");
        InputStream inputStream = new FileInputStream("src/main/resources/v4.pdf");
        PrintJob printJob = new PrintJob.Builder(inputStream).attributes(attr).build();
        PrintRequestResult printRequestResult = cupsPrinter.print(printJob);
        System.out.println(printRequestResult.getJobId());
    }
}
  • 参考效果

 

 

说明

当时测试了一台普通打印机,通过usb 进行连接,发现了一些问题(是可以打印,但是中文是乱码的),同时通过cups 提供的ipp 地址 进行打印是没有问题的
实际还得测试,同时对于直接打印,可以支持的是pdf,图片以及文件。。。,但是对于office 是不能直接支持的,但是可以通过ipp 协议暴露的打印机地址然后
通过office 软件进行打印(选择暴露的打印机即可),以上只是一个简单的测试,基于软件部署环境主要是为了方便测试

参考资料

https://github.com/harwey/cups4j
https://github.com/istopwg/ippsample
https://www.cups.org/
https://github.com/apple/cups
https://www.pwg.org/ipp/everywhere.html
https://github.com/rongfengliang/cups_ippsample_ipp_learning