A rust library to printing APIs implementation for unix (cups) and windows (winspool).
Printers: A printing APIs implementation for unix (cups) and windows (winspool).
Provides all system printers, create and manage print jobs.
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)