Использование сканера (1Cv8) — различия между версиями
(Новая страница: «Категория:Примеры кода 1С ==Wiaaut.dll== {{cite|wiaaut.chm| Windows Image Acquisition Automation Layer The Microsoft® Windows® Image Ac...») |
(нет различий)
|
Текущая версия на 09:58, 7 октября 2010
Wiaaut.dll
Windows Image Acquisition Automation Layer
The Microsoft® Windows® Image Acquisition (WIA) Automation Layer version 2.0 is a high-quality, full-featured image manipulation component that provides end-to-end image processing capabilities for Microsoft Visual Basic® 6.0, Active Server Pages (ASP), and scripting languages. The WIA Automation Layer exposes features in Windows XP Service Pack 1 or later to make it easy to acquire images on digital cameras, scanners, or web cameras, and to rotate, scale, and annotate your image files. Earlier versions of Windows are not supported.
Источник: wiaaut.chm
Библиотека:
- msdn: Windows Image Acquisition Automation Layer
- Медиа:wia-sdk.zip
- http://download.microsoft.com/download/WinXPHome/Utility/2.0/WXP/EN-US/WIAAutSDK.zip
Использование из 1Cv8
Источник: http://www.forum.mista.ru/topic.php?id=271373
Device = Новый COMОбъект("WIA.DeviceManager");
Количество = Device.DeviceInfos.Count;
oDevice = Новый Массив(Количество);
Для К=1 По Количество Цикл
Если Device.DeviceInfos(к).Type = 3 Тогда
Попытка
oDevice[к-1] = Device.DeviceInfos(к).Connect();
Исключение
oDevice[к-1] = Неопределено;
КонецПопытки;
Иначе
oDevice[к-1] = Неопределено;
КонецЕсли;
КонецЦикла;
Для К = 1 По Количество Цикл
Если oDevice[к-1] <> Неопределено Тогда
Item = oDevice[к-1].ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}");
Image = Item.Transfer("{557CF401-1A04-11D3-9A73-0000F81EF32E}");
Image.SaveFile("D:\aaa.jpg");
КонецЕсли;
КонецЦикла;
Сканирование документов из JScript
Источник: http://community.terrasoft.ua/node/2324
5 октября 2008 - 16:35 Опубликовано: S.Kalishenko
А теперь немного о не менее интересном, чем печать документов. А именно, сканирование. Как я уже упоминал чуть ниже в блоге, для сканирования документов можно использовать WIA от Microsoft. Для этого необходимо предварительно установить библиотеку wiaaut.dll от MS. Т.е. ее необходимо скачать, установить (используя regsvr32.exe) и далее можно использовать методы COM-объекта WIA.
А теперь сам код.
//-----------------------------------------------------------------------------
// scr_ScanUtils
//-----------------------------------------------------------------------------
// Device Types
var UnspecifiedDeviceType = 0;
var ScannerDeviceType = 1;
var CameraDeviceType = 2;
var VideoDeviceType = 3;
// Commands
var wiaCommandSynchronize = '{9B26B7B2-ACAD-11D2-A093-00C04F72DC3C}';
var wiaCommandTakePicture = '{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}';
var wiaCommandDeleteAllItems = '{E208C170-ACAD-11D2-A093-00C04F72DC3C}';
var wiaCommandChangeDocument = '{04E725B0-ACAE-11D2-A093-00C04F72DC3C}';
var wiaCommandUnloadDocument = '{1F3B3D8E-ACAE-11D2-A093-00C04F72DC3C}';
// Picture formats
var wiaFormatBMP = '{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}';
var wiaFormatPNG = '{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}';
var wiaFormatGIF = '{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}';
var wiaFormatJPEG = '{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}';
var wiaFormatTIFF = '{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}';
// Группа "Все файлы"
var RootFilesGroup = '{F03EDFB0-C246-4A9D-B0E4-DA8C8B3DD338}';
function ConvertImageFile(ImageFile, Format) {
var IP = System.CreateObject("Wia.ImageProcess");
IP.Filters.Add(IP.FilterInfos("Convert").FilterID);
IP.Filters(1).Properties("FormatID").Value = Format;
var Img = IP.Apply(ImageFile);
return Img;
}
// Сканирование без диалоговых окон на сканер по-умолчанию
function SilentScan(FileName) {
try {
System.BeginProcessing();
var Device;
var Dialog = System.CreateObject("WIA.CommonDialog");
var DeviceManager = System.CreateObject("WIA.DeviceManager");
var Count = DeviceManager.DeviceInfos.Count;
for(var j = 1; j <= Count; j++) {
var DeviceInfo = DeviceManager.DeviceInfos.Item(j);
if (DeviceInfo.Type == ScannerDeviceType) {
Device = DeviceInfo.Connect();
break;
}
}
if (!Assigned(Device)) {
Log.Write(2, "Сканер не обнаружен.");
return;
}
if ((Assigned(Device.Items)) && (Assigned(Device.Items.Item(1)))) {
var item = Device.Items.Item(1);
try {
var Intent = 1; // цветная печать
/* Параметры сканирования */
var Properties = item.Properties;
for (var i = 1; i <= Properties.Count; i++) {
var PropItem = Properties.Item(i);
switch(PropItem.PropertyID) {
/* Horizontal Resolution */
case 6147: PropItem.Value = 150;
break;
/* Vertical Resolution */
case 6148: PropItem.Value = 150;
break;
/* Horizontal Starting Position (Scanning Area) */
case 6149: PropItem.Value = 0;
break;
/* Vertical Starting Position (Scanning Area) */
case 6150: PropItem.Value = 0;
break;
/* Current Intent */
case 6146: PropItem.Value = Intent;
break;
}
}
/* Старт сканирования */
var imageFile = Dialog.ShowTransfer(item);
if (Assigned(imageFile)) {
if (CheckFileExists(FileName)) {
FileName = GetTemporaryFileName(ShortFileName, false)
}
/* Преобразование полученного файла в jpeg */
var WIAFormat = wiaFormatJPEG;
var Img = ConvertImageFile(imageFile, WIAFormat);
Img.SaveFile(FileName);
}
} catch(e) {
Log.Write(2, "При сканировании произошла ошибка. Попробуйте, пожалуйста, еще раз.");
}
} else {
Log.Write(2, "При инициализации произошла ошибка.");
}
} finally {
System.EndProcessing();
}
}
function Main() {
SilentScan("c:\\temp\\Test.jpg");
}
В приведенном выше коде основной является функция SilentScan(). Поэтому, чтобы начать сканирование, необходимо запускать именно ее, передав полный путь к сохраняемому файлу. В этом примере файл сохраняется в формате jpg, хотя, если это необходимо, WIA позволяет конвертировать полученный объект в ряд других форматов (bmp, png, tiff, gif, jpg). Вообще по-умолчанию после сканирования получается объект в формате bmp. Поэтому, если Вам нужен только bmp-файл, можно просто делать imageFile.SaveFile(FileName) без преобразования. Вроде бы все. Да, и не забудьте подключить к скрипту scr_Utils и scr_FileUtils.
Надеюсь кому-то это решение когда-нибудь пригодится. :)