OOffice Digitaliza y ordena Papel a Pdf,en red local/intrnet

Autoit Avanzado más complejo con funciones "geek" para cualificarse como "ESPECIALISTA EN AUTOIT". Originales de autor, no copiados. Mín. 100 lineas
Responder
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2083
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

OOffice Digitaliza y ordena Papel a Pdf,en red local/intrnet

Mensaje por BasicOs »

OOscan es un programa para archivo digital de documentos, proporciona una manerar rápida y efectiva de digitalizar cualquier documentación de su empresa o personal. El programa permite digitalizar y almacenar los documentos en formato PDF :smt006 , desde un escáner. OOscan almacena y permite crea un indice en documentos de texto anexos para una localización posterior desde el explorador. Archivos que contengan tal palabra.
:smt014 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. :smt018 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
Url de descarga:
http://www.emesn.com:8888/mas/ooscan.exe
Imagen:
Imagen
Última edición por BasicOs el 19 Mar 2007, 15:51, editado 1 vez en total.
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2083
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Mensaje por BasicOs »

;Reservo esta respuesta para anotaciones
Responder