talesluna
rust-printers
Rust

A rust library to printing APIs implementation for unix (cups) and windows (winspool).

Last updated Apr 26, 2026
101
Stars
35
Forks
1
Issues
0
Stars/day
Attention Score
44
Language breakdown
No language data available.
โ–ธ Files click to expand
README

Printers: A printing APIs implementation for unix (cups) and windows (winspool).

Provides all system printers, create and manage print jobs.

Build and tests Crates.io Version Crates.io License docs.rs Crates.io Downloads (recent)

Documentation

See the references in docs.rs.

๐Ÿ› ๏ธ Features

| Feature | Status | | :----------------------------------------------------- | :----: | | List available printers | โœ… | | List printer jobs | โœ… | | Manage printer jobs (pause, resume, cancel, restart) | โœ… | | Print plain text | โœ… | | Print PDF, images etc... (*1) | โœ… | | Converters (Ghostscript) | โœ… | | DOCx / XLS / PPTx converter | โณ | | Converter pipeline (doc -> pdf -> ps) | โณ |

*1 If necessary, you can raster the file using converters supported by the lib, such as Ghostscript. See the examples below.

๐Ÿ”„ Ghostscript Converter

The Ghostscript converter allows you to raster or transform files (PDFs, PostScript, images) into different output formats before sending them to a printer. This is useful when a printer does not natively support a given file format, or when you need to control the output resolution and format.

How it works

The converter spawns Ghostscript as a child process, pipes the file content via stdin, and reads the converted output from stdout. This means it works efficiently without creating temporary files on disk.

Supported output devices

| Convenience method | Ghostscript device | Description | | :------------------------------------------------------- | :----------------- | :------------------------ | | GhostscriptConverterOptions::ps2write() | ps2write | PostScript output | | GhostscriptConverterOptions::png16m() | png16m | 24-bit color PNG | | GhostscriptConverterOptions::pngmono() | pngmono | Monochrome PNG | | GhostscriptConverterOptions::tiffg4() | tiffg4 | TIFF G4 fax encoding | | GhostscriptConverterOptions::from_device("...") | any | Custom Ghostscript device |

You can also configure the output DPI (default: 500) and a custom path to the Ghostscript executable via GhostscriptConverterOptions.

Host dependency required

The Ghostscript converter requires the Ghostscript executable to be installed on the host operating system. It is not bundled with this library. The library invokes gs on Unix (Linux/macOS) or gswin64c.exe on Windows as an external process. If Ghostscript is not installed or not in your PATH, the converter will return a PrintersError.

Installation by platform:

| Platform | Install command | Executable used | | :-------------------- | :----------------------------------------------------------------------------------------------- | :-------------- | | Linux (Debian/Ubuntu) | sudo apt-get install ghostscript | gs | | macOS | brew install ghostscript | gs | | Windows | Install from ghostscript.com and add to PATH | gswin64c.exe |

If Ghostscript is installed in a non-standard location, you can specify the path via the command option:

let options = GhostscriptConverterOptions {
    command: Some("/usr/local/bin/gs"),
    dpi: Some(300),
    device: Some("ps2write"),
};

๐Ÿ‘‡ Examples

Get all available printers

let printers = get_printers();
// Vec<Printer>

Create print job of an byte array

let jobid = printer.print("42".asbytes(), PrinterJobOptions::none());
// Result<u64, PrintersError>

Create print job of an file

let jobid = printer.printfile("my_file/example/path.pdf", PrinterJobOptions {
    name: Some("My print job"),
    raw_properties: &[
        ("copies", "2"),
        ("document-format", "RAW"),
    ],
    converter: Converter::Ghostscript(GhostscriptConverterOptions::ps2write()),
});
// Result<u64, PrintersError>

Get a printer by name

let myprinter = getprinterbyname("my_printer");
// Option<Printer>

Get the default printer

let printer = getdefaultprinter();
// Option<Printer>

Manage state of printer job

// Pause
printer.pause_job(123);

// Resume printer.resume_job(123);

// Restart printer.restart_job(123);

// Cancel printer.cancel_job(123)

๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท talesluna/rust-printers ยท Updated daily from GitHub