Summary: | Переделать систему печати | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Виталий Перов <vitperov> |
Component: | Печать ; Диалог печати | Assignee: | Виталий Перов <vitperov> |
Status: | CLOSED INVALID | QA Contact: | |
Severity: | normal | ||
Priority: | P4 | CC: | lav |
Version: | 1.0.10 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 1185 |
Description
Виталий Перов
2009-04-14 18:32:35 MSD
Сейчас в wine уже есть кусок кода (функция ScheduleJob), который может использовать функции cups. На сайте CUPS: http://www.cups.org/documentation.php/api-cups.html очень хорошо документированы функции печати. Думаю вполне реально перейти на их использование. в wine есть вспомогательная функция schedule_cups, которая печатает через cupsPrintFile. Проблема в том, что cupsPrintFile требует во входных параметрах указывать имя файла. Т.е перед её вызовом должен быть уже сформированный файл. Есть ещё один способ печати через CUPS: 1) создаётся задание cupsCreateJob 2) в начале каждого документа задание вызывается cupsStartDocument 3) сам документ записывается с помощью cupsWriteRequestData (здесь я плохо разобрался) 4) документ завершается cupsFinishDocument. Если я всё правильно понял, то это то, что надо. Но есть несколько замечаний: 1) кроме jobId, при вызове Start и Finish нужно ещё передавать dest->name. 2) Пока не понятно что такое Destination name (dest->name), но это точно не название документа 3) при вызове cupsWriteRequestData не указывается ни dest->name, ни jobID. Отсюда следует, что 2 документа одновременно посылать на печать нельзя. Разобрался с DestinationName. Это имя принтера, на который производится печать. Рекомендуется получать его с помощью функций cups: cups_dest_t *dests; int num_dests = cupsGetDests(&dests); cups_dest_t *dest = cupsGetDest("name", NULL, num_dests, dests); /* do something wiith dest */ cupsFreeDests(num_dests, dests); Но теперь возникла проблема с options. В документации сказано "options members contain the default options for a particular destination, along with several informational attributes about the destination as shown in Table 1". Все опции в таблице1 предназначены для получении информации о принтере. Про остальные опции ничего не сказано. Ещё в документации сказано, что можно добавлять свои опции, но не понятно зачем. А вообще, я предполагал, что через опции можно задавать количество копий и разбивку по копиям, но как это сделать, и возможно ли это вообще - пока не ясно. Как я догадываюсь, количество копий и разбивка по копиям передаются через аттрибуты NumCopies и Collate. Для проверки необходимо написать тестовую программу. Начал писать тест. Столкнулся с проблемой: в cups/cups.h отсутствуют некоторые константы типа CUPS_HTTP_DEFAULT, а также прототипы функций cupsCreateJob и др. Оказалось, что данные команды и константы появились только в новой версии CUPS. Если я правильно понимаю, то бага 1185 решена. Тогда отпадает надобность что-либо переделывать |