В win7 есть проблема с сканированием документов, нет нужного софта, по крайней мере чтобы понимал наш офисный HP 3055. У нас весь отдел продаж перевели на win7 с ХР, поэтому чтобы отсканить они запускают ХР в виртуалке или бегают к Linuxоидам. Это очень неудобно для всего офиса.
В локалке есть виртуалка с sugar crm на ubuntu-сервере (CRM для менеджеров). В sugar можно вставить ссылочку на php файлик который будет с ubuntu-server sugar же сканить документы и класть в общуу шару.
Все сделал, все работает. Все довольны:
1.На веб-сервере ставятся пакеты (с зависимостями): sane-tools, hplip,nfs-client
2.запускается hp-setup -i -a 10.80.1.11 (ну тут ip hp МФУ или устанавливайте сканер по вашему, где он у вас есть...)
3.настраивается доступ к шаре (nfs, можно smb), настройки индивидуальные. я создавал сначала на сервере с шарой системную samba учетку, потом просто нужный каталог примонтировал по nfs, поэтому в этой инструкции ничего нет про самба. nfs лучше.
4.потом делаются 2 скрипта, которые заставляют все это работать, а в sugar, или где угодно у вас на корпоративном вебсервере, делается ссылка на этот php файл
SCAN.PHP:
<?
if (isset($_POST[action])) // Поидее качество задано всегда, эта проверка всегда впоряде.
{
$X = $_POST[action];
if (isset($_POST[filename])) //Задан ли текст при качестве
{
$Y = preg_replace('/ /','_',$_POST[filename]);
if (isset($_POST[pages])) //Заданы ли страницы при качестве с текстом
{
$Z = $_POST[pages];
exec("/var/www/scan.sh $X $Y $Z",$command_output);
}
else
exec("/var/www/scan.sh $X $Y",$command_output);
}
else//Заданы ли страницы при качестве без текста
{
if (isset($_POST[pages]))
{
$Z = $_POST[pages];
exec("/var/www/scan.sh $X $Z",$command_output);
}
else // Не заданы ни страницы ни текст, только Качество
exec("/var/www/scan.sh $X",$command_output);
}
$NS = count($command_output);
}
?>
<html>
<head>
<title>Сканирование</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table border=1>
<tr><td colspan=2>
<b>Положите документ(ы) в сканер и выберите нужный вариант сканирования</b>
</td></tr>
<form action="" method="post">
<tr>
<td>
<input checked="on" type="radio" id="action" name="action" value="100" />
</td>
<td>
Сканировать с низким разрешением. Файл до мегабайта.
</td>
</tr>
<tr>
<td>
<input type="radio" id="action" name="action" value="200" />
</td>
<td>
Сканировать с высоким разрешением. Файл больше мегабайта.
</td>
</tr>
<tr>
<td>
<input type="radio" id="action" name="action" value="300" />
</td>
<td>
Сканировать с огромным разрешением. Файл около 3-х мегабайт.
</td>
</tr>
<tr>
<td>
<input type="text" id="filename" name="filename" />
</td>
<td>
Можете указать название файла. Расширение указывать не надо.
</td>
</tr>
<tr>
<td>
<input type="text" id="pages" name="pages" />
</td>
<td>
Сколько листов сканировать. Оставьте пустым, если 1 лист.
</td>
</tr>
<tr>
<td colspan="2">
<? if(!isset ($a))
{
echo "<input type='submit' value='Сканировать'>";
echo " Документ будет помещен на диск U в директорию 'Общая\Сканы'.";
}
?>
</form>
</td>
</tr>
<tr><td colspan="2">
<?
if($command_output != NULL)
{
for ($i = 0; $i < $NS--; $i++)
{
print_r ($command_output[$i]);
if($i>0) echo "<br \>";
}
}
else
echo "По вопросам поддержки пишите на support@ideco-software.ru.";
?>
</td></tr>
</table>
</body>
</html>
SCAN.SH:
#!/bin/bash -x
i=1
if [ "$#" -lt "1" ] && [ "$#" -gt "3" ]; then
echo -e "Использование: scan.sh [ 1 | 2 | 3 ] [text] [num]\nГде '1' значит Низкое качество, '2' - Среднее и '3' Лучшее качество изображения\n\
text - это текст который будет добавлен к имени файла.\nnum - это количество сканируемых страниц"
fi
if [ -n "$2" ]; then
FILENAME="$2"
else
FILENAME="$(date +%kHour_%Mmin_%SSec)"
fi
if [ -n "$3" ]; then
RUN="$3"
else
RUN="1"
fi
SRCDIR="/tmp"
DSTDIR="/mnt/sambashare"
function scan(){
while [ "$i" -le "$RUN" ]; do
scanimage -d hpaio:/net/HP_LaserJet_3055?ip=10.80.1.11 --format=pnm --compression JPEG --resolution "$1" -x 220 -y 300 > $SRCDIR/scanimage.pnm 2>/tmp/err
if [ "$?" -eq "0" ]; then
chmod 666 /tmp/scanimage.pnm
if [ $RUN -eq "1" ]; then
convert $SRCDIR/scanimage.pnm $DSTDIR/$FILENAME.jpeg
else
convert $SRCDIR/scanimage.pnm $DSTDIR/"$FILENAME"_"$i".jpeg
fi
echo "Отсканировано. Смотрите на диске U, в директории 'Общая\Сканы'."
else
error=$(cat /tmp/err)
echo "Не удалось отсканировать документ, обратитесь в тех.поддержку компании Айдеко."
echo "$error"
rm /tmp/err
fi
i=$(( $i + 1 ))
done
}
scan "$1" "$RUN"
exit 0
PS:
1. оба файла перечитайте и поправьте под себя ip-адреса, scanimage-строку в sh-скрипте, шары и т.д.
2. если запустите sh-скрипт от рута для проверки, то из /tmp/ не забудьте поудалять созданные файлики, а то из php не будет работать изза того что файлики Опач переписать не сможет. тут я не сразу понял в чем было дело.
3. всегда следите за правами. на шарах, на временных файлах, на запуск скриптов и т.д.