Терминал+любой twain сканер клиента->pdf+ActiveX pdf в форме
Передача twain сканера клиента в терминал с сохранением скана в графические файлы ходовых форматов (в т.ч. pdf), сканирование нескольких страниц в один файл, сканирование пакета страниц. Полноценная работа с pdf через ActiveX объект в форме. Обсуждение статьи на http://www.forum.mista.ru/topic.php?id=224116
Задачи:
- Получить в терминале доступ к twain-сканеру клиента.
- Получить доступ к отсканированному из V8.
- Найти альтернативу тормозной работе с графикой в 1V8. То бишь нормальный вьювер картинки, с печатью, быстрым масшатированием, вращением и т.д.
Решение
1.1. Сканер Вот тут три способа расшаривания сканера:
1.1.1 http://www.cit-masters.ru/blindscanner/ru/download.php
Софтина называется BlindScanner. Триал 15 дней. Цена 750 р. На локальной машине ставим сервер. Настройка - какой сканер шарить. На любой удаленной машине (в т.ч. терминале) - ставим клиента. Настройка: имя машины сервера сканера, имя сканера, тест сканера. Или - морда к твейну сканера. К сожалению не работает из командной строки. При запуске клиента появляется морда в которой выбирается каталог сохранения (имя формируется из даты и времени), формат, способ сканирования, разрешение, кол. цветов. Списался с авторами, уламываю их на коммандную строки. Только что прислали Бету, еще не пробовал, потому как не особо нужно (об этом ниже, там же про нафига командная строка).
1.1.2 http://www.remote-scan.com/
Название софтины RemoteScan. Тоже клиент-сервер. Обеспечивает полноценную передачу twain на удаленную машину (в списке доступных сканеров появляется еще один)
1.1.3.http://www.itadvisor.ru/sites/ita/HTML/pts.htm
Самопальная реализация терминала. Оно конечно интересно, но сносить сервер, терминал и цитрикс заради эксперимента - как-то не готов.
Остановился на первом (BlindScanner). Причины: 1. Функциональность - выше второго. 2. Буржуев - давить! 3. На сегодня нет интерфейса V8-twain работающего под win2003. Ребята написали управление из командной строки.
Линки на версии BlindScanner которые еще не доступны с сайта авторов (по их разрешению):
BlindScanner с управлением из командной строки. Синтаксис:
client.exe -resolution=200 -mode=2 -ext=bmp -path=c:\images -start=1 -close=1 где resolution (100, 200, 300, 450, 600, 1200, 2400) - разрешение mode (1, 2, 3) - режим цвета ЧБ, серый и в цвете соответственно ext (bmp, pdf, tiff, png, gif, jpg) - формат выходного файла path - папка для сохранения файлов (только уже существующая) start (1, 0) - запускать сканирование и прятать интерфейс close (1, 0) - закрывать программу BlindScanner по окончании сканирования (не имеет смысла без предыдущего параметра)
отсутствие какого-либо параметра означает использование соответствующей настройки сохраненной ранее отсутствие параметров close и start соответствует -start=0 -close=0 (не запускать сканирование, не скрывать интерфейс, не закрывать программу)
мультистраничность, таймер, ADF и др. параметры если Вам нужны, то реализуем в следующей версии.
Лежит тут: http://www.cit-masters.ru/blindscanner/download/setupbs.exe
BlindScanner с twain интерфейсом. Т.е. в том же фотошопе выбираем сканер установленный на удаленной машине и пользуемся интерфейсом его драйвера. Бета-версию можно скачать по ссылке http://www.cit-masters.ru/blindscanner/download/bs22.exe
Доступ к отсканированному из V8
Итак, сканер в терминале есть. С первой идеей найти длл-ку под 8-ку для твейна - облом. Лучшая на сегодня http://1c.proclub.ru/modules/mydownloads/personal.php?lid=6657&topic_id=280926&forum=6&viewmode=flat&order=DESC&cid=123&start=10 не работает под win2003. Списался с автором, проблему он понял, обещал как будет время - поправит. Пока ждем. Идем в обход. У BlindScanner - есть собственная морда, которая позволяет сохранить отсканированное в файл, в т.ч. в pdf. Соответственно по кнопке «Сканировать» в форме 1С - просто стартуем внешнее приложение, запуская клиента BlindScanner. Вот тут бы для полного кайфа - командная строка. Но нету. Появляется морда, где можно шаловливыми ручками повыбирать форматы, режимы сканирования. Пока, приходится строить необучаемых теток. Надеюсь, что ребята из BlindScanner в ближайшее время дадут возможность эту морду спрятать.
Работа с картинками в V8
Если коротко - удручающе. Началось с того, что честно заюзав формат png (заявленное в восьмерке)-получил фигу. Показывать этот формат мы не умеем. По крайней мере в формах. Ладно. Играем с gif, tif (хочется многостраничные картинки). В принципе - нормально, но! Щелкнул «масшатбировать». Прикурил… Включил чайник… Еще пара затяжек - опа. Отработала. Грустно. А про FitToWidth, Page, печать третьей картинки скана, да еще с масштабированием… Совсем стало грустно. Начал репу чесать на предмет заюзать какую-нить нормальную гляделку. Вспомнил о замечательном фокситридере (акробат - масдай)! Залез на сайт - есть в жизни Щастье! Ребята дают халявный АктивХ. http://www.foxitsoftware.com/pdf/sdk/activex/
Дальше все просто - втыкаем в форму АктивХ от фоксита, списки отсканированного, кнопку сканировать, печатать, элементы интерфейс клиента сканера (ну там - разрешение, если нужно, одну страницу, или много и т.д.) По кнопке сканировать - делаем в %темпе% каталог, грохаем содержимое, стартуем клиента BlindScanner. Вариантов старта ажно три: можно запустить морду твейна сканера, т.е. будет сканировать, как в Фотошопе; можно морду сканирования в файл (каталог, формат, разрешение, цвет, многостраничность, сканирование по таймеру); можно запустить без морды, передав все через командную строку. При желании (настройка сервера) появится окошко с процентами процесса сканирования. Такой подход позволяет вынести необходимые элементы интерфейса управления сканером в форму 1С. Объемы pdf из двхуцветного скана А4 (сжатие 10): разрешение 300 - 85 кб; 200=30 кб. Качество распечатки при 300 - не отличается от качественного ксерокса. При 200-чуть хуже. Свободно читается с экрана. Опять же многостраничность. Короче, закончили сканирование, получили один (или несколько) файлов, одно, или несколько-страничных. Дальше, обходим выбранный каталог, добавляя строчки в список отсканированного, все что нашли запихиваем поле с типом «хранилище», списка. У меня справочник, в котором элемент - некое событие (заключение договора, изменения, пролонгирование, расторжение), там дата и примечание. К элементу присобачено табличное поле. Строки поля - содержат ХранилищеЗначения, где лежат pdf. В событии активизация строчки табличного поля справочника: - командуем АктивХ-у закрыть текущий файл pdf - вытаскиваем файлик из хранилища, - командуем АктивХ-у открыть файлик Примерно так:
Процедура КартинкиПриАктивизацииСтроки(Элемент) ЭлементыФормы.Фоксит.CloseFile(); //отцепляем pdf от АктивХ, иначе фиг файл удалишь УдалитьФайлы("%temp%temp.pdf"); //убиваем старый файлик //берем новый из текущей строки табличного поля элемента справочника ТекКарт=ЭлементыФормы.Картинки.ТекущаяСтрока.Картинка.Получить().Записать("%temp%temp.pdf"); ЭлементыФормы.Фоксит.OpenFile("%temp%temp.pdf") //даем АктивХ новый файлик; //Это примеры по управлению АктивХ, подробнее на сайте фоксита. ЭлементыФормы.Фоксит.ShowBookmark(0); ЭлементыФормы.Фоксит.ShowTitleBar(0); ЭлементыФормы.Фоксит.ShowStatusBar(0); ЭлементыФормы.Фоксит.SetZoomLevel(Масштаб); //Масштаб - число из поля формы. КонецПроцедуры
Кнопку печать - поручаем АктивХу: ЭлементыФормы.Фоксит.Print(); Функциональности (по отношению к стандартной картинке формы)- несравнимы. Если нужен полный код - напишу, но думаю особого смысла нет, все тривиально.
ЗЫ. Тестировалось все в связке V8 - 8.0.16.2, Win XP SP2 (клиент), Win2003 (сервер), терминал+MetaFrame 3. Сканер USB Benq 5250C (восстановленный). Кстати про восстановление закинул статью, может кому пригодится. Книга знаний: Ремонт сканера USB Benq 5250C (ошибка ffff:0024)