El objetivo es almacenar los documentos en carpetas ordenadas por un tema específico y en un formato no modificable. También tiene opción de guardar los documentos en sistemas remotos a través de internet (Copia Remota) Se basa en un formulario sencillo y configurable para introducir los datos básicos del documento a escanear. Admite documentos multi página pdf. Muy rapido de trabajar.
Requisitos
• Requisitos mínimos: Open Office versión 2 o superior Escaner interface Twain
• Requisitos recomendados: Open Office 2.0.4(multiidioma)
• DLLs necesarias: NINGUNA. El ejecutable no se instala se copia
• Diferencias entre este programa y otros similares:
Gratuito, Es muy rápido y no interfiere en el trabajo del usuario. Una vez configurado vale para cualquier usuario sin conocimientos informáticos. Graba en Internet(envia por email a gmail, los documentos escaneados. Indices en formato texto.
Normalmente funciona con muchos escaneres. Sino para programarlo para el vuestro.
Esta comprobado en el Fujitsu 4220c. Es posible que valga para gran parte de los Fujitsu.Sino es muy facilito cambiar el código dentro.
Código: Seleccionar todo
;========================
; Author: Basicos de Autoit.es, 10/01/07, ver Autoit 3.2
; Escaneador y Organizador rápido de documentaciones digitales a PDF con indice de búsqueda
; Necesita Open Office 2 o superior. (Gratuito) y Escanner Twain
;Actualizar la dirección de correo a la suya
;Ver nombre de ventana según el modelo de escaner Twain (en winwait)
; La versión de office puede cambiar, solo hay q actualizar los winwait o sea que vale también para MS-OFFICE con mínimos cambios
;plantilla.odt es un documento cualquiera, se crea en guardar como del openoffice. (es gratuito)
;========================
#include <GUIConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <Misc.au3>
;hacer el stringsplit para varios formularios
If Not _Singleton("adfafdsaf") Then
MsgBox(0, "Abriendo varias veces", "Ya esta abierto este programa")
Exit
EndIf
Func FicheroIni($fichero)
Return StringReplace(StringReplace($fichero, ".exe", ".ini"), ".au3", ".ini")
EndFunc ;==>FicheroIni
Func parate()
SplashTextOn("Cambio de configuración de Escaner", "Activación de Cambio de Escaner" & @CRLF & "Se va a parar antes de escanear, Recuerde que se quedará de esa manera", 300, 200)
Sleep(3000)
SplashOff()
$iParate = 1
EndFunc ;==>parate
;=================================== DECLARANDO
Global $aLabels, $aTexts, $sFichero, $athebody, $ruta, $iParate, $rutafichero
#region --- ScriptWriter generated code Start ---
Opt("WinWaitDelay", 100)
Opt("WinTitleMatchMode", 2)
Opt("WinDetectHiddenText", 1)
Opt("MouseCoordMode", 0)
Opt("TrayIconDebug", 1)
FileInstall("plantilla.odt", "plantilla.odt", 1)
HotKeySet("{F8}", "parate")
HotKeySet("{F9}", "cierra")
Func cierra()
WinClose($sDocBlanco)
Sleep(1000)
Send("!d")
EndFunc ;==>cierra
;HotKeySet("+G","GuardarYsalir")
;HotKeySet("+X","Salir");usr
Func Enter2Tab()
Send("{TAB}")
EndFunc ;==>Enter2Tab
Func HaceIni($sSeccion, $sclave, $sdefecto)
$sTmp = IniRead(FicheroIni(@ScriptName), $sSeccion, $sclave, $sdefecto)
If $sTmp = $sdefecto Then IniWrite(FicheroIni(@ScriptName), $sSeccion, $sclave, $sdefecto)
Return $sTmp
EndFunc ;==>HaceIni
$sIdioma = HaceIni("Config", "Idioma", "UK")
$sDirDatos = HaceIni("Config", "DirDatos", @ScriptDir & "\Docs")
$sPlantilla = HaceIni("Config", "Modelo", "Plantilla.odt")
$sEmail = HaceIni("Config", "Email", "[email protected]")
$sEmailPass = HaceIni("Config", "EmailPass", "MiPass")
Global $sDocBlanco
$sTeclasExporta = HaceIni($sIdioma, "TeclasExporta", "{ALTDOWN}f{ALTUP}d{ENTER}") ; "{ALTDOWN}a{ALTUP}e"
$sTeclasEscanea = HaceIni($sIdioma, "TeclasEscanea", "{ALTDOWN}i{ALTUP}usr");"{ALTDOWN}i{ALTUP}aes"
$sInsertaSalto = HaceIni($sIdioma, "InsertaSalto", "{ALTDOWN}i{ALTUP}{ENTER}")
$sDocBlanco = HaceIni($sIdioma, "DocBlanco", "plantilla") ;Sin nombre Untitled
$sTextoSalto = HaceIni($sIdioma, "TextoSalto", "Insert Break");"Insertar salto"
$sWinTwain = HaceIni($sIdioma, "WinTwain", "Manejador TWAIN (32)") ;
If Not FileExists($sDirDatos) Then DirCreate($sDirDatos)
If Not StringRight("\", 1) Then $sDirDatos = $sDirDatos & "\"
#cs
While ProcessExists("soffice.bin") Or ProcessExists("soffice.exe")
ProcessClose("soffice.exe")
ProcessClose("soffice.bin")
Sleep(1500)
WEnd
#ce
If Not FileExists(@ProgramFilesDir&'\OpenOffice\program\swriter.exe') Then
MsgBox(0, "Error de openoffice", "Falta www.openoffice.org. Instalar Personalizada en Carpeta "& @ProgramFilesDir &"\OpenOffice\")
Exit
EndIf
While 1
HotKeySet("{ENTER}", "Enter2Tab")
$ruta = Formulario()
HotKeySet("{ENTER}")
If Not FileExists($rutafichero & ".pdf") Then MsgBox(0, "Guardado", "Presione cuando se guarde fichero", 20)
If WinExists($sDocBlanco) Then
WinClose($sDocBlanco)
WinActivate("OpenOffi")
Send("!D")
WinWaitClose($sDocBlanco, "", 2)
WinClose($sDocBlanco)
If WinExists($sDocBlanco) Then WinKill($sDocBlanco)
If Not FileExists($rutafichero & ".pdf") Then MsgBox(0, "Error en grabación", "El fichero " & $rutafichero & ".pdf no se grabó")
EndIf
Run(@ProgramFilesDir &''\OpenOffice\program\swriter.exe "' & @ScriptDir & "\" & $sPlantilla & '"')
While 1
Escanea()
$sEntrada = CajaEntrada("Elija Opción")
If StringLeft($sEntrada, 2) <> "&S" Then ExitLoop
Salto()
WEnd
If StringLeft($sEntrada, 2) = "&G" Then GuardarYsalir()
WEnd
Salir()
Exit
Func Salir()
WinClose($sDocBlanco)
WinClose($sDocBlanco)
ProcessClose("soffice.bin")
Exit
EndFunc ;==>Salir
Func GuardarYsalir()
;msgbox(0,"Se creara Fichero",$ruta,5)
$lruta = StringLeft($ruta, StringInStr($ruta, "\\\") - 1)
If Not FileExists($lruta) Then DirCreate($lruta)
$rutafichero = StringReplace($ruta, "\\\", "\")
WinWait($sDocBlanco, "")
If Not WinActive($sDocBlanco, "") Then WinActivate($sDocBlanco, "")
WinWaitActive($sDocBlanco, "")
Send($sTeclasExporta)
WinWait("Export", "")
If Not WinActive("Export", "") Then WinActivate("Export", "")
WinWaitActive("Export", "")
Send($rutafichero & ".pdf{ENTER}")
WinWait("PDF Options", "")
If Not WinActive("PDF Options", "") Then WinActivate("PDF Options", "")
WinWaitActive("PDF Options", "")
Send("{ENTER}")
If Not FileExists($lruta & "\indices") Then DirCreate($lruta & "\indices")
FileWrite(StringReplace($ruta, "\\\", "\indices\") & ".txt", $athebody)
EndFunc ;==>GuardarYsalir
Func Escanea()
WinWait($sDocBlanco, "")
If Not WinActive($sDocBlanco, "") Then WinActivate($sDocBlanco, "")
WinWaitActive($sDocBlanco, "")
Send($sTeclasEscanea)
WinWait($sWinTwain, "")
If Not WinActive($sWinTwain, "") Then WinActivate($sWinTwain, "")
WinWaitActive($sWinTwain, "")
If $iParate Then
CajadeMensaje("Cambiando Opciones", "Cambie en el panel," & @CRLF & " Acepte para Continuar")
WinWait("Pulse y cambie escaner", "", 6)
WinMove("Pulse y cambie escaner", "", 400, 5)
$iParate = 0
EndIf
MouseMove(91, 429)
MouseDown("left")
MouseUp("left")
WinWaitActive($sDocBlanco, "")
Send("{ESC}")
EndFunc ;==>Escanea
Func Salto()
Sleep(500)
Send($sInsertaSalto)
WinWait($sTextoSalto, "")
If Not WinActive($sTextoSalto, "") Then WinActivate($sTextoSalto, "")
WinWaitActive($sTextoSalto, "")
Send("{ENTER}")
EndFunc ;==>Salto
Func CajadeMensaje($Titulo, $Texto) ;Author: Basicos de www.autoit.es
; == GUI generated with Koda ==
$formForm1 = GUICreate($Titulo, 240, 60, 200, 10)
GUICtrlCreateLabel($Texto, 1, 3, 220, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Verdana")
$Button1 = GUICtrlCreateButton("&Aceptar", 64, 35, 97, 25, 0)
GUICtrlSetFont(-1, 12, 400, 0, "Verdana")
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Button1
ExitLoop
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case Else
;;;;;;;
EndSelect
WEnd
GUIDelete()
Return ""
EndFunc ;==>CajadeMensaje
Func CajaEntrada($Titulo) ;Author: Basicos de www.autoit.es
; == GUI generated with Koda ==
$Form1 = GUICreate("Escaneo de documentación", 260, 93, 193, 115)
$Button1 = GUICtrlCreateButton("&Siguiente Pág.", 2, 48, 130, 41, 0)
GUICtrlSetFont(-1, 12, 400, 0, "Verdana")
$Button2 = GUICtrlCreateButton("&Guardar Salir", 136, 48, 120, 41, 0)
GUICtrlSetFont(-1, 12, 400, 0, "Verdana")
$Label1 = GUICtrlCreateLabel("Elija seguir con más páginas o bien Guardar", 16, 8, 223, 38)
GUICtrlSetFont(-1, 12, 400, 0, "Verdana")
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $Button1
ExitLoop
Case $msg = $Button2
ExitLoop
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case Else
;;;;;;;
EndSelect
WEnd
$sReturn = GUICtrlRead($msg)
GUIDelete()
Return $sReturn
EndFunc ;==>CajaEntrada
;==================
Func Formulario()
$sForm = "Escaneos"
;$aLabels = _ArrayCreate(10, "Numero Fichero", "Fecha", "Notario", "Sección", "Observaci.")
$aLabels = _ArrayCreate(10,"Fichero", "Fecha", "Trabajador", "Documento","Observaci.")
$iLabels = arrayMaxLen($aLabels)
$aTexts = _ArrayCreate(50, "", "", "", "", "")
$iTexts = arrayMaxLen($aTexts)
$iLeft = 24
$iTop = 5
$aTxtControl = _ArrayCreate(0)
$sGuiWith = $ileft+ ($iLabels + 15 + $iTexts) * 6
; == GUI generated with Koda ==; 5 + (35*5)
$Form1 = GUICreate($sForm, $sGuiWith, $itop+ ((UBound($aLabels) - 1) * (21 + 21 + 21) + 15), 50, 125)
For $i = 1 To UBound($aLabels) - 1
GUICtrlCreateLabel($aLabels[$i], $iLeft, $iTop, $iLabels * 6, 21)
_ArrayAdd($aTxtControl, GUICtrlCreateInput("", $iLeft + $iLabels * 6 + 5, $iTop, $iTexts * 6, 21))
$iTop = $iTop + 35
Next
$cmdFichero = 134
; $cmdFichero = GUICtrlCreateButton("Ele&gir Ficheros", ($ileft)*5/4, $iTop, 100, 25, 0)
$cmdLimpiar = GUICtrlCreateButton("&Limpiar", (($iLeft) * 5 / 4) + 120, $iTop, 100, 33, 0)
$cmdEnviar = GUICtrlCreateButton("&Enviar", ($iLeft) * 5 / 4 + 240, $iTop, 100, 33, 0)
$lblFicheros = GUICtrlCreateLabel("", 0, $iTop + 37, $sGuiWith, 42)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $cmdLimpiar
For $i = 2 To UBound($aLabels) - 1
GUICtrlSetData($aTxtControl[$i], "")
Next
$sFichero = ""
GUICtrlSetData($lblFicheros, "")
Case $msg = $cmdEnviar
$TodoElString = ""
For $i = 1 To UBound($aLabels) - 1
$TodoElString &= GUICtrlRead($aTxtControl[$i]) & ";;"
Next
;MsgBox(0,"T",$TodoElString)
$athebody = StringLeft($TodoElString, StringLen($TodoElString) - 2)
;msgbox(0,"",$sDirDatos&GUICtrlRead($aTxtControl[3])&"\\\"&GUICtrlRead($aTxtControl[1])&"_"&stringreplace(STRINGREPLACE(GUICtrlRead($aTxtControl[2]),"/",""),"-",""))
$DEVUELVE = $sDirDatos & GUICtrlRead($aTxtControl[3]) & "\\\" & GUICtrlRead($aTxtControl[1]) & "_" & StringReplace(StringReplace(GUICtrlRead($aTxtControl[2]), "/", ""), "-", "")
GUIDelete()
Return $DEVUELVE
GUICtrlSetData($cmdEnviar, "Enviando.Espere")
;;;;;;;;;;; CONFIGURAR AQUI EL EMAIL
;$rc = _INetSmtpMailCom("smtp.gmail.com", "El usuario "&$aTexts[1], "[email protected]", "[email protected]", "Info "&$aTexts[2], $athebody, $sfichero, "", "", "[email protected]", "MiContrasena", 465, 1)
GUICtrlSetData($cmdEnviar, "Enviar")
For $i = 2 To UBound($aLabels) - 1
GUICtrlSetData($aTxtControl[$i], "")
Next
GUICtrlSetData($lblFicheros, StringReplace($sFichero, ";", @CRLF) & @CRLF & "Se ha enviado, pulse Limpiar")
$sFichero = ""
Case $msg = $cmdFichero
$tFichero = FileOpenDialog("Elija el Fichero pdf", @ScriptDir & "\", "Pdfs (*.pdf;*.xls)", 1 + 4)
$sFichero = arreglaRutasSmtp($tFichero & _Iif($sFichero, ";" & $sFichero, ""))
GUICtrlSetData($lblFicheros, StringReplace($sFichero, ";", @CRLF))
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case Else
;;;;;;;
EndSelect
WEnd
Exit
EndFunc ;==>Formulario
;mandar correo con los parametors de
Func arrayMaxLen(ByRef $amyArray)
$iArrayMaxLen = $amyArray[0]
For $i = 1 To UBound($aLabels) - 1
If StringLen($amyArray[$i]) > $iArrayMaxLen Then $iArrayMaxLen = StringLen($amyArray[$i])
Next
Return $iArrayMaxLen
EndFunc ;==>arrayMaxLen
Func arreglaRutasSmtp($fichero)
If StringInStr($fichero, "|") > 0 Then
$sFicheroDir = StringReplace(StringLeft($sFichero, StringInStr($sFichero, "|") - 1) & "\", "\\", "\\")
$losFicheros = StringMid($sFichero, StringInStr($sFichero, "|") - 1)
$fichero = StringReplace($losFicheros, "|", ";" & $sFicheroDir)
EndIf
If StringLeft($fichero, 1) = ";" Then $fichero = StringMid($fichero, 2)
Return $fichero
EndFunc ;==>arreglaRutasSmtp
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment ($S_Files2Attach[$x])
Else
$i_Error_desciption = $i_Error_desciption & @LF & 'No se encontró el fichero a añadir: ' & $S_Files2Attach[$x]
SetError(1)
Return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $ssl Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Sent the Message
$objEmail.Send
If @error Then
SetError(2)
Return "Error"
EndIf
EndFunc ;==>_INetSmtpMailCom
http://www.emesn.com:8888/mas/ooscan.exe
Imagen: