Использование сканера (1Cv8)

Материал из КинтВики
Версия от 09:58, 7 октября 2010; Павел Лазарев (обсуждение | вклад) (Новая страница: «Категория:Примеры кода 1С ==Wiaaut.dll== {{cite|wiaaut.chm| Windows Image Acquisition Automation Layer The Microsoft® Windows® Image Ac...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск


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

Библиотека:

Использование из 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.

Надеюсь кому-то это решение когда-нибудь пригодится. :)