WINE@Etersoft 1.0 Local 1.0.10-eter25/18 Открываем word. Нажимаем печать. Ставим больше 1 копии (2,3 и т.п.) Печатаем, печатает 1 копию, остальные не печатает. Лог: wine "C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE" /usr/bin/wine: line 437: [: слишком много аргументов fixme:time:GetCalendarInfoW Unimplemented caltype 1 fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(25) - not supported. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:winspool:EnumJobsW (0x1,first=0,no=0,level=1,job=(nil),cb=0,0x32dd30,0x32dd24), stub! fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(25) - not supported. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:winspool:EnumJobsW (0x1,first=0,no=0,level=1,job=(nil),cb=0,0x32c050,0x32c044), stub! fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(25) - not supported. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:reg:GetNativeSystemInfo (0x32f7e4) using GetSystemInfo() fixme:storage:StgCreateStorageEx Stub: calling StgCreateDocfile, but ignoring pStgOptions and grfAttrs fixme:storage:StgCreateDocfile Storage share mode not implemented. fixme:storage:StorageImpl_Commit (0x1779c8 4): stub fixme:storage:StorageImpl_Commit (0x1779c8 4): stub fixme:storage:StorageImpl_Commit (0x1779c8 4): stub
1) Хотел бы уточнить. Печатаете вы на принтер? Не в файл? 2) Пришлите, пожалуйста лог консоли: WINEDEBUG=print wine <программа> 2>log.txt
(In reply to comment #1) > 1) Хотел бы уточнить. Печатаете вы на > принтер? Не в файл? На принтер. Лог: fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(25) - not supported. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:font:WineEngRealizationInfo (0x19a990, 0x32e6c8): stub! fixme:font:WineEngRealizationInfo (0x190430, 0x32e6c4): stub! fixme:font:WineEngRealizationInfo (0x190430, 0x32e6c4): stub! fixme:font:WineEngRealizationInfo (0x19a990, 0x32de94): stub! fixme:font:WineEngRealizationInfo (0x190430, 0x32de90): stub! fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:shell:DllGetClassObject failed for CLSID= {2227a280-3aea-1069-a2de-08002b30309d} (unknown) fixme:winspool:EnumJobsW (0x1,first=0,no=0,level=1,job=(nil),cb=0,0x32dd30,0x32dd24), stub! fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(25) - not supported. fixme:winspool:EnumJobsW (0x1,first=0,no=0,level=1,job=(nil),cb=0,0x32c050,0x32c044), stub! fixme:winspool:EnumJobsW (0x1,first=0,no=0,level=1,job=(nil),cb=0,0x32ddb8,0x32ddac), stub! fixme:winspool:EnumJobsW (0x1,first=0,no=0,level=1,job=(nil),cb=0,0x32ddb8,0x32ddac), stub! fixme:winspool:EnumJobsW (0x1,first=0,no=0,level=1,job=(nil),cb=0,0x32ddb8,0x32ddac), stub! fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. trace:print:StartDocW DocName = L"Microsoft Word - ��������1" Output = L"LPR:PatsevAA" Datatype = (null) trace:print:OpenJob16 '|lpr -P'PatsevAA' -T'Microsoft Word - Документ1' -# 1 -o Collate=False -o sides=one-sided' 'Microsoft Word - Документ1' f098 trace:print:CreateSpoolFile Got printerSpoolCommand '|lpr -P'PatsevAA' -T'Microsoft Word - Документ1' -# 1 -o Collate=False -o sides=one-sided' for output device '|lpr -P'PatsevAA' -T'Microsoft Word - Документ1' -# 1 -o Collate=False -o sides=one-sided' trace:print:CreateSpoolFile command: '|lpr -P'PatsevAA' -T'Microsoft Word - Документ1' -# 1 -o Collate=False -o sides=one-sided' trace:print:CreateSpoolFile In child need to exec lpr -P'PatsevAA' -T'Microsoft Word - Документ1' -# 1 -o Collate=False -o sides=one-sided trace:print:CreateSpoolFile Need to execute a cmnd and pipe the output to it trace:print:OpenJob16 return 0001 fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. trace:print:WriteSpool16 0001 0x21b5100 001b trace:print:CloseJob16 0001 fixme:reg:GetNativeSystemInfo (0x32f7e4) using GetSystemInfo() fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:time:GetCalendarInfoW Unimplemented caltype 1 err:ole:StdMarshalImpl_ReleaseMarshalData could not map object ID to stub manager, oxid=1100000010, oid=4 err:ole:CoReleaseMarshalData IMarshal::ReleaseMarshalData failed with error 0x8001011d fixme:storage:StgCreateStorageEx Stub: calling StgCreateDocfile, but ignoring pStgOptions and grfAttrs fixme:storage:StgCreateDocfile Storage share mode not implemented. fixme:storage:StorageImpl_Commit (0x211fe0 4): stub fixme:storage:StorageImpl_Commit (0x211fe0 4): stub fixme:storage:StorageImpl_Commit (0x211fe0 4): stub fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub.
Спасибо. Интересующая нас строчка: trace:print:CreateSpoolFile Got printerSpoolCommand '|lpr -P'PatsevAA' -T'Microsoft Word - Документ1' -# 1 -o Collate=False -o sides=one-sided' #1 - на печать посылается одна копия. Очень странно.
(In reply to comment #3) > Спасибо. Интересующая нас строчка: > trace:print:CreateSpoolFile Got printerSpoolCommand '|lpr -P'PatsevAA' > -T'Microsoft Word - Документ1' -# 1 -o Collate=False -o > sides=one-sided' > > #1 - на печать посылается одна копия. Очень > странно. > Приеду домой воспроизведу ошибку еще дома...
> Приеду домой воспроизведу ошибку еще > дома... > Бага есть, сомнений нет. Просто такое поведение в первый раз вижу. Диалог печати вроде стандартный, но ни PRINTDLG_UpdatePrintDlgA, ни PRINTDLG_UpdatePrintDlgW не вызывается. А решение о обработка количества копий содержится именно там
Есть 2 переменные, в которых задаётся число копий: - dmCopies в структуре DEVMODE - отвечает за драйвер принтера - nCopies в структуре PRINTDLG - это количество копий, которе должно создать приложение В нашем случае на момент начала формирования документа (вызов PSDRV_StartDoc) получаем в любом случае dmCopies = 1. как получить информацию из структуры PRINTDLG - пока не знаю. По идее Word, раз он использует какой-то свой диалог должен: 1) Узнать поддерживает ли принтер формирование нужного числа копий. - Проверил, PSDRV_DeviceCapabilities с параметром DC_COPIES вызывается. 2) Принять решение о том кто будет формировать нужное количество копий: драйвер или сам Word. 3) И либо самостоятельно формировать нужное количество копий, либо записать соответствующее значение в dmCopies. Сам он нужное количество копий не формирует (видно по размеру файла), отсюда вывод - нужное он заполняет структуру DEVMODE, но до вызова PSDRV_StartDoc это значение как-то теряется.
Ну если надо потестить, скажите..
Вот и проблема: fixme:psdrv:PSDRV_DeviceCapabilities DC_COPIES: returning 9999 fixme:psdrv:PSDRV_ExtDeviceMode (Driver=WINEPS.DRV, hwnd=(nil), devOut=(nil), Device='HpTest', Port='LPT1:', devIn=(nil), Profile='(null)', Mode=0000) fixme:psdrv:PSDRV_ExtDeviceMode (Driver=WINEPS.DRV, hwnd=(nil), devOut=0x1b5ca48, Device='HpTest', Port='LPT1:', devIn=0x1b51a68, Profile='(null)', Mode=000a) fixme:psdrv:PSDRV_MergeDevmodes CALL fixme:psdrv:PSDRV_MergeDevmodes Changing Copies to 1 (was 1 copies) fixme:psdrv:PSDRV_MergeDevmodes CALL fixme:psdrv:PSDRV_MergeDevmodes Changing Copies to 1 (was 1 copies) fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_StartDocA HERE dm->dmCopies = 1; fixme:print:OpenJob16 '|lpr -P'HpTest' -T'Microsoft Word - Документ1' -# 1 -o Collate=False -o sides=one-sided' 'Microsoft Word - Документ1' c200 fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_DeviceCapabilities DC_COPIES: returning 9999 fixme:psdrv:PSDRV_ExtDeviceMode (Driver=WINEPS.DRV, hwnd=(nil), devOut=(nil), Device='HpTest', Port='LPT1:', devIn=(nil), Profile='(null)', Mode=0000) fixme:psdrv:PSDRV_ExtDeviceMode (Driver=WINEPS.DRV, hwnd=(nil), devOut=0x1b559e8, Device='HpTest', Port='LPT1:', devIn=0x2678648, Profile='(null)', Mode=000a) fixme:psdrv:PSDRV_MergeDevmodes CALL fixme:psdrv:PSDRV_MergeDevmodes Changing Copies to 1 (was 1 copies) fixme:psdrv:PSDRV_MergeDevmodes CALL fixme:psdrv:PSDRV_MergeDevmodes Changing Copies to 1 (was 1 copies) fixme:psdrv:PSDRV_DeviceCapabilities DC_BINADJUST: stub. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(25) - not supported. fixme:ole:snapshot_QueryGetData (0x1b50b50, 0x32ed44 {cf c00a ptd (nil) aspect 1 lindex -1 tymed 4}) fixme:ole:snapshot_QueryGetData (0x1b50b50, 0x32eb04 {cf c057 ptd (nil) aspect 1 lindex -1 tymed 1}) fixme:psdrv:PSDRV_DeviceCapabilities DC_COPIES: returning 9999 fixme:psdrv:PSDRV_ExtDeviceMode (Driver=WINEPS.DRV, hwnd=(nil), devOut=(nil), Device='HpTest', Port='LPT1:', devIn=(nil), Profile='(null)', Mode=0000) fixme:psdrv:PSDRV_ExtDeviceMode (Driver=WINEPS.DRV, hwnd=(nil), devOut=0x1b5d658, Device='HpTest', Port='LPT1:', devIn=0x1b55a40, Profile='(null)', Mode=000a) fixme:psdrv:PSDRV_MergeDevmodes CALL fixme:psdrv:PSDRV_MergeDevmodes Changing Copies to 3 (was 3 copies) fixme:psdrv:PSDRV_MergeDevmodes CALL fixme:psdrv:PSDRV_MergeDevmodes Changing Copies to 3 (was 3 copies) по вызову PSDRV_MergeDevmodes видно, что сначала dmCopies = 1. потом Word вызывает PSDRV_StartDocA и начинает печать документа. И только потом в структуре dmCopies появляется значение 3
Сейчас печать осуществляется вызовом комманды lpr через pipe() При использовании pipe необходимо передавать все параметры коммандной строки сразу. (Т.е на момент вызова PSDRV_StartDoc количество копий должно быть известным) Единственный способ решения данной баги - переписать систему печать так, чтобы печать происходила во временный файл (или область памяти), а комманда lpr вызывалась бы только из PSDRV_EndDoc, когда количество копий точно известно. К сожалению данное решение требует много времени, к тому же затрагивает только одну программу, поэтому вряд ли стоит ожидать решения данной баги в ближайшее время.
Ну хоть на этом спасибо
Завёл отдельную багу 4111
Проверил с патчем к баге 4111. Сейчас не печатает вообще: fixme:winspool:ScheduleJob Destination string = 'L"|lpr -P'hp@buh' -T'Microsoft Word - 2pages.doc' -# 0 -o Collate=False -o sides=one-sided"' Видимо на момент использования структура DevMode оказалась не заполненной
Проблема была в том, что в структуру job_t записывалось не LPDEVMODEW, а PSDRV_DEVMODEW. Исправил. Работает.
Проверил: всё работает. Патч есть в eterwine и eterhack. В стабильную версию 1.0.12 он никак не попадёт (там другой механизм печати). Пользователям нужно скачать unstable версию (наверное это будет 1.3.0-alt1.6) или долго дожидаться следующего стабильного релиза
Подскажите пожалуйста, где скачать unstable версию
(В ответ на comment #15) > Подскажите пожалуйста, где скачать unstable версию К сожалению, пока это не возможно. Мы ещё не разобрались как и на каких условиях будем её предоставлять