Задача
У меня была задача - сделать скан-сервер (по аналогии с принт-сервером) для Windows-клиентов. То есть сервер, который бы предоставлял пользователям доступ к сканерам по сети. В результате должен получиться единый унифицированный интерфейс доступа к сканерам.
На клиентских машинах прописывается подключение к сканеру на скан-сервере с помощью унифицированного драйвера. А на скан-сервере уже подключение к физическому устройству с использованием драйвера, специфичного для данного устройства. Таким образом, даже физическая замена сканера на другое устройство будет приводить только к необходимости переконфигурирования устройства на скан-сервере, но не на клиентах.
В частности - было необходимо, чтобы пользователи фермы Citrix XenApp могли сканировать с сетевых (Ethernet) сканеров (МФУ HP). То есть на каждом терминальном сервере должны быть установлены все сканеры, а пользователь получал бы доступ к одному из них (или нескольким) в зависимости от того, включен он в группу, соответствующую этому сканеру.
Архитектура и компоненты
В качестве программной части скан-сервера выступает SANE, который предоставляет унифицированный интерфейс для доступа к разнообразным сканирующим устройствам.
В качестве унифицированного драйвера для Windows выступил WIASANE. Это драйвер для Windows, позволяющий сканировать по протоколу SANE. В системе устанавливается WIA (Windows Image Acquisition) устройство, обращения к которому перенаправляются к устройству по протоколу SANE.
Настройка скан-сервере SANE
Установка SANE на Ubuntu 14.04
sudo apt-get install sane sane-utils libsane-extras
Затем как предписывает документация нужно проверить тут http://www.sane-project.org/sane-mfgs.html, что сканнер поддерживается и включить в файле /etc/sane.d/dll.conf соответствующий backend (раскомментировав нужную строку). После этого включаем sane в режим сервера. В файлике /etc/default/saned прописываем:
# Set to yes to start saned RUN=yes
И прописываем сеть из которой будет доступен демон saned в файлике: /etc/sane.d/saned.conf. Там можно указать как отдельный хост, так и целую сеть. Для того, чтобы дать доступ к saned с любого IP-адреса нужно добавить строку с одним символом + (плюсик).
Мне нужно настроить работу SANE с МФУ HP M521 и 1536. Поэтому - ставим модуль libsane-hpaio, который будет работать с сетевым интерфейсом hpaio:
sudo apt-get install libsane-hpaio
Если нужного модуля нет, то в дальнейшем команда scanimage -L будет вываливаться с ошибкой Segmentation fault (core dumped).
На всякий случай проверяем наличие в файлике /etc/services строки:
sane-port 6566/tcp sane saned # SANE
Тестирование SANEd
Во первых - можно включить тестовый бекенд test. Для этого в файлике /etc/sane.d/dll.conf нужно раскомментировать/добавить строку test. В результате сервер начнет отдавать пару сканеров:
device `net:localhost:test:0' is a Noname frontend-tester virtual device device `net:localhost:test:1' is a Noname frontend-tester virtual device
Если сервер sane работает как-то не так, то можно запустить его в режиме дебага, в котором он будет выдавать много полезной информации. Для начала нужно остановить его командой:
sudo /etc/init.d/saned stop
И запустить в debug-режиме:
sudo /usr/sbin/saned -d
Или в более подробном варианте:
sudo /usr/sbin/saned -d128
C какой-либо рабочей станции с Linux (на которой установлены sane sane-utils libsane-extras) можно попробывать подключиться к saned:
scanimage -d net:<ip adderss of saned>:test -T
Если все хорошо, то вывод будет примерно такой:
scanimage: scanning image of size 157x196 pixels at 8 bits/pixel scanimage: acquiring gray frame, 8 bits/sample scanimage: reading one scanline, 157 bytes... PASS scanimage: reading one byte... PASS scanimage: stepped read, 2 bytes... PASS scanimage: stepped read, 4 bytes... PASS scanimage: stepped read, 8 bytes... PASS scanimage: stepped read, 16 bytes... PASS scanimage: stepped read, 32 bytes... PASS scanimage: stepped read, 64 bytes... PASS scanimage: stepped read, 128 bytes... PASS scanimage: stepped read, 256 bytes... PASS scanimage: stepped read, 255 bytes... PASS scanimage: stepped read, 127 bytes... PASS scanimage: stepped read, 63 bytes... PASS scanimage: stepped read, 31 bytes... PASS scanimage: stepped read, 15 bytes... PASS scanimage: stepped read, 7 bytes... PASS scanimage: stepped read, 3 bytes... PASS
На рабочей станции с Linux можно прописать адрес сервера saned, чтобы команда scanimage знала откуда брать сканеры. Для этого редактируем файлик /etc/sane.d/net.conf и в конец дописываем IP-адрес сервера saned.
Установка устройств HP
Для работы с устройствами HP нужен пакет HPLIP (HP Linux Imaging and Printing System). Его можно либо скачать с сайта HP, либо из репозиториев Ubuntu. На Ubuntu 14.04.02 я устанавливал из репозиториев.
sudo apt-get install hplip
Поставилась версия 3.14.3 и с ней удалось сканировать по сети через saned с клиента Ubuntu.
С сайта HP можно скачать гораздо более новую версию, но с ней у меня так и не получилось сканировать по сети через saned. Но на всякий случай: Скачиваем HPLIP - http://hplipopensource.com/hplip-web/gethplip.html Скачиваем и ставим. Ставить рекомендуют под обычным пользюком (не под root):
wget http://vorboss.dl.sourceforge.net/project/hplip/hplip/3.15.7/hplip-3.15.7.run chmod a+x hplip-3.15.7.run ./hplip-3.15.7.run
Запускать инсталлер можно под обычным юзером. В процессе установки он попросит пароль чтобы выполнить установку от имени root.
Если в интернет система выходит через proxy, то нужно объявить об этом до установки:
export http_proxy=http://host.com:port/ export ftp_proxy=http://host.com:port/ export no_proxy=.domain.com export HTTP_PROXY=http://host.com:port/ export FTP_PROXY=http://host.com:port/
А также прописать http_proxy, https_proxy и ftp_proxy в файлике /etc/wgetrc
А после установки нужно установить плагины:
hp-plugin -i
А затем установить принтер/сканер:
sudo hp-setup -i -a <ip address of printer>
Теперь сканер должен появляться при выполнении команды:
scanimage -L
Если там его нет, то генерируем URI для этого сканера. Делать это необязательно, но во многих мануалах это действие присутствует:
hp-makeuri <ip address of printer>
В выдаче будет строка типа: hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.203.1 Для поверки состояния сканера берем строку с URI сканера и подставляем в команду:
scanimage --device=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.203.1 -T
В результате должны вывалиться результаты тестов: PASSED.
Команда
scanimage -L
Должна выдавать список сканеров. Если она этого не делает, возможно, дело в файлике /etc/cups/printers.conf. В нем нужно заменить значение параметра DeviceURI. Там может быть либо что-то про socket, а должно быть то что возвращает команда hp-makeuri в строчке CUPS URI. Что-то типа hp:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.203.1. После правки этого файла нужно перезапустить cups:
sudo /etc/init.d/cups restart
Теперь сканировать на сервере saned из командной строки можно так:
scanimage --device "hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.203.1" --mode Color --resolution 300 > ~/scan.jpg
Если списка сканеров нет совсем или там нет нужного. то можно включить дебаг:
SANE_DEBUG_NET=128 SANE_DEBUG_DLL=128 scanimage -L
Сканировать с клиента Linux можно командой:
scanimage --device "net:10.50.6.218:hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.203.1" --mode Color --resolution 300 > ~/scan.jpg
Тут укаываем, что используем бекэнд net, затем через двоеточие адрес сервера saned и затем URI сканера.
Иногда бывает, что сканер поставился, но при попытках сканировать сообщает: Error during device I/O. Вероятно нужно удалить его и поставить снова.
Удаление принтера-сканера
Обычно на сервере сканирования устанавливается несколько принтеров одинаковой модели. Для того, чтобы узнакть какой именно принтер надо удалить - открываем файлик /etc/cups/printers.conf и ищем по IP-адресу как именно называется устройство.
sudo cat /etc/cups/printers.conf sudo hp-setup -i -r
Настройка фронтэндов под Windows
WiaSane
wiasane - это обертка для sane, которая предоставляет WIA интерфейс к сканерам saned.
Настроить wiasane (0.1.1.9) с устройствами hpaio:/net/… удалось только после патчинга драйверов HPLIP. Со стандартным драйвером программа пытается получать список сканеров с сервера sane, но сервер не отдает эти устройства. Помогает патчинг драйвера. Смотри ниже.
Рабочая сборка - sane_wia_driver.zip. Она доработана для того, чтобы прописывать сканеры скриптом.
Если возникают проблемы с установкой драйвера (он просто не ставится), то скорее всего не установлен Visual C++ Redistributable for Visual Studio
Скрипт для пакетного прописывания сканеров такой:
devsane.exe device uninstall wiasane.inf devsane.exe driver uninstall wiasane.inf devsane.exe driver install wiasane.inf del /f /q "c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M1530 Gilyar 6" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_M1536dnf_MFP?ip=10.90.32.74 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M1530 Gilyar 7" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_M1536dnf_MFP?ip=10.90.32.6 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Volokolamsk" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_M1536dnf_MFP?ip=10.166.243.200 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 PavlPosad" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.203.1 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 ul.Dm.Ulyanova" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.204.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Schelkovo" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.234.3 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Orehovo-Zuevo" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.207.1 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Kolomna" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.225.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Kozhuhovo" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.226.1 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Chehov" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.211.1 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Kashira" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.237.10 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Lobnya" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.223.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Podolsk" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.214.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Shatura" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.244.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Klin" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.209.3 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Noginsk" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.215.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Egor'evsk" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.229.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Zheleznodorozhnyj" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.239.1 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 B.Tishinskiy" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.206.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Balashiha" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.233.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Mytishi" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.217.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Lubertsy" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.221.2 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log" devsane.exe device install wiasane.inf -x=1 "-f=M521 Zvenigorod" -h=10.50.6.218 -p=6566 -r=hpaio:/net/HP_LaserJet_Pro_MFP_M521dn?ip=10.166.218.1 -u= -s= "-l=c:\Program Files\SANE WIA Driver\_device install.log"
SaneWinDS
Может сканировать. Удается вставить URI сканера в соотвествующее поле и сканировать. Но сам фронтенд (версия 0.9.5589) пока что очень убогий и годится только для тестов.
SwingSane
Не удалось.
Патчим драйвер hplip чтобы работали сканеры net:_saned_IP_:hpaio:/net/HP_
Если при попытке прописать сканер wiasane не обнаружвает сканер, то, скорее это связано с багом в библиотеках hplip на сервере saned. Исправить ситуацию можно собрав hplip из исходников и применив патч, описанный тут: https://sourceforge.net/p/hplip/mailman/message/2564768/
Останавливаем saned:
sudo /etc/init.d/saned stop
Удаляем старый hplip:
sudo apt-get remove hplip
Cкачиваем исходники драйвера:
wget http://downloads.sourceforge.net/project/hplip/hplip/3.15.7/hplip-3.15.7_py2.5.tar
Рядом с распакованным архивом кладем патч hplip_sane_patch_and_make.rar (hplip-sane-patch.sh и hplip-sane-patch.diff) распаковываем и применяем его:
chmod a+x ./hplip-sane-patch.sh && ./hplip-sane-patch.sh
Дальше собираем по инструкции:
http://hplipopensource.com/hplip-web/install/manual/distros/ubuntu.html
Для Ubuntu 14.04 будет так: Ставим зависимости:
sudo apt-get install --assume-yes build-essential avahi-utils libcups2 cups libcups2-dev cups-bsd cups-client libcupsimage2-dev libdbus-1-dev build-essential ghostscript openssl libjpeg-dev libsnmp-dev snmp-mibs-downloader libtool libusb-1.0.0-dev wget policykit-1 policykit-1-gnome python3-dbus python3-gi python3-dev python3-notify2 python3-pil python3-pyqt4 gtk2-engines-pixbuf python3-dbus.mainloop.qt python3-reportlab python3-lxml libsane libsane-dev sane-utils xsane
Конфигурим:
./configure --with-hpppddir=/usr/share/ppd/HP --libdir=/usr/lib --prefix=/usr --enable-qt4 --disable-libusb01_build --enable-doc-build --disable-cups-ppd-install --disable-foomatic-drv-install --disable-foomatic-ppd-install --disable-hpijs-install --disable-udev_sysfs_rules --disable-policykit --enable-cups-drv-install --enable-hpcups-install --enable-network-build --enable-dbus-build --enable-scan-build --enable-fax-build
Компилим:
make
Ставим:
make install
Затем ставим плагин:
hp-plugin -i
И собственно принтер/сканер:
sudo hp-setup -i -a <ip address of printer>
Теперь можно запустить saned, настроить на клиенте backend net и проверяем с удаленного клиента:
sudo /etc/init.d/saned start
И на клиенте проверяем:
scanimage -L
Прописываем пользователям сканеры в NAPS2 в соответствии с группами AD
Для сканирования я применяю бесплатную опенсорсную утилитку NAPS2 - http://sourceforge.net/projects/naps2/
Если на терминальном сервере много сканеров, то пользователю неудобно выбирать каждый раз нужный.
Можно создавать профили NAPS2 в зависимости от того, в какие группы входит пользователь.
Каждому сканеру сопоставлена групппа. Если пользовтаель входит в группу - ему пропишется нужный сканер. Названия групп и сканеров разные, потому что группы изначально использовались для прописывания принтеров. Но можно сделать их одинаковыми и тогда скриптец немного упростится.
Вот этот скриптец VBS для прописывания сканеров в NAPS2:
Dim dicScanGroups, arrGroups Set dicScanGroups = CreateObject("Scripting.Dictionary") 'Заполняем словарь групп-сканеров. ''''''''''''''''''''Key - имя группы, Value - имя сканера dicScanGroups.Add "Prn_1536_Gilyar6","M1530 Gilyar 6" dicScanGroups.Add "Prn_1536_Gilyar7","M1530 Gilyar 7" dicScanGroups.Add "Printer_Chehov_M521","M521 Chehov" dicScanGroups.Add "Printer_Egorevsk_M521","M521 Egor'evsk" dicScanGroups.Add "Printer_Kolomna_M521","M521 Kolomna" dicScanGroups.Add "Printer_Podolsk_M521","M521 Podolsk" dicScanGroups.Add "Printer_Scholkovo_HP_MFP","M521 Schelkovo" dicScanGroups.Add "Printer_B_Tishinskiy_M521","M521 B.Tishinskiy" dicScanGroups.Add "Printer_Balashiha_M521","M521 Balashiha" dicScanGroups.Add "Printer_ul.Dm.Ulyanova_HP521","M521 ul.Dm.Ulyanova" dicScanGroups.Add "Printer_Lobnya_M521","M521 Lobnya" dicScanGroups.Add "Printer_Lubertsy_M521","M521 Lubertsy" dicScanGroups.Add "Printer_Mytishi_M521","M521 Mytishi" dicScanGroups.Add "Printer_Pavlovskiy_Posad_M521","M521 PavlPosad" dicScanGroups.Add "Printer_Volokolamsk_M521","M521 Volokolamsk" dicScanGroups.Add "Printer_Zvenigorod_M521","M521 Zvenigorod" dicScanGroups.Add "Prn_HP521_Zheleznodorozhnyj","M521 Zheleznodorozhnyj" dicScanGroups.Add "Printer_Kashira_M521","M521 Kashira" dicScanGroups.Add "Prn_Klin_M521","M521 Klin" dicScanGroups.Add "Prn_M521_Noginsk_def","M521 Noginsk" dicScanGroups.Add "Printer_Orehovo-Zuevo_M521","M521 Orehovo-Zuevo" dicScanGroups.Add "Printer_Shatura_M521","M521 Shatura" arrGroups = dicScanGroups.Keys Dim intCount, strGroup, ScannerName, ScanerDevName, ScannerID Dim objDeviceManager, i, objFSO, ProfileFile, DesktopPath Set objUser = CreateObject("ADSystemInfo") Set CurrentUser = GetObject("LDAP://" & objUser.UserName) strGroup = LCase(Join(CurrentUser.MemberOf)) Set objFSO = CreateObject("Scripting.FileSystemObject") Set Shell = CreateObject("WScript.Shell") Set DeviceManager = Wscript.createObject("WIA.DeviceManager") 'создаем папку и файл %APPDATA%\NAPS2\profiles.xml Call Shell.Run("%COMSPEC% /c mkdir ""%APPDATA%\NAPS2""",0,true) ''objFSO.CreateFolder(Shell.expandEnvironmentStrings("%APPDATA%") & "\NAPS2") Set ProfileFile = objFSO.CreateTextFile(Shell.expandEnvironmentStrings("%APPDATA%") & "\NAPS2\profiles.xml", True) ProfileFile.WriteLine "<?xml version=" & """" & "1.0" & """" & "?>" ProfileFile.WriteLine "<ArrayOfExtendedScanSettings xmlns:xsi="&""""&"http://www.w3.org/2001/XMLSchema-instance"&"""" & " xmlns:xsd="&""""&"http://www.w3.org/2001/XMLSchema"&""""&">" 'Перебираем группы из словарика и и если группа есть у пользюка то For intCount = 0 to dicSCanGroups.count - 1 ScannerName = dicScanGroups.Item(arrGroups(intCOunt)) If InStr(strGroup, lcase(arrGroups(intCount))) Then 'Создаем ярлык на утилитку сканирования DesktopPath = Shell.SpecialFolders("Desktop") Set oShortCut = Shell.CreateShortcut(DesktopPath & "\ScanTool.lnk") oShortCut.TargetPath = "C:\ScanTool\NAPS2.exe" oShortCut.Save 'перебираем сканеры чтобы найти DevID For i = 1 to DeviceManager.DeviceInfos.Count ScanerDevName = DeviceManager.DeviceInfos(i).Properties("Name").Value ScannerID = DeviceManager.DeviceInfos(i).DeviceID If StrComp(ScanerDevName, ScannerName, vbTextCompare) = 0 Then 'прописываем сканер в файлик ProfileFile.WriteLine " <ExtendedScanSettings>" ProfileFile.WriteLine " <Device>" ProfileFile.WriteLine " <ID>" & ScannerID & "</ID>" ProfileFile.WriteLine " <Name>" & ScanerDevName & "</Name>" ProfileFile.WriteLine " </Device>" ProfileFile.WriteLine " <DriverName>wia</DriverName>" ProfileFile.WriteLine " <DisplayName>" & ScanerDevName & "</DisplayName>" ProfileFile.WriteLine " <IconID>0</IconID>" ProfileFile.WriteLine " <MaxQuality>false</MaxQuality>" ProfileFile.WriteLine " <IsDefault>true</IsDefault>" ProfileFile.WriteLine " <Version>1</Version>" ProfileFile.WriteLine " <UseNativeUI>false</UseNativeUI>" ProfileFile.WriteLine " <AfterScanScale>OneToOne</AfterScanScale>" ProfileFile.WriteLine " <Brightness>0</Brightness>" ProfileFile.WriteLine " <Contrast>0</Contrast>" ProfileFile.WriteLine " <BitDepth>C24Bit</BitDepth>" ProfileFile.WriteLine " <PageAlign>Left</PageAlign>" ProfileFile.WriteLine " <PageSize>Letter</PageSize>" ProfileFile.WriteLine " <Resolution>Dpi200</Resolution>" ProfileFile.WriteLine " <PaperSource>Glass</PaperSource>" ProfileFile.WriteLine " </ExtendedScanSettings>" End If Next End If Next ProfileFile.WriteLine "</ArrayOfExtendedScanSettings>" ProfileFile.Close
Discussion