Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 701 - Не печатает на принтере, если указывать пустое имя принтера   Make a simular bug
Summary: Не печатает на принтере, если указывать пустое имя принтера
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Общее (show other bugs)
Version: 1.0.8
Hardware: PC Linux
: P5 normal
Target Milestone: ---
Assignee: Vitaly Lipatov
QA Contact:
URL:
Whiteboard:
Keywords:
: 842 (view as bug list)
Depends on:
Blocks: 584
  Show dependency treegraph
 
In work:
Reported: 2007-07-27 21:39 MSD by Vitaly Lipatov
Modified: 2009-07-26 12:14 MSD (History)
1 user (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments
Патч 2005 года от Serge Ryabchun (1.42 KB, patch)
2010-11-18 03:58 MSK, Vitaly Lipatov
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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