Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Печать из QT через свой драйвер растрового принтера
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
SM
Что есть:

простую часть задачи я уже реализовал (дрова ядра, демоны, железо и общение с ним, в общем не касающееся графики напрямую):

- есть свой драйвер принтера (чисто растрового) в ядре, который представлен как character device, пусть /dev/rlp0. На это устройство можно выводить байты данных, биты которых интерпретируются как черно-белые пиксели, и можно выводить ESC-последовательности, которые интерпретируются как печать пиксельной строки, переданной до этого, переход к следующей строке (шаг движка протяжки вперед), и переход к предыдущей строке (шаг движка назад).

- есть свой простой спулер, который запускается в виде демона, обслуживает очередь печати в виде растровых черно-белых картинок, и имеет функции "добавить растровое изображение в очередь" и "очистить всю очередь и все остановить", которые доступны средствами IPC.

Я могу с легкостью написать программу (консольную разумеется), которая бы печатала картинку из любого известного формата храния изображений, на базе тест-программы, которой я все это проверял.

это все отлажено и работает.

Теперь вот воткнулся в сложную часть, где я даже не понимаю, с какой стороны подойти к вопросу. Нужно сделать, чтобы QT-приложение могло напечатать что-то на этом принтере. Либо через мой спулер (lpr/cups в системе не будет - драйвер для cups-то не проблема, там, в отличие от QT, все понятно, легко и прозрачно, но cups - монстр), либо напрямую на принтер, минуя спулер, что предпочтительнее. Задача видится вроде и несложной - QT сама формирует растровое изображение, и надо его лишь переправить в спулер или драйвер ядра. Но вот как это сделать - мне совершенно непонятно (я тупо смотрел в документацию QT (QPrintEngine), но совершенно не понял, как этому Engine передается изображение, и что она должна с ним сделать по реакции на какой метод). Как написать драйвер, который можно интегрировать в QT (я не писатель гуёв, не умею, но вот драйвера, и все прочее, не видимое глазу пользователя - моя стихия)? Принимаются любые советы, примеры, и ссылки на информацию.
sasamy
Цитата(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/
NULL
Цитата(SM @ Jan 15 2013, 06:31) *
Я могу с легкостью написать программу (консольную разумеется), которая бы печатала картинку из любого известного формата храния изображений, на базе тест-программы, которой я все это проверял.


В качестве варианта:
а если и печатать через эту консольную прогу прямо из куте?

Ещё форум могу присоветовать профильный:
http://www.prog.org.ru/
SM
Цитата(sasamy @ Jan 16 2013, 10:09) *
он формирует файл PostScript

Это я видел. Но это не наш путь, так как придется в систему собирать еще нечто вроде ghostscript, чтобы получить картинку из postscript. А это лишнее, с учетом того, что QT имеет в себе все средства растеризации.

Цитата(NULL @ Jan 16 2013, 10:11) *
В качестве варианта:
а если и печатать через эту консольную прогу прямо из куте?


То есть, отрисовать в память и отправить на принтер, не используя средств печати (QPrinter)? А что, вполне идея. Все гениальное просто sm.gif Спасибо!
SM
Докладываю по результатам. Все как всегда проще, чем думалось. Надо было всего лишь в QT подпатчить qprintengine_qws.cpp, который уже делает сам почти все, что надо, только записывает результат в файл в виде TIFF, а мне осталось лишь вместо TIFF отправить это в мой /dev/и.т.д., ну и пересобрать QT.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.