On-line: PSP, гостей 1. Всего: 2 [подробнее..]
АвторСообщение





Пост N: 462
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 13.07.15 16:06. Заголовок: Двусторонняя печать (HP M225)


Всем привет.

Недавно к нам в систему попал новый принер - HP M225 с возможностью двусторонней печати. И имеет, он такую хитрую настройку:





Тут получается, что для стандартного документа в Portrait mode нужно убирать галку "переплет сверху", а для накладной/счет-фактуры (Landscape mode) нужно эту галку ставить. Иначе вторая сторона в обоих случаях печатается вверх тормашками.

Юзеры бесятся, жалутся и говорят, что "их ничего не волнует и они хотят "просто нажать кнопку и получить двусторонний результат". На всех остальных принтерах с двусторонней печатью просто есть галка "двусторонняя печать" и все работает "как нужно". То есть нет выбора - нет проблем...

Кто-нибудь сталкивался? Как это победить?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 10 [только новые]


постоянный участник




Пост N: 759
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.07.15 18:20. Заголовок: Sergy пишет:Как это ..


Sergy пишет:
 цитата:
Как это победить?


Заполнить самому, т.е. я бы сделал монитор на AutoIt3, запускал перед печатью, ловил окно (два) и ставил\снимал нужные галки и нажимал применить и OK и завершался.
Все можно проделать и в hb, наверное, но мне лично проще так. Для doPdf7 была похожая примочка (ответы с галочкой) на 2-х окнах


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 463
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.07.15 09:16. Заголовок: Мониторить окна - эт..


Мониторить окна - это значит они должны сначала появиться на экране. Это 5-6 лишних кликов для юзера.

Если печатать из моего приложения или экселя, ворда на принтер "по умолчанию" - никаких окон не появляется. Нажатие на кнопку "печать" и всё...

Или я неправильно понял?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 760
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.07.15 09:44. Заголовок: Sergy пишет:Это 5-6 ..


Sergy пишет:
 цитата:
Это 5-6 лишних кликов для юзера


Ничего кликать не надо. Запускаете монитор (Run без ожидания), свою печать (появление окон ожидает, ловит монитор), который и делает заполнения, клики и завершается после этого. У пользователя что то моргнуло по окнам и все - он ничего не делал. Вот пример для doPDF:
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 174
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 14.07.15 13:35. Заголовок: Вот так еще можно по..


Вот так еще можно попробовать. У меня, правда из односторонней печати на
двустороннюю переключается, а потом дальнейшие переключения не работает,
возможно, потому-что сервер печати а не локальный принтер

 
#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"
#include "hbvm.h"
#include "hbwinuni.h"
#include "hbdate.h"

/****************************************************************
* ISPRNDUPLEX () *
* Возврат: *
* 0 - нет на принтере дуплекса (двухсторонняя печать) *
* 1 - на принтере есть дуплекс *
* *
****************************************************************/

HB_FUNC (ISPRNDUPLEX)
{

hb_retni( DeviceCapabilities (hb_parc(1 ), NULL, DC_DUPLEX, NULL, NULL ) );

}


/***********************************************************
* SETDUPLEXMODE (par1, par2) *
* par1 - имя принтера *
* par2 - режим печати: *
* 1 - обычная печать *
* 2 - двусторонняя, листать влево *
* 3 - двустороння, листать вверх *
* *
* Возврат *
* RC > 0 - успешная установка *
* RC < 0 - ошибки *
***********************************************************/


HB_FUNC (SETDUPLEXMODE)
{

HANDLE hPrinter;
LPPRINTER_INFO_2 pPRINTER_INFO_2;
DWORD dwNeeded;
DWORD geter;
dwNeeded = 0;

/* Start by opening the printer */
if (!OpenPrinter(hb_parc(1), &hPrinter, NULL))
hb_retni (-1);

/*
* Step 1:
* Allocate a buffer of the correct size.
*/

if (!GetPrinter(hPrinter,2,NULL,0,&dwNeeded))
hb_retni (-2);

pPRINTER_INFO_2 = (LPPRINTER_INFO_2)malloc(dwNeeded);
/*
* Step 2:
* Get the default DevMode for the printer and
* modify it for your needs.
*/

if (!GetPrinter(hPrinter,2,pPRINTER_INFO_2,dwNeeded, &dwNeeded) )
hb_retni (-3);

pPRINTER_INFO_2->pDevMode->dmDuplex = (short) hb_parni (2) ; /* DUPlEX MODE */

/*
* Step 3:
* Merge the new settings with the old.
* This gives the driver an opportunity to update any private
* portions of the DevMode structure.
*/

/* было 2 */

if (!SetPrinter(hPrinter,2,pPRINTER_INFO_2,PRINTER_CONTROL_SET_STATUS )) /* было 2 */
hb_retni (-4);

geter = GetLastError();

if (!ClosePrinter(hPrinter))
hb_retni (-5);

free(pPRINTER_INFO_2);
hb_retni (geter);

}


/***********************************************************
* GETDUPLEXMODE (par1) *
* par1 - имя принтера *
* Возврат *
* режим дуплекса *
***********************************************************/


HB_FUNC (GETDUPLEXMODE)
{

HANDLE hPrinter;
LPPRINTER_INFO_2 pPRINTER_INFO_2;
DWORD dwNeeded;
short geter;
dwNeeded = 0;

/* Start by opening the printer */
if (!OpenPrinter(hb_parc(1), &hPrinter, NULL))
hb_retni (-1);

/*
* Step 1:
* Allocate a buffer of the correct size.
*/

if (!GetPrinter(hPrinter,2,NULL,0,&dwNeeded))
hb_retni (-2);

pPRINTER_INFO_2 = (LPPRINTER_INFO_2)malloc(dwNeeded);
/*
* Step 2:
* Get the default DevMode for the printer and
* modify it for your needs.
*/

if (!GetPrinter(hPrinter,2,pPRINTER_INFO_2,dwNeeded, &dwNeeded) )
hb_retni (-3);

if (!ClosePrinter(hPrinter))
hb_retni (-5);

geter = pPRINTER_INFO_2->pDevMode->dmDuplex ;
free(pPRINTER_INFO_2);
hb_retni (geter);

}



#pragma ENDDUMP



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5126
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.07.15 16:45. Заголовок: Может SDK какой есть..


Может SDK какой есть к этому девайсу......

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 464
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.07.15 23:46. Заголовок: SergKis пишет: Ниче..


SergKis пишет:

 цитата:
Ничего кликать не надо. Запускаете монитор (Run без ожидания), свою печать (появление окон ожидает, ловит монитор), который и делает заполнения, клики и завершается после этого. У пользователя что то моргнуло по окнам и все - он ничего не делал. Вот пример для doPDF:



Почитал про эту систему. Прикольная автоматизация. Только не могу понять - откуда она узнает, какой именно документ (Portrait/Landscape) сейчас будет напечатан?
Вариантов минимум три:

1) Word
2) Excel
3) Утилита печати на GDI-принтерах, которая работает в связке с моим софтом.



Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 465
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.07.15 23:47. Заголовок: nick_mi пишет: Вот ..


nick_mi пишет:

 цитата:
Вот так еще можно попробовать. У меня, правда из односторонней печати на
двустороннюю переключается, а потом дальнейшие переключения не работает,
возможно, потому-что сервер печати а не локальный принтер



А как этот сишный код связать с Excel/Word ?
Ведь что ни посылай на принтер, новое приложение/новое задание полностью инициализирует порт.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 761
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.07.15 06:50. Заголовок: Sergy пишет:Только н..


Sergy пишет:
 цитата:
Только не могу понять - откуда она узнает


На сайте http://autoit-script.ru/ есть русская справка, примеры, довольно хорошие и
 цитата:
AutoIt v3 поставляется вместе с автономным инструментом, называемым AutoIt v3 Window Info (Program Files\AutoIt3\AU3Info.exe). AU3Info получает информацию об определённом окне, что позволяет эффективнее автоматизировать работу с этим окном. Следующая информация может быть получена:

Заголовки окон
Текст в окне (видимый и скрытый)
Размеры окна и его позиция
Содержимое строки состояния
Положение курсора
Цвет пикселя, находящегося под курсором
Информация об элементе управления, находящемся под курсором
Для использования AU3Info просто запустите его (из командной строки или меню Пуск). AU3Info имеет атрибут "поверх всех окон", что позволяет вам всегда прочитать необходимую информацию. Просто переместите курсор на интересующее окно и активируйте его - в окне AU3Info тут же появится доступная информация. С помощью AU3Info можно сильно облегчить создание скриптов автоматизации ...



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 175
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 15.07.15 08:14. Заголовок: Sergy А как этот си..


Sergy

 цитата:
А как этот сишный код связать с Excel/Word ?



Эти установки выставляются на глобальном уровне для всех пользователей и
для всех приложений.
Если выводить из любого приложения не меняя никаких установок,
печать будет идти двухсторонняя. Я предполагаю, конечно, что основной
программой является программа на HARBOUR и в ней выставляется
двухсторонняя печать. И из нее же вызываются затем модули печати
Excel/Word/OpenOffice. Если нет, необходимо этот код перевести
на VBA и эти установки можно привязать уже к конкретному документу, но это
уже будут другие функции из API.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 176
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 15.07.15 13:57. Заголовок: В приведеном выше ко..


В приведеном выше коде необходимо заменить строку

 цитата:
if (!SetPrinter(hPrinter,2,pPRINTER_INFO_2,PRINTER_CONTROL_SET_STATUS )) /* было 2 */


на

 цитата:
if (!SetPrinter(hPrinter,2,pPRINTER_INFO_2,NULL ))


Тогда производится устойчивое переключение между всеми режимами.
Алгоритм работы следующий: Перед вызовом Excel/Word/OpenOffice
установить необходимый режим, после возврата из приложений вернуть исходные
настройки. Пользователю вообще не надо никаких телодвижений.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 515
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет