Summary: | MSWORD: Не печатает больше 1 копии | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Patsev Anton <chemtech> |
Component: | Печать ; Диалог печати | Assignee: | Виталий Перов <vitperov> |
Status: | CLOSED FIXED | QA Contact: | Денис Баранов <baraka> |
Severity: | normal | ||
Priority: | P4 | CC: | aurimas, support |
Version: | 1.0.10 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | 1119 | |
Дата напоминания: | |||
Bug Depends on: | 4111, 6598 | ||
Bug Blocks: | 42, 443 |
Description
Patsev Anton
2009-06-29 13:37:23 MSD
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 версию К сожалению, пока это не возможно. Мы ещё не разобрались как и на каких условиях будем её предоставлять |