Skip to content

talesluna/rust-printers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

142 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 job_id = printer.print("42".as_bytes(), PrinterJobOptions::none());
// Result<u64, PrintersError>

Create print job of an file

let job_id = printer.print_file("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 my_printer = get_printer_by_name("my_printer");
// Option<Printer>

Get the default printer

let printer = get_default_printer();
// 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)

About

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

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages