Задача:
Редактирование изображения на станции сканирования перед отправкой на сервер FlexiCapture10.
Функционал станции сканирования позволяет выполнить обрезку изображения по прямоугольнику, инвертировать черно-белое изображение, очистить от мусора и убрать перекос. Кроме того, можно перед отправкой скрыть конфиденциальную информацию, поместив на ее месте черный прямоугольник.
Но что делать, если перед отправкой нужно выполнить более сложные операции?
В большинстве сценариев, редактировать каждое отсканированное изображение вручную ни к чему. Т.к. если у вас есть время на редактирование картинки, то скорее всего, есть время на ввод ее содержимого напрямую в систему. Но в отдельных случаях такой функционал может быть полезен.
План решения задачи такой:
var page = Selection.Item(0);
if(page.IsPage)
{
//Создаем объект управления
var WshShell =new ActiveXObject("wscript.shell");
try
{
//Настройки сохранения временного файла
var savingOptions = this.NewImageSavingOptions();
savingOptions.Format = "jpg";
savingOptions.ColorType = "FullColor";
savingOptions.ShouldOverwrite = true;
savingOptions.AddProperFileExt = false;
//Путь к приложению графическому редактору
var editorPath = "%Image editor full path%" + " "; //В конце добавим пробел
//Путь к временному файлу
var filePath = "C:\\temp_image_30F56EFB-8F7C-443F-A204-74C0E11B7408.jpg";
//Сохраняем изображение
page.SaveAs(filePath, savingOptions);
//Запускаем приложение-редактор
var WshExec = WshShell.Exec(editorPath + filePath);
if(WshExec == null)
{
WshShell.Popup("Запустить не удалось", 0, "", 0);
return;
}
//Ждем, пока процесс запущен
while(WshExec.Status == 0)
{
Wait(2000);
}
SetPageImage(page, filePath);
}
finally
{
if(WshShell != null) delete WshShell;
var FSO = new ActiveXObject("Scripting.FileSystemObject");
if(FSO.FileExists(filePath))
{
FSO.DeleteFile(filePath);
}
delete FSO;
}
}
Для более надежного решения нужно озаботиться получением пути к «правильной» временной директории.
Кроме того, было бы правильно вывести оператору сообщение, что его страница будет заменена.
По идее, подобным способом можно выполнить и массовое редактирование изображений, если графический редактор поддерживает интерфейс командной строки.
Редактирование изображения на станции сканирования перед отправкой на сервер FlexiCapture10.
Функционал станции сканирования позволяет выполнить обрезку изображения по прямоугольнику, инвертировать черно-белое изображение, очистить от мусора и убрать перекос. Кроме того, можно перед отправкой скрыть конфиденциальную информацию, поместив на ее месте черный прямоугольник.
Но что делать, если перед отправкой нужно выполнить более сложные операции?
В большинстве сценариев, редактировать каждое отсканированное изображение вручную ни к чему. Т.к. если у вас есть время на редактирование картинки, то скорее всего, есть время на ввод ее содержимого напрямую в систему. Но в отдельных случаях такой функционал может быть полезен.
План решения задачи такой:
- Создаем на панели инструментов станции сканирования кастомную кнопку. Нажатие этой кнопки будет обрабатывать скрипт.
- В скрипте определяем элементы, которые были активны (выбраны) в момент нажатия кнопки. Если мы выбрали изображение, то продолжаем…
- Создаем структуру с настройками формата и качества сохранения изображений
- Сохраняем изображение во временной директории
- Открываем подходящий редактор и передаем ему в качестве параметра путь к временному файлу с изображением. (Редактор должен поддерживать открытие файла изображения через параметр командной строки).
- Станция сканирования не позволяет из скрипта запускать приложения и «ждать возврата», потому придумаем бесконечный цикл, который будет раз в 2 сек. опрашивать статус открывшегося редактора на предмет «не завершился ли его процесс»
- После завершения процесса редактирования нужно вернуть на место отредактированное изображение и удалить его временную копию.
var page = Selection.Item(0);
if(page.IsPage)
{
//Создаем объект управления
var WshShell =new ActiveXObject("wscript.shell");
try
{
//Настройки сохранения временного файла
var savingOptions = this.NewImageSavingOptions();
savingOptions.Format = "jpg";
savingOptions.ColorType = "FullColor";
savingOptions.ShouldOverwrite = true;
savingOptions.AddProperFileExt = false;
//Путь к приложению графическому редактору
var editorPath = "%Image editor full path%" + " "; //В конце добавим пробел
//Путь к временному файлу
var filePath = "C:\\temp_image_30F56EFB-8F7C-443F-A204-74C0E11B7408.jpg";
//Сохраняем изображение
page.SaveAs(filePath, savingOptions);
//Запускаем приложение-редактор
var WshExec = WshShell.Exec(editorPath + filePath);
if(WshExec == null)
{
WshShell.Popup("Запустить не удалось", 0, "", 0);
return;
}
//Ждем, пока процесс запущен
while(WshExec.Status == 0)
{
Wait(2000);
}
SetPageImage(page, filePath);
}
finally
{
if(WshShell != null) delete WshShell;
var FSO = new ActiveXObject("Scripting.FileSystemObject");
if(FSO.FileExists(filePath))
{
FSO.DeleteFile(filePath);
}
delete FSO;
}
}
Для более надежного решения нужно озаботиться получением пути к «правильной» временной директории.
Кроме того, было бы правильно вывести оператору сообщение, что его страница будет заменена.
По идее, подобным способом можно выполнить и массовое редактирование изображений, если графический редактор поддерживает интерфейс командной строки.
Comments
1 comment
This is some actual good stuff. Do you mind if I translate this to english on put the information on the english side of this forum?
Please sign in to leave a comment.