Der Benutzer erzeugt einen Druckauftrag. Ein Druckauftrag besteht aus den zu druckenden Daten plus Informationen für den Spooler (z. B. Name des Druckers bzw. der Druckerwarteschlange) und optionalen Informationen für den Filter (z. B. druckerspezifische Optionen).
Für jeden Drucker gibt es eine zugehörige Druckerwarteschlange. Der Zweck des Spoolers ist, Druckaufträge in der Druckerwarteschlange zwischenzuspeichern und wenn der zugehörige Drucker frei ist, die zu druckenden Daten via Filter und Backend an den Drucker zu schicken.
Der Zweck des Filters ist, die zu druckenden Daten (z. B. ASCII, PostScript, PDF, JPEG) in druckerspezifische Daten (z. B. PostScript, PCL, ESC/P) umzuwandeln. Die Fähigkeiten eines Druckers sind in PPD-Dateien beschrieben, d. h. eine solche Datei enthält die druckerspezifischen Optionen mit den zugehörigen Parameter, die nötig sind, um eine solche Option im Drucker zu aktivieren. Das Filtersystem sorgt dafür, dass die vom Benutzer gewählten druckerspezifischen Optionen aktiviert werden.
Wenn ein PostScript-Drucker verwendet wird, wandelt das Filtersystem die zu druckenden Daten in druckerspezifisches PostScript um. Hierzu ist kein spezieller Druckertreiber notwendig. Wenn ein anderer Drucker, der PostScript von sich aus nicht unterstützt, verwendet wird, wandelt das Filtersystem die zu druckenden Daten mit Hilfe von Ghostscript in druckerspezifische Daten um. Hierzu ist ein zum Druckermodell passender Ghostscript-Druckertreiber notwendig. Das Backend bekommt die druckerspezifischen Daten vom Filter und sendet sie weiter an den Drucker.