#printing #print #cups #linux #winspool

marlon-printers

这是从'printers'分支出来的,目的是学习Rust。

2个稳定版本

2.0.1 2024年3月21日

#188操作系统

MIT 许可证

24KB
456

打印机

打印机 不是一个打印机驱动或CUPS的库。打印机是一个简单的库,用于调用Unix (cups) 和Windows (winspool) 系统的打印机API。

打印机可以提供系统上可用的打印机列表,并执行文档打印。

行为

返回可用打印机的向量

printers::get_printers() -> Vec<Printer>

在写入临时文件后请求打印

printers::print(Printer, &[u8]) -> Job
printer.print(&[u8]) -> Job

从路径请求打印特定文件

printers::print_file(Printer, &str) -> Job
printer.print_file(&str) -> Job

尝试通过名称获取并返回单个打印机

printers::get_printer_by_name(&str) -> Option<Printer>

注意:get_printer_by_name是一个简单的工具,这个函数只是对get_printers()的结果应用过滤器。它们将在未来得到改进,以更具性能

示例

use printers;

fn main() {


    // Vector of system printers
    let printers = printers::get_printers();

    // Print directly in all printers
    for printer in printers.clone() {

        println!("{:?}", printer);

        let status1 = printer.print("42".as_bytes(), Some("Everything"));
        println!("{:?}", status1);
        
        // Note: When you don't give the job_name
        // the file path will be that name by default
        let status2 = printer.print_file("/path/to/any.file", None);
        println!("{:?}", status2);

    }

    // Print directly by printer name
    printers::print("printer-a", "42".as_bytes(), Some("Everything"));
    printers::print_file("printer-b", "/path/to/any.file", Some("My Job"));

    // Try printer by name
    let test_printer = printers::get_printer_by_name("test");
    println!("{:?}", test_printer);

}

系统要求

Windows

对于Windows,将使用winspool API检索打印机和PowerShell将文档发送到打印机。

注意:由于一些复杂的原因,打印操作仍然使用PowerShell执行。如果您想合作实现打印文档的winspool,您的贡献将非常受欢迎。

Unix

对于Unix,需要安装cups服务。

依赖项

~43KB