|
Печать из QT через свой драйвер растрового принтера, Как подключить свой спулер (или сделать печать через свой драйвер) |
|
|
|
Jan 15 2013, 16:31
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Что есть:
простую часть задачи я уже реализовал (дрова ядра, демоны, железо и общение с ним, в общем не касающееся графики напрямую):
- есть свой драйвер принтера (чисто растрового) в ядре, который представлен как character device, пусть /dev/rlp0. На это устройство можно выводить байты данных, биты которых интерпретируются как черно-белые пиксели, и можно выводить ESC-последовательности, которые интерпретируются как печать пиксельной строки, переданной до этого, переход к следующей строке (шаг движка протяжки вперед), и переход к предыдущей строке (шаг движка назад).
- есть свой простой спулер, который запускается в виде демона, обслуживает очередь печати в виде растровых черно-белых картинок, и имеет функции "добавить растровое изображение в очередь" и "очистить всю очередь и все остановить", которые доступны средствами IPC.
Я могу с легкостью написать программу (консольную разумеется), которая бы печатала картинку из любого известного формата храния изображений, на базе тест-программы, которой я все это проверял.
это все отлажено и работает.
Теперь вот воткнулся в сложную часть, где я даже не понимаю, с какой стороны подойти к вопросу. Нужно сделать, чтобы QT-приложение могло напечатать что-то на этом принтере. Либо через мой спулер (lpr/cups в системе не будет - драйвер для cups-то не проблема, там, в отличие от QT, все понятно, легко и прозрачно, но cups - монстр), либо напрямую на принтер, минуя спулер, что предпочтительнее. Задача видится вроде и несложной - QT сама формирует растровое изображение, и надо его лишь переправить в спулер или драйвер ядра. Но вот как это сделать - мне совершенно непонятно (я тупо смотрел в документацию QT (QPrintEngine), но совершенно не понял, как этому Engine передается изображение, и что она должна с ним сделать по реакции на какой метод). Как написать драйвер, который можно интегрировать в QT (я не писатель гуёв, не умею, но вот драйвера, и все прочее, не видимое глазу пользователя - моя стихия)? Принимаются любые советы, примеры, и ссылки на информацию.
|
|
|
|
|
 |
Ответов
(1 - 4)
|
Jan 16 2013, 06:09
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(SM @ Jan 15 2013, 20:31)  Я могу с легкостью написать программу (консольную разумеется), которая бы печатала картинку из любого известного формата храния изображений, на базе тест-программы, которой я все это проверял. Цитата В операционных системах Windows и Mac OS X QPrinter использует системные драйверы принтеров. В системе Unix он формирует файл PostScript и передает его lp или lpr (или другой программе, установленной функцией QPrinter::setPrintProgram()). QPrinter может также использоваться для генерации файлов PDF, если вызвать setOutputFormat(QPrinter::PdfFormat). http://f1-delphi.ru/books/qt_4_programmiro...uschee_ustroys/
Сообщение отредактировал sasamy - Jan 16 2013, 06:10
|
|
|
|
|
Jan 16 2013, 06:11
|
Частый гость
 
Группа: Свой
Сообщений: 124
Регистрация: 27-05-05
Из: St.-P
Пользователь №: 5 462

|
Цитата(SM @ Jan 15 2013, 06:31)  Я могу с легкостью написать программу (консольную разумеется), которая бы печатала картинку из любого известного формата храния изображений, на базе тест-программы, которой я все это проверял. В качестве варианта: а если и печатать через эту консольную прогу прямо из куте? Ещё форум могу присоветовать профильный: http://www.prog.org.ru/
|
|
|
|
|
Jan 16 2013, 06:23
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(sasamy @ Jan 16 2013, 10:09)  он формирует файл PostScript Это я видел. Но это не наш путь, так как придется в систему собирать еще нечто вроде ghostscript, чтобы получить картинку из postscript. А это лишнее, с учетом того, что QT имеет в себе все средства растеризации. Цитата(NULL @ Jan 16 2013, 10:11)  В качестве варианта: а если и печатать через эту консольную прогу прямо из куте? То есть, отрисовать в память и отправить на принтер, не используя средств печати (QPrinter)? А что, вполне идея. Все гениальное просто  Спасибо!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|