Summary: | WINE формирует неправильные задания для двусторонней печати при альбомной ориентации листа | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Денис Баранов <baraka> |
Component: | Печать ; Диалог печати | Assignee: | Евгений <evcalipt> |
Status: | CLOSED FIXED | QA Contact: | Константин Кондратюк <kondratyuk> |
Severity: | major | ||
Priority: | P1 | CC: | baraka, kondratyuk, lav, oren-ibc |
Version: | unspecified | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Deadline: | 2012-10-18 |
Description
Денис Баранов
2012-09-24 19:24:53 MSK
Думал над решением Добавить в CUPS принтер поддерживающий двустороннюю печать и постскрипт. Какая модель принтера у пользователя? HP 2055D Как воспроизвести: 1) зайти в бутылку: swine -h eter-2.0 autotest/1c82_1 --force 2) перейти в пакпку 1с82 и запустить WINEDEBUG=+winspool wine 1cv8.exe 2> 1111aaa_log_duplex 3) покликать далее в правом нижнем углу, открыть вкладку Предприятие, справа внизу Отчеты, нажать ОСВ, нажать печать, выбрать дополнительные настройки печати, например альбомная long-edge 4) открыть файл и поискать по слову lpr в выводе видно, что альбомная ориентация и книжная не меняют формат lpr запроса, возможно проблема в этом, возможно где-то другом месте *альбомная шорт trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge *альбомная лонг trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-long-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-long-edge *книжная шорт trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge *книжная лонг trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-long-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ'. -# 1 -o Collate=False -o sides=two-sided-long-edge *книжная офф trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=one-sided"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=one-sided Как воспроизвести: 1) зайти в бутылку: swine -h eter-2.0 autotest/1c82_1 --force 2) перейти в пакпку 1с82 и запустить WINEDEBUG=+winspool wine 1cv8.exe 2> 1111aaa_log_duplex 3) покликать далее в правом нижнем углу, открыть вкладку Предприятие, справа внизу Отчеты, нажать ОСВ, нажать печать, выбрать принтер duplex, выбрать дополнительные настройки печати, например альбомная long-edge 4) открыть файл и поискать по слову lpr в выводе видно, что альбомная ориентация и книжная не меняют формат lpr запроса, возможно проблема в этом, возможно где-то другом месте. Так же не влияет выбор принтера *альбомная шорт trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge *альбомная лонг trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-long-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-long-edge *книжная шорт trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge *книжная лонг trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-long-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ'. -# 1 -o Collate=False -o sides=two-sided-long-edge *книжная офф trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=one-sided"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=one-sided Не ясно как тестировать дальше без наличия двустороннего принтера, в lpr запросе не идет речи об ориентации листа. Я спрашивал у Дениса какие есть варианты еще, он никаких других способов проверки не предложил. Разбирался с задачей. В wwo ошибок еще больше, чем у нас. Это и понятно - Виталий Перов делал хаки в winspool. Необходимо тестирование на стороне клиента, которое разбивается на 3 этапа: I Этап. Создание файла PostScript. Описание для пользователя: 1. Зайти в 1с82 (через wine, естественно), выбрать документ для печати, выбрать интересующий принтер, в свойствах принтера нужную ориентацию (книжная, альбомная - portrait, landscape) и нужный вариант двухсторонней печати (long-edge, short-edge). 2. Выбрать настройку "печатать в файл" и начать напечатать файл. (можно указать любое расширение файла) 3. В итоге получится файл PostScript. Он то нам и нужен. II Этап. Передача файла PostScript на печать командой lpr с нужными параметрами. Далее: 1. Полученный файл запустить на печать в bash (не в wine) командой lpr. (Естественно нужно находиться в каталоге с файлом) 2. Теперь варианты: Если Вас изначально интересовала портретная печать с long-edge то написать так: lpr -P ИмяПринтера -o orientation-requested=3 -o sides=two-sided-long-edge ИмяФайла Если Вас изначально интересовала портретная печать с short-edge то написать так: lpr -P ИмяПринтера -o orientation-requested=3 -o sides=two-sided-short-edge ИмяФайла Если Вас изначально интересовала альбомная печать с long-edge то написать так: lpr -P ИмяПринтера -o orientation-requested=4 -o sides=two-sided-long-edge ИмяФайла Если Вас изначально интересовала альбомная печать с long-edge то написать так: lpr -P ИмяПринтера -o orientation-requested=4 -o sides=two-sided-long-edge ИмяФайла Note: Хотя имя принтера по умолчанию можно не указывать, но так как проблема может быть специфична для какого-то принтера, советуем указать имя принтера на котором у Вас возникают проблемы явно. III Этап. Выводы: Если все получилось так как хотел пользователь, то сообщение нам, тех параметров lpr и того что он хотел изначально. Если нет - все информация об ошибке и последовательности действий пользователя. User Guide have completed.) [09:18:25] <[ИБК] Евгений Васильев> я кажись нашел в чем косяк и почему у меня все работает на линуксе и не работает в wine [09:19:08] <[ИБК] Евгений Васильев> опция 'sides=two-sided-short-edge' тут не работает вообще... [09:19:14] <[ИБК] Евгений Васильев> почему не знаю.... [09:19:58] <[ИБК] Евгений Васильев> линукс делает альбомной печать в PostScript [09:20:29] <[ИБК] Евгений Васильев> то есть, если открыть файлик, то он там альбомный, если ты указал альбомный [09:21:09] <[ИБК] Евгений Васильев> а wine делает PostScript файлы только планшетными [09:21:44] <[ИБК] Евгений Васильев> и пытается перевернуть их при помощи именно опций lpr, которые не работают [09:24:33] <[ИБК] Евгений Васильев> если же ты его крутишь через lpr -o orientation-requested=4 , то он переворачивает саму картинку, а лист оставляет планшетным См. похожую проблему в https://bugs.etersoft.ru/show_bug.cgi?id=3688 Возможно у человека действительно игнорируются параметры lpr. поэтому ничего и не поворачивается нужным образом. Разбирался с задачей. Как я уже говорил wwo не печетает ничего хорошего. В функции prepare_destination_string в winspool.drv не происходит формирование lpr запроса с ориентацией. Эта функция используется в ScheduleJob, которая отправляет задание на печать. Возможно в prepare_destination_string нужно будет явно задавать -o orientation. По сути ориентация и поворот для двухсторонней печати задается пользователем в Wine при печати и это должно обрабатываться как-то внутри и не касаться ScheduleJob. Получается рассогласование - в разных частях кода формируются разные куски задания для печати. Хотя возможно так и надо, нужно разобраться. Лог: trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 48 -o Collate=True -o sides=one-sided"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 48 -o Collate=True -o sides=one-sided У lpr есть опция Duplex, которая влияет на двустороннюю печать. Возможно, они должны добавляться при выборе двусторонней печати и long/short-sided способа печати. [11:43:51] <[ИБК] Евгений Васильев> нужные опции: [11:44:06] <[ИБК] Евгений Васильев> lpr -P HP2055 -o Duplex=DuplexTumble test.ps - для короткой строны [11:44:23] <[ИБК] Евгений Васильев> lpr -P HP2055 -o Duplex=DuplexNoTumble test.ps - для длинной стороны [11:46:00] <[ИБК] Евгений Васильев> lpr -P HP2055 -o Duplex=Node test.ps - для односторонней печати Не понятно в чем проблема. Я долго медитировал над исходным кодом - смысл в том, что в нем нет и намека на формирование запроса -o Duplex=Duplex[что-то там]. И так как парсер PostScript в Wine сделан настолько ужасно (нет поддержки высокоуровнивых конструкций PP и т.д. Кстати, нормальные конструкции преобразует во что-то не читаемое и дьявольское) насколько можно - то, единственным разумным объяснением будет то, что lpr игнорирует то, что написано в PostScript файле. Так может происходить и не только из-за ужасности файла, но по другим очень многим причинам, две из которых - версия lpr и модель принтера. Поэтому... Проверьте, чтобы у Вас была последняя версия lpr и обновите драйвер принтера, при необходимости. Сообщите результаты. P.S. По-хорошему многое из парсера PostScript нужно исправлять. Евгений, Костя написал, что я нашел. Опишу подробнее... После всех "lpr -o sides=two-sided-short-edge" и т.п. экспериментов нашел интересную штуку. То что вы сделали с "Orientation: Landscape" - стало верно формировать файл ps. Он стал показывать все как положено. Но ситуацию не исправило, после чего я попробовал напечатать получившийся ps через программу просмотра ps. Та его печатает как есть, то есть ps в spool cups попадал как есть, и при этом печатался как нужно. Далее я посмотрел сопроводительный файлик к ps в spool, откуда и вытащил DuplexTumble. Далее когда lpr c опцией "-o Duplex=DuplexTumble" стал печатать как нужно, я сравнил сопроводительный файлик в спулере и убедился что они практически идентичны другим файлам сформированным из другого ПО. Почему работает "-o Duplex=DuplexTumble", а не "-o sides=two-sided-short-edge" не знаю. Можете конечно по экспериментировать командами PS. http://forums.adobe.com/message/2057542 Огромная просьба сделать по быстрее. PS: wine формирует странные названия печати типа Табличный документ предположительно проблема с кодировкой. Если уж копаете систему печать, то может попадется место формирования названия файла. Косяк с названием формируется в команде отправки, так как сие видел только сопроводительном файле к PS, в самом PS ничего похожего не замечено. Бага старая http://bugs.etersoft.ru/show_bug.cgi?id=3982 Бегло осмотрел код cups 1.5.3 и 1.4.7. Судя по всему значение two-sided-short-edge выставляет значение DuplexTumble в теле cups, потому как именно DuplexTumble используется в PPD файлах, и далее уже в cups крутиться везде DuplexTumble. По крайней мере в patch файлах ничего с дуплексом я не нашел. Могу предположить, что проблема внутри cups и логичнее крутить именно Duplex=DuplexTumble. В /etc/wine/config добавлен параметр WINEPRINTING, управляющий способом печати. Сборка открытой части 2.0.3-alt6, доступная через 2.0-testing. Просьба проверить на реальном принтере печать при запуске следующим образом: $ WINEPRINTING=duplex wine 1cv8.exe и $ WINEPRINTING=original wine 1cv8.exe WINEPRINTING=sides (по умолчанию) соответствует старому методу. commit bddb4481fedba55484d8f01dca31b5f0890708d7 Author: Vitaly Lipatov <lav@etersoft.ru> Date: Fri Nov 23 18:42:55 2012 +0400 intro WINEPRINTING={original,sides,duplex} config var and use it (eterbug #3982) P.S. Проблема с названием задания пока не уточнена. WINEPRINTING=duplex, выставил в /etc/wine/config. HP 2055D запечатал правильно на Ubuntu 10.04.4 x64 Клиент передает спасибо... От меня спасибо! Евгений, Вы писали что имена плохо отображаются в ScheduleJob. Я достаточно бегло ничего подобного не обнаружил. Имена работ принтера (printer jobs) отображались у меня верно. Я тестировал в 1с77 и 1с82. Да, Вы правы, проблема с именами если и есть, то в формировании строки lpr. Я проверил и в коде есть вызов специальной функции WideCharToMultiByte, которая меняет кодировку определенной строки. Она как раз применяется ко всей сформированной lpr. Возможно проблемы у Вас на машине? Вот несколько логов: из 1с77 trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'C:\\Program Files\\1cv82\\bug8778\\Таблица.mxl' -# 112 -o Collate=True -o sides=one-sided"' из notepad trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'noname' -# 112 -o Collate=True -o sides=one-sided"' из 1с82 trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'CUPS-PDF' -T'Табличный документ' -# 26465 -o Collate=True -o sides=one-sided"' Напишите, пожалуйста, подробно последовательность действий как Вы пришли к плохому отображению имен, чтобы наши тестеры смогли локализовать ошибку. Что запускали, какой версии и т.д. Каракули появились после установил wine 2.0 на ubuntu 10.04.4 x64, в wine 1.0.12 их не было. На тему воспроизводимости прошу обратить на log Danil Michailov 2012-10-01 20:15:02 MSD https://bugs.etersoft.ru/show_bug.cgi?id=8718#c5 Тут четко видны каракули... Цитата.... ------------------------------------------------------------------------- Отработанное время: 4.0 Как воспроизвести: 1) зайти в бутылку: swine -h eter-2.0 autotest/1c82_1 --force 2) перейти в пакпку 1с82 и запустить WINEDEBUG=+winspool wine 1cv8.exe 2> 1111aaa_log_duplex 3) покликать далее в правом нижнем углу, открыть вкладку Предприятие, справа внизу Отчеты, нажать ОСВ, нажать печать, выбрать дополнительные настройки печати, например альбомная long-edge 4) открыть файл и поискать по слову lpr в выводе видно, что альбомная ориентация и книжная не меняют формат lpr запроса, возможно проблема в этом, возможно где-то другом месте *альбомная шорт trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge *альбомная лонг trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-long-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-long-edge *книжная шорт trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-short-edge *книжная лонг trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=two-sided-long-edge"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ'. -# 1 -o Collate=False -o sides=two-sided-long-edge *книжная офф trace:winspool:ScheduleJob Destination string = 'L"|lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=one-sided"' trace:winspool:schedule_pipe printing with: lpr -P'duplex' -T'Табличный документ' -# 1 -o Collate=False -o sides=one-sided ------------------------------------------------------------- Тут видно, что есть "бутылка" с каракулями. У Danil Michailov есть знание как он сделал "бутылку" с каракулями. И видно что 1с 8.2 эти каракули печатает. Могу предположить, что это очередная особенность Ubuntu. Решено добавлением WINEPRINTING=sides. |