Printers: A printing APIs implementation for unix (cups) and windows (winspool).
Provides all system printers, create and manage print jobs.
See the references in docs.rs.
| 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.
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.
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.
| 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.
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"),
};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)