Estoy peleándome con ésta magnífica libreria, junto con la eztwain en un scanner fujitsu fi-5120C (éste escanner no lleva tapa, lleva un feeder que carga automáticamente los documentos).
Mi problema es que cuando escanea el último documento, no sé que instrucción poner para que detecte ésto, que no nay más documentos que escanear, ya que tengo activado el multitransfer (tw_SetMultiTransfer(1)). He optado por la "CHAPUZA" de poner como último documento uno que tenga un código de barras que contenga la cadena "9999999", y en el código correspondientes le indico que si se encuentra ésta cadena, entonces oScan:end(), ya que si no pongo ésto, no sé como parar el multitranfer.
Codigo:
- Code: Select all Expand view RUN
Function escanea()
local cBarValue,hdib,nombre,hora,minu,segu,dia,camino,cFile,sigue
local nCntPage:=0, cVar,oIni,escaneo,errores,conta:=0,contae:=0
INI oIni FILE ".\GESPAQ.INI"
GET escaneo SECTION "JPG" ENTRY "Ruta Imagenes provisio" OF oIni DEFAULT curdrive()+":\"+curdir()
GET errores SECTION "JPG" ENTRY "Ruta Imagenes entrada" OF oIni DEFAULT curdrive()+":\"+curdir()
ENDINI
cFile:="provi"
camino:=curdrive()+":\"+curdir()+"\"
tw_SetMultiTransfer(1)
oScan := TScan32():New(cfile)
* oscan:SelectFeeder(.t.)
* oscan:SetAutoFedd(1)
oScan:SetRes( 300 ) && 150dpi
* oScan:PixelType( TWAIN_BW )
oScan:PixelType( TWPT_RGB )
oScan:SetHide( .T. )
oscan:RegionSet(0,0,8.40,4)
Do while .t.
dia :=alltrim(padr(str(year(date())),"0",4))+alltrim(padr(str(month(date())),"0",2))+alltrim(padr(str(day(date())),"0",2))
hora:=SUBSTR(TIME(), 1, 2)
minu:=SUBSTR(TIME(), 4, 2)
segu:=SUBSTR(TIME(), 7, 2)
cFile:=dia+hora+minu+segu+".jpg"
nombre:=oscan:Digitofile( cFile,oscan )
do case
case nombre<>"0" .and. nombre <>'9999999'
movefile(camino+cFile,escaneo+'0'+nombre+'.jpg' )
conta+=1
case nombre='0'
movefile(camino+cFile,errores+cFile )
contae+=1
case nombre='9999999'
delete file &nombre
end case
if Publicas:cFin=1
exit
endif
enddo
* TW_CloseSource()
if .not. oScan:BC_available()
msgalert("No esta registrada la aplicacion","Atencion")
endif
oScan:End()
msginfo('Resumen del Escaneo'+chr(10)+chr(10)+'Albaranes con codigo de barras '+alltrim(str(conta))+chr(10)+'Albaranes sin codigo de barras '+alltrim(str(contae)),'HEMOS ACABADO')
return (sigue)
Y este es el codigo de la clase que se encarga del escaneo
- Code: Select all Expand view RUN
- METHOD DigiToFile( cFile,oscan )
local cBarValue:=""
if EMPTY( cFile )
cFile := ::cFile
endif
IF !::lError
::hDib := ::Acquire() // Importar
if oScan:BC_Recognize(::hDib,1,-1)>0
cBarValue:=oScan:BC_Text(0)
cBarValue:=alltrim(cBarValue)
else
cBarValue:="0"
endif
ENDIF
IF cBarValue='9999999'
Publicas:cFin:=1
endif
IF ::hDib <> 0
IF ::lBmp // Format bmp
::DibToBmp( cFile ) // Si no hacemos uso de BMP
ELSE
IF TW_IsJpg() // Si puede hacer uso del JPG
::DibToJpeg( cFile )
ELSE
::DibToBmp( cFile ) // Si no hacemos uso de BMP
ENDIF
ENDIF
else
Publicas:cFin:=1
ENDIF
Return (cBarValue)
A ver si me ayuda alguien
Saludos