реклама на сайте
подробности

 
 
> Печать из QT через свой драйвер растрового принтера, Как подключить свой спулер (или сделать печать через свой драйвер)
SM
сообщение Jan 15 2013, 16:31
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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 (я не писатель гуёв, не умею, но вот драйвера, и все прочее, не видимое глазу пользователя - моя стихия)? Принимаются любые советы, примеры, и ссылки на информацию.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
sasamy
сообщение Jan 16 2013, 06:09
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
NULL
сообщение Jan 16 2013, 06:11
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 124
Регистрация: 27-05-05
Из: St.-P
Пользователь №: 5 462



Цитата(SM @ Jan 15 2013, 06:31) *
Я могу с легкостью написать программу (консольную разумеется), которая бы печатала картинку из любого известного формата храния изображений, на базе тест-программы, которой я все это проверял.


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

Ещё форум могу присоветовать профильный:
http://www.prog.org.ru/
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 16 2013, 06:23
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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)? А что, вполне идея. Все гениальное просто sm.gif Спасибо!
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 1 2013, 06:23
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Докладываю по результатам. Все как всегда проще, чем думалось. Надо было всего лишь в QT подпатчить qprintengine_qws.cpp, который уже делает сам почти все, что надо, только записывает результат в файл в виде TIFF, а мне осталось лишь вместо TIFF отправить это в мой /dev/и.т.д., ну и пересобрать QT.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016