Типично в линуксе принято, что "принтер" (верней CUPS или кто-то
вместо него) принимает от программ PostScript-файл и рендерит его
(с помощью "драйвера" принтера) в язык управления принтером
(специфичный для фирмы, HPGL, или тот же PostScript) и отправляет
на принтер... Если идут крякозябры, то есть подозрение, что
печатается PostScript напрямую, а принтер его не понимает. Из PDF
обычно генерируется тот же PostScript и далее как описано. Но сам
по себе PDF является подмножеством PostScript и очень теоретически может распечататься сразу...
Начать можно с того, что используется для печати (типично CUPS). Посмотреть его логи (может там уже проблема), посмотреть что непосредственно посылается на принтер (через tcpdump сдампить), и что посылается на CUPS от программ (может сырой текст, что объясняет крякозябры). Программы понимают что печатать и куда из анализа /etc/printcap (в старую эпоху) и через libcups (которая перечисляет принтеры известные CUPS).
Что должно быть:
1) программа должна в CUPS отправлять postscript;
2) CUPS должен данный postscript с помощью "фильтра" рендерить в файл для принтера (и оставлять запись в логе);
3) файл для принтера, на языке принтера, должен отправляться на принтер...
Проверить шаги 2 и 3 можно вручную, с помощью ippeveprinter или cupsfilter преобразовав postscript (который можно получить с помощью enscript, pdf2ps из состава ghostscript...) в файл принтера и отправив его, с помощью netcat, на нужный порт роутера.
Про взаимодействие CUPS с программами не скажу. Вначале убедится, что административный интерфейс CUPS в состоянии напечатать test page ( http://localhost:631 ). Если способен, а из программ не печатает -- проблема в пункте 1. А если не печатает, то скорей проблема в пунктах 2 и 3. И скорей попросту драйвер не тот.