TWAIN底层功能调用

概念介绍

Dynamic Web TWAIN SDK 产品所有的扫描仪相关的接口实际上都是通过与TWAIN底层接口交互来封装并以简洁的语法提供给大家使用。在大多数情况下,该SDK所提供的API已经足以满足大家的使用需求。

但是在一些特殊情况,比如扫描仪有些特别的功能,无法在Dynamic Web TWAIN SDK中找到对应的API来设置。这种情况,Dynamic Web TWAIN SDK 提供了一种叫做 Capability Negotiation (中文直译叫“能力协商”) 的接口方式,以便你可以直接与TWAIN底层接口交互,实现更多的功能。

容器

容器数据结构 说明
TW_ONEVALUE 单值型,只能设置单个数值。
TW_ARRAY 数组类型。
TW_RANGE 许多扫描设置允许用户从一系列规则间隔的值中选择其当前值。 该功能可以指定最小和最大可接受值以及值之间的增量步长。 例如,可以支持从100到600的分辨率,步长为50(100,150,200,...,550,600)。
TW_ENUMERATION 枚举型。 这是最常用的类型,因为它定义了一个值列表,可以从中选择当前值。 例如,如果对于扫描仪的分辨率选项,如果各个值之间没有固定步长,则将使用枚举(例如,150,400和600)。

操作步骤

要执行TWAIN底层功能调用(Capability Negotiation),基本上就是两步走:

Get

通过Get接口来接入某个扫描设置(capability)。接入后,才能通过其他的接口去读取该扫描设置的数据类型、值,等等。请参考下面的代码片段:

````javascript
DWObject.OpenSource();
DWObject.Capability = EnumDWT_Cap.***;
DWObject.CapGet();
var tempValue = '';
DWObject.CapValueType > 8 ?
/*STR*/tempValue = DWObject.CapValueString
:
/*NUM*/tempValue = DWObject.CapValue;
/*
* for BOOL
*/
if (DWObject.CapValueType == EnumDWT_CapValueType.TWTY_BOOL) {
    tempValue == 0 ? tempValue = 'FALSE' : tempValue = 'TRUE';
}
alert('The type of the capability is ' + DWObject.CapType);
alert('The value of the capability is ' + tempValue);

````

Set

通过Set接口来进行某个扫描设置(capability)的设置。

请注意,容器类型和某个扫描设置的可用值通常由扫描仪的TWAIN驱动决定的。 当您尝试去使用某个扫描设置时,您只能尝试修改它的值,以便它使用不同但可用的值。 因此,正常的操作步骤是先要去通过Get方法查询你准备使用的那个扫描设置,然后再进入Set环节。

对于不同的容器数据结构,请见下面的例子:

TW_ONEVALUE

````javascript
DWObject.OpenSource();
DWObject.Capability = EnumDWT_Cap.***; /*确保该Capability类型为TW_ONEVALUE*/
DWObject.CapGet();
DWObject.CapType = EnumDWT_TWAINCONTAINERTYPE.TWON_ONEVALUE;
DWObject.CapValueType > 8 ?
/*STR*/DWObject.CapValue = someStringValue;
:
/*NUM*/DWObject.CapValue = someNonStringValue;
DWObject.CapSet();
````

TW_ARRAY

````javascript
DWObject.OpenSource();
DWObject.Capability = EnumDWT_Cap.***; /*确保该Capability类型为TWON_ARRAY*/
DWObject.CapGet();
DWObject.CapType = EnumDWT_TWAINCONTAINERTYPE.TWON_ARRAY;
DWObject.CapNumItems = *;
if (DWObject.CapValueType > 8) {
/*STR*/
    DWObject.SetCapItemsString(0, someStringValue);
    DWObject.SetCapItemsString(1, someStringValue);
    …
} else {
/*NUM*/
    DWObject.SetCapItems(0, someNonStringValue);
    DWObject.SetCapItems(1, someNonStringValue);
    …
}
DWObject.CapSet();
````

TW_RANGE

````javascript
DWObject.OpenSource();
DWObject.Capability = EnumDWT_Cap.***; /*确保该Capability类型为TWON_RANGE*/
DWObject.CapGet();
DWObject.CapType = EnumDWT_TWAINCONTAINERTYPE.TWON_RANGE;
DWObject.CapMinValue = 80;
DWObject.CapMaxValue = 200;
DWObject.CapStepSize = 20;
DWObject.CapCurrentValue = 100;
DWObject.CapSet();
````

TW_ENUMERATION

````javascript
DWObject.OpenSource();
DWObject.Capability = EnumDWT_Cap.***; /*确保该Capability类型TWON_ENUMERATION*/
DWObject.CapGet();
DWObject.CapType = EnumDWT_TWAINCONTAINERTYPE.TWON_ENUMERATION;
DWObject.CapNumItems = *;
if(DWObject.CapValueType > 8 ){
/*STR*/
    DWObject. SetCapItemsString (0, someStringValue);
    DWObject. SetCapItemsString (1, someStringValue);
    …
} else {
/*NUM*/
    DWObject. SetCapItems(0, someNonStringValue);
    DWObject. SetCapItems(1, someNonStringValue);
    …
}
DWObject.CapCurrentIndex = 1;
DWObject.CapSet();
````

results matching ""

    No results matching ""