[Из песочницы] Сканирование на терминальном сервере бесплатно
Поискал в сети по запросу Scan over RDP, нашел программы типа Scan Redirector RDP Edition, TSX Scan и т. п., за которые хотят в районе сотни-другой баксов за 1 лицензию, вроде бы даже видел за 800 баксов.
Я не люблю нелицензионный софт, поэтому решил реализовать сам:
Здесь вы видите главную страницу управления удаленным сканером. Плюс моего решения в том, что на терминальном сервере (или любом другом компьютере, с которого захотите сканировать) решительно ничего устанавливать не нужно, нужен только браузер.
Если нажать New JPG scan, увидим следующее:
А потом:
Картинку можно сохранить по правой кнопке. Нажмем New PDF scan:
Нажмем пару раз Scan PDF next page:
По клику по картинке видим ее на весь экран:
Нажмем Delete page 2:
Нажмем Make PDF:
Нажмем Browse images:
Тут можно просмотреть все, что было отсканированно ранее. Как-то так оно работает. Поддерживается любой TWAIN-совместимый сканер. Протестировано в Хроме.
Опыта разработки у меня мало, поэтому код наверняка написан в худших традициях всего. Пинайте в комментариях.
Безопасность минимальная: чтобы сканером не воспользовался посторонний, файл называется scan57578.php (имя можно изменить на другое). А в index.php напишите «Access denied».
Что нужно установить на компьютер со сканером?
Как вы уже наверно догадались, нам понадобится веб-сервер. Я использовал Denwer, который в данном случае из пушки по воробьям, но можно использовать любой другой с поддержкой PHP. При этом нужно будет соответствующим образом поправить код, так как в нем используются пути Денвера (диск Z: и т. п.).
Что нужно еще: программа CmdTwain, которая собственно сканирует из командной строки, и консольная же утилита jpeg2pfg. Устанавливаем CmdTwain, запускаем из Пуска CmdTwain\Select Source и выбираем наш сканер. Устанавливаем Денвер, соглашаемся со всем по умолчанию.
Затем на диске Z нужно найти php.ini и задать параметр max_execution_time = 130. Значение выбираем, замерив, сколько длится одно сканирование на вашем сканере. Затем Restart Denwer. Берем с рабочего стола ярлык Start Denwer и кидаем его в автозагрузку. Задаем компьютеру статический IP.
Создаем в папке Z:\home папку с названием равным IP компьютера. В моем случае папка называется 10.74.0.98. В ней создаем папку www, а в ней папку, в которой будут лежать сканы. В моем случае она называется scans. Полный путь выглядит так: Z:\home\10.74.0.98\www\scans.
Веб-сервер настроен. Далее создайте папку Z:\jpeg2pdf. В нее скопируйте jpeg2pdf.exe, который вы скачали по ссылке, которую я давал выше. А также создайте в ней файл makepdf.bat со следующим содержимым:
@echo off
z:
cd z:\home\10.74.0.98\www\scans\%1
z:\jpeg2pdf\jpeg2pdf.exe -z none *.jpg -o %1.pdf
move *.pdf ..
Исправьте IP на нужный. Этот файл создает PDF из набора JPG. В качестве параметра ему передается имя папки с этим набором.
В папку Z:\home\10.74.0.98\www поместите index57578.php (или как вы хотите его назвать) со следующим содержимым:
');
}
if($_GET['scantype']=='pdf')
{
if($_GET['delete']!='')
{
$i = -2;
$files = scandir($folder.'/'.$_GET['time']);
foreach($files as $filename)
{
$i++;
if ($filename[0] == '.') continue;
if ($_GET['delete'] == $i) system('del '.'Z:\\home\\'.$ip.'\\www\\'.$folder.'\\'.$_GET['time'].'\\'.$filename);
}
}
else
{
if (!is_dir($folder.'/'.$_GET['time']))
{
system('md Z:\\home\\'.$ip.'\\www\\'.$folder.'\\'.$_GET['time']);
$filename = 'Z:\\home\\'.$ip.'\\www\\'.$folder.'\\'.$_GET['time'].'\\0001.jpg';
$cmd = '"C:\Program Files\GssEziSoft\CmdTwain\CmdTwain.exe" "'.$filename.'"';
system($cmd);
}
else
{
$n = 1;
$files = scandir($folder.'/'.$_GET['time']);
foreach($files as $filename)
{
if ($filename[0] == '.') continue;
$t = substr($filename, 0, -4)+0;
if ($t > $n) $n = $t;
}
$n++;
$fn = str_pad($n, 4, "0", STR_PAD_LEFT).'.jpg';
$filename = 'Z:\\home\\'.$ip.'\\www\\'.$folder.'\\'.$_GET['time'].'\\'.$fn;
$cmd = '"C:\Program Files\GssEziSoft\CmdTwain\CmdTwain.exe" "'.$filename.'"';
system($cmd);
}
}
$i = -2;
$files = scandir($folder.'/'.$_GET['time']);
foreach($files as $filename)
{
$i++;
if ($filename[0] == '.') continue;
echo "Delete page ".$i."
";
}
if ($i == 0) echo '';
}
if($_GET['scantype']=='makepdf')
{
$cmd = $jpeg2pdf.' '.$_GET['time'];
echo 'Download PDF
";
}
?>
Вверху задаются 4 параметра: IP компьютера со сканером, имя файла php, имя папки со сканами, путь к makepdf.bat.
Минусы: нельзя задать качество сканирования — сканирует всегда в 200 DPI и в цвете. Может как-то можно поменять параметры (например в реестре), но для офисных задач они подходят.
И да, я знаю, что функцию gettime () можно написать короче и красивее. Предлагайте самые красивые варианты в комментариях.
Спасибо за внимание!
Комментарии (1)
13 ноября 2016 в 18:49
0↑
↓
Спасибо за CmdTwain, потестим
Также рекомендую: http://unit6.ru/twain-web
Установил в офисе — полёт нормальный 3 года. Единственный недостаток — мерзкий .Net — служба периодически зависает, решил перезапуском. Пробовал обновить версию — не увидела сканера, откатился. Надо будет не полениться и написать разработчикам.Сам же несколько лет назад писал на делфи консольную утилиту: сканирует в несколько форматов, разрешений и цветностей, и главное — заданную область — скорость сканирования маленьких бланков выросла в разы!
А вообще отдельно разработчикам стандарта Twain и некоторым производителям сканеров хочется послать лучи поноса:
1. Некоторые сканеры сканируют всегда всё, игнорируя параметры.
2. Некоторые драйверы отображают сканер в системе при его физическом отсутствии.
3. Два сканера одной модели в системе? Не, не слышали…