Bug 701

Summary: Не печатает на принтере, если указывать пустое имя принтера
Product: WINE@Etersoft Reporter: Vitaly Lipatov <lav>
Component: ОбщееAssignee: Vitaly Lipatov <lav>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: P5 CC: kondratyuk
Version: 1.0.8   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 584    
Attachments: Патч 2005 года от Serge Ryabchun

Description Vitaly Lipatov 2007-07-27 21:39:42 MSD
Есть программа, написанная на Дельфи, по видимому 6, 
использует QReport из поставки, из постороннего кажется только
что-то из RX.
Проблема в том, что QR на экран выводит, но при
попытке распечатать тихо сглатывает, причем молча.
Разборки показали, что он выбирает принтер, считает, что принтер
по умолчанию и отравляет строку '', в виндовсе это прокатывает,
потому что он таки как-то печатает, а wine на такое реагирует
просто - нет имени, нет печати.

Пример программы - mbread.exe

> То есть я правильно понимаю, что Windows, получая название 
> принтера '', печатает на принтере по умолчанию, а WINE молча 
> проглатывает задание?

Да, точнее, думаю, что да, я не думаю, что QR настолько умный, что
под вайном полученное имя принтера, а он его получает правильно,
меняет на пустую строку ("" ;-), это в логах печатало как ''), а под
виндоуз отправляет то, что получил. Как по мне, то это скорей еще
одна недокументированная фича.
Comment 1 Vitaly Lipatov 2007-07-27 22:32:33 MSD
Created attachment 149 [details]
Патч 2005 года от Serge Ryabchun
Comment 2 Константин Кондратюк 2007-07-31 12:00:28 MSD
Простой тест вида:
    hDC = CreateDC("WINSPOOL","",NULL,NULL);
    if (!hDC) printf ("Printer error!\n")
стабильно даёт Printer error! как в wine, так и в Windows. Никаких хитрых замен windows не делает, и ничего не печатает.
Comment 3 Константин Кондратюк 2007-07-31 12:18:27 MSD
> Пример программы - mbread.exe
Программа нормально печатает. Возможно, всё дело в невыбранном принтере по умолчанию.
Другой причины, по которой может передаваться пустая строка, не вижу.
Comment 4 Vitaly Lipatov 2007-11-28 00:46:59 MSK
Приложен патч вида
     if (!psCmd[0] && !strncmp("LPR:",pszOutput,4))
         sprintf(psCmd,"|lpr -P'%s'",pszOutput+4);
+    else
+        if (*pszOutput == '\0')
+            strcpy( psCmd,"|lpr");

будет в сборке 1.0.8
Comment 5 Vitaly Lipatov 2007-11-28 00:47:14 MSK
*** Bug 842 has been marked as a duplicate of this bug. ***
Comment 6 Vitaly Lipatov 2007-12-15 20:08:11 MSK
Собственно проблема не устранена, данное исправление
просто её маскирует, вводя расширенное поведение (печать через lpr без указания принтера).
Comment 7 Vitaly Lipatov 2008-01-12 01:31:13 MSK
Date: Fri, 11 Jan 2008 10:44:25 +0200
From: "Serge Ryabchun"
To: "Mike Shigorin"
Subject: Re: [Bug 12369] Problem with printing from specific program (CUPS)
Cc: lav@

Посмотрев на патч, вспомнил в чем проблема ;-)
Delphi, а та программа на нем писана, для дефолтного принтера
использует пустую строку, а WINE считает, что must be "LPR:",
а по комменту понятно, что нужно еще таким же образом на
кнопку свойств реагировать - подставить "LPR:" вместо пустой строки.
Хм, может и не Delphi виноват, а тот компонент, в котором отчет готовится.
Но в любом случае, WINE тоже виновен ибо работает в этой ситуации не так,
как это делает Windoze