#printing #print #cups #ipp #lpd

sys cups-sys

对CUPS打印库的低级接口

4 个版本

使用旧的 Rust 2015

0.1.4 2020年4月29日
0.1.3 2017年9月15日
0.1.2 2017年9月15日
0.1.1 2017年8月5日
0.1.0 2017年7月27日

#5 in #ipp

每月下载量 36

MIT/Apache

10KB
106 代码行

cups-sys Build Status

Rust FFI 绑定到 CUPS.

背景

CUPS 是由 Apple Inc. 开发的基于标准的开源打印系统,用于 macOS 和其他类 UNIX 操作系统。CUPS 使用互联网打印协议 (IPP) 以支持本地和网络打印机的打印。

此库 (cups-sys) 为您系统上安装的 CUPS 库提供低级接口。绑定是通过 bindgen 项目在构建时生成的。

只想从 Rust 打印

use std::mem;
use std::ptr;
use cups-sys::*;

unsafe {
  let mut dests: *mut cups_dest_t = mem::zeroed();
  let num_dests = cupsGetDests(&mut dests as *mut _);
  // Get the default printer.
  let destination: cups_dest_t = cupsGetDest(ptr::null(), ptr::null(), num_dests, dests);
  // Print a real page.
  let job_id: i32 = cupsPrintFile(
      (*destination).name,
      // File to print.
      CString::new("/path/to/file")
          .unwrap()
          .as_ptr(),
      // Name of the print job.
      CString::new("Test print job")
          .unwrap()
          .as_ptr(),
      (*destination).num_options,
      (*destination).options
  );
  println!("{}", job_id);
  cupsFreeDests(num_dests, dests);
}

对于纯 Rust IPP 实现,请查看 ipp.rs.

文档

自动生成的 FFI 参考文档可以在 https://legneato.github.io/cups-sys/cups_sys/ 找到。

原始 CUPS API 文档(包含示例)可以在 https://www.cups.org/doc/api-cups.html 找到。

示例用法

unsafe {
    let mut dests: *mut cups_dest_t = mem::zeroed();
    let num_dests = cupsGetDests(&mut dests as *mut _);
    let destinations = std::slice::from_raw_parts(dests, num_dests as usize);

    for destination in destinations {
        let c_printer_name = CStr::from_ptr((*destination).name);
        let printer_name = c_printer_name.to_string_lossy();

        let c_make_and_model = cupsGetOption(
            CString::new("printer-make-and-model").unwrap().as_ptr(),
            destination.num_options,
            destination.options
        );
        let make_and_model = CStr::from_ptr(c_make_and_model).to_string_lossy();
        println!("{} ({})", printer_name, make_and_model);
    }

    cupsFreeDests(num_dests, dests);
}

许可

cups-sys 根据您的选择,受以下任一许可证的约束

无运行时依赖

~0–2.3MB
~44K SLoC