Версия AutoIt: 3.3.10.2
Описание: Помогите написать программу, которая будет работать со сканерами через TWAIN. Сканировать изображение и сохранять его в папку.
С возможностью:
1) Выбора настроек качества (150dpi 200dpi 300dpi 400dpi).
2) Выбора каталога сохранения изображений.
3) Выбора сканера, если их несколько и сохранением последнего выбранного (по умолчанию)
4) Выбора формата файла (PDF (многостраничный), JPEG)
5) Выбор цвета картинки (черно-белое, цветное)
Желательно, чтобы все настройки сохранялись в ini файл
Такой код имеется на данный момент:
Не знаю как сделать сканирование в JPEG и как избавиться от водяного знака внутри pdf файла после сканирования.
Примечания: Для работы необходимо установить http://ciansoft.com/twaincontrolx/default.asp
Описание: Помогите написать программу, которая будет работать со сканерами через TWAIN. Сканировать изображение и сохранять его в папку.
С возможностью:
1) Выбора настроек качества (150dpi 200dpi 300dpi 400dpi).
2) Выбора каталога сохранения изображений.
3) Выбора сканера, если их несколько и сохранением последнего выбранного (по умолчанию)
4) Выбора формата файла (PDF (многостраничный), JPEG)
5) Выбор цвета картинки (черно-белое, цветное)
Желательно, чтобы все настройки сохранялись в ini файл
Такой код имеется на данный момент:
Не знаю как сделать сканирование в JPEG и как избавиться от водяного знака внутри pdf файла после сканирования.
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
;~ #include <StaticConstants.au3>
;~ #include <WindowsConstants.au3>
;~ #Include <File.au3>
;~ #Include <String.au3>
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
opt("TrayIconHide", 1)
; переменные
$sVer="версия 14.03.12"
$iniFile="ScanPFR.ini"
$Exist=FileExists (@ScriptDir & "\" & $iniFile)
Global $Radio_CHECKED = IniRead($iniFile, "Main", "FileFormat", 1)
Global $Radio_Resolution = IniRead($iniFile, "Main", "Resolution", 200)
;~ MsgBox(262208,"Сообщение...", $Radio_Resolution)
$aYY=150
; Создать окно диалога для добавления управляющих элементов ...
$GUI=GUICreate("ScanPFR", 410, 83 + $aYY, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_GROUP, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))
GUICtrlCreateGroup("", 10, 13 + $aYY, 390, 60)
$Config = GUICtrlCreateButton("НАСТРОЙКИ", 25, 33 + $aYY, 100, 25)
$Exit = GUICtrlCreateButton("ВЫХОД", 285, 33 + $aYY, 100, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
GUICtrlCreateLabel("Сохранять в:", 10, 19, 70, 17)
$Save_As = GUICtrlCreateInput("C:\ScanPFR", 80, 16, 250, 21)
$Obzor = GUICtrlCreateButton("Выбрать", 335, 14, 65, 25)
GUICtrlCreateLabel("Имя файла:", 10, 49, 70, 17)
$Name_File = GUICtrlCreateInput("FileScan", 80, 46, 250, 21)
If $Radio_CHECKED = 1 Then
$FormatScan = GUICtrlCreateLabel("PDF", 355, 49, 65, 21)
Else
$FormatScan = GUICtrlCreateLabel("JPEG", 355, 49, 65, 21)
EndIf
$Scaner = GUICtrlCreateButton("СКАНИРОВАТЬ", 10, 80, 390, 80)
While 1
$msg = GUIGetMsg()
Select
Case $msg = -3 Or $msg = -1 Or $msg = $Exit Or $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Config
_Settings_Dlg($GUI)
Case $msg = $Obzor
$Path_Obzor = FileSelectFolder("Выберете папку", "",3, "D:\9ПТККС\КС\")
If @error Then
ContinueLoop
EndIf
GUICtrlSetData($Save_As, $Path_Obzor)
Case $msg = $Scaner
$Save_As1 = GUICtrlRead($Save_As)
$Name_File1 = GUICtrlRead($Name_File)
If FileExists($Save_As1) = 0 Then DirCreate( $Save_As1 )
_TWAIN_Start($Save_As1, $Name_File1)
EndSelect
WEnd
;~ Дочернее окно настроек
Func _Settings_Dlg($hParent = 0)
Local $hSettings, $iGOEM_Opt
;Предотвращение проблем в случае если главный GUI использует режим событий
$iGOEM_Opt = Opt("GUIOnEventMode", 0)
$hSettings_GUI = GUICreate("Настройки", 360, 180, -1, -1, -1, -1, $hParent)
;~ $SaveBtn = GUICtrlCreateButton ("Сохранить", 50, 395, 170, 25) ; кн "Сохранить"
;~ $ExitSattingsBtn = GUICtrlCreateButton ("Выход", 230+10, 395, 170, 20+5) ; кн "Выход"
GUICtrlCreateGroup("Формат файла:", 10, 5, 160, 50)
If $Radio_CHECKED = 1 Then
$PDF_Radio = GUICtrlCreateRadio("PDF", 35, 27, 50, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$JPEG_Radio = GUICtrlCreateRadio("JPEG", 95, 27, 50, 17)
Else
$PDF_Radio = GUICtrlCreateRadio("PDF", 35, 27, 50, 17)
$JPEG_Radio = GUICtrlCreateRadio("JPEG", 95, 27, 50, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
EndIf
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("Качество:", 10, 60, 160, 75)
If $Radio_Resolution = 150 Then
$150_Radio = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$200_Radio = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
$300_Radio = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
$400_Radio = GUICtrlCreateRadio("400 dpi", 95, 110, 55, 17)
Else
If $Radio_Resolution = 200 Then
$150_Radio = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
$200_Radio = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$300_Radio = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
$400_Radio = GUICtrlCreateRadio("400 dpi", 95, 110, 55, 17)
Else
If $Radio_Resolution = 300 Then
$150_Radio = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
$200_Radio = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
$300_Radio = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$400_Radio = GUICtrlCreateRadio("400 dpi", 95, 110, 55, 17)
Else
If $Radio_Resolution = 400 Then
$150_Radio = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
$200_Radio = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
$300_Radio = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
$400_Radio = GUICtrlCreateRadio("400 dpi", 95, 110, 55, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
Else
;~ MsgBox(262208,"Сообщение...", "Значения качества не равно (150, 200, 300, 400). См файл ScanPFR.ini Секция Resolution = ...")
$150_Radio = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
$200_Radio = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
$300_Radio = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
$400_Radio = GUICtrlCreateRadio("400 dpi", 95, 110, 55, 17)
EndIf
EndIf
EndIf
EndIf
GUICtrlCreateGroup("Цвет картинки:", 190, 60, 160, 75)
GUICtrlCreateButton ("Выбрать сканер", 190, 5, 160, 50)
$SaveBtn = GUICtrlCreateButton ("Сохранить", 10, 142, 340, 30)
GUISetState(@SW_DISABLE, $hParent)
GUISetState(@SW_SHOW, $hSettings_GUI)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $SaveBtn
$Radio_CHECKED = Number(GUICtrlRead($PDF_Radio) = $GUI_CHECKED)
If $Radio_CHECKED = 1 Then
IniWrite($iniFile, "Main", "FileFormat", 1)
;~ MsgBox(262208,"Сообщение...", $Radio_CHECKED)
GUICtrlSetData ($FormatScan, "PDF")
Else
IniWrite($iniFile, "Main", "FileFormat", 2)
GUICtrlSetData ($FormatScan, "JPEG")
EndIf
IniWrite($iniFile, "Main", "Resolution", 200)
ExitLoop
;~ $sRedactorPrg = GUICtrlRead($nRedactorPrg_Input)
;~ $Color_Shema1 = Number(GUICtrlRead($Color_Shema_Radio1) = $GUI_CHECKED)
;~ $Checkcfg = GUICtrlRead($sCheckcfg_Input)
;~ $CriptPass = GUICtrlRead($sPassword_Input)
;~ MsgBox(0,"11111111",$CriptPass)
;~ $sPasswordKey = _StringEncrypt(1, $CriptPass, $sKeyPass, 1)
;~ IniWrite($sConfig_File, "Main", "RedactorPrg", $sRedactorPrg)
;~ IniWrite($sConfig_File, "Main", "Checkcfg", $Checkcfg)
;~ IniWrite($sConfig_File, "Main", "Password", $sPasswordKey)
;~ If $Color_Shema1 = 1 Then
;~ IniWrite($sConfig_File, "Main", "Color_Shema", 1)
;~ Else
;~ IniWrite($sConfig_File, "Main", "Color_Shema", 2)
;~ EndIf
;~ MsgBox(262208,"Сообщение...","Настройки сохранены" & @CRLF & "Перезапустите программу!!!")
;~ ExitLoop
EndSwitch
WEnd
Opt("GUIOnEventMode", $iGOEM_Opt)
GUISetState(@SW_DISABLE, $hParent)
GUISetState(@SW_ENABLE, $hParent)
GUIDelete($hSettings_GUI)
EndFunc
; Сканирование OnAcquire ( )
Func _TWAIN_Start($Save_As1, $Name_File1)
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc_MySQL")
Dim $sScanPDF = $Save_As1 & "\" & $Name_File1 & ".pdf"
$oTWAIN = ObjCreate("TwainControlXTrial.Twain")
If Not IsObj($oTWAIN) Then _DebugPrint("Not IsObj($oTWAIN)")
Global $oTWAINEvent = ObjEvent($oTWAIN, "_TWAIN_", "ITwainEvents")
Global $x, $p
;~ $iSelectDevice = $oTWAIN.SelectDevice
;~ _DebugPrint("$iSelectDevice = " & $iSelectDevice & " | " & $iSelectDevice)
;~ $oTWAIN.CurrentDevice = $iSelectDevice
$oTWAIN.CurrentDevice = $oTWAIN.DefaultDevice
$iCurrentDevice = $oTWAIN.CurrentDevice
$sDeviceName = $oTWAIN.DeviceName($iCurrentDevice)
;~ _DebugPrint("$iCurrentDevice = " & $iCurrentDevice & " | " & $sDeviceName)
$oTWAIN.PixelType = 2
$oTWAIN.Resolution = $Radio_Resolution
$oTWAIN.UseInterface = False
$oTWAIN.ShowProgress = True
$oTWAIN.MultiImage = True
; $oTWAIN.KeepImages = True
$x = 1
$p = 1
While $x = 1
;~ For $p = 1 To 1
;~ $oTWAIN.Resolution (150)
;~ $oTWAIN.PixelType (2)
;~ $oTWAIN.Threshold (128)
;~ $oTWAIN.Contrast (0)
;~ $oTWAIN.Brightness (0)
;~ $oTWAIN.Units (0)
$oTWAIN.Acquire ()
;~ _DebugPrint("Units = " & $oTWAIN.Units)
;~ _DebugPrint("Contrast = " & $oTWAIN.Contrast)
;~ _DebugPrint("Threshold = " & $oTWAIN.Threshold)
;~ _DebugPrint("PixelType = " & $oTWAIN.PixelType)
;~ _DebugPrint("Resolution = " & $oTWAIN.Resolution)
;~ _DebugPrint("Brightness = " & $oTWAIN.Brightness)
$oTWAIN.AddToPDF($p)
_SMsg()
;~ Sleep(3000)
;~ Next
WEnd
;~ MsgBox(262208,"Сообщение...", $oTWAIN.PixelType)
$oTWAIN.WritePDF($sScanPDF)
$oTWAIN.Clear
$oTWAIN.Unload
$oTWAIN.UnloadDevice
;~ Func _TWAIN_OnAcquire()
;~ EndFunc
;~ Func _TWAIN_OnFinish()
;~ EndFunc
;~ Func _DebugPrint($_sDebugMsg, $_iScriptLine = @ScriptLineNumber)
;~ ConsoleWrite(StringFormat("%0" & StringLen(@ScriptLineNumber + 1) & "d | %s", $_iScriptLine, $_sDebugMsg) & @CR)
;~ EndFunc ;==>_DebugPrint
EndFunc
; Многостарничный PDF
Func _SMsg()
$answer = msgBox(36, "Вопрос:", " Добавить еще одну страницу в PDF?" )
;32 Знак вопроса + 3 (Кнопка Yes, No и Cancel); 32 Знак вопроса + 1 Кнопка OK и Cancel
Switch $answer
Case 1 ;OK
;~ MsgBox(262208,"Сообщение...", "Нажата кнопка ОК")
;~ $p = $p + 1
;~ MsgBox(262208,"Сообщение...", $counter & " " & $p)
;~ $sms = GUICtrlRead ($myedit)
;~ StartNetSend($sPC, $sLV_Item_Text, $sms) ;
Case 2 ;Cancel
;~ $x = $x + 1
; _WinAPI_ShowMsg ("Выход...")
Case 6 ;YES
;~ MsgBox(262208,"Сообщение...", "Нажата кнопка ОК")
$p = $p + 1
;_WinAPI_ShowMsg ("Да...")
Case 7 ;NO
$x = $x + 1
;_WinAPI_ShowMsg ("Нет...")
EndSwitch
EndFunc
Примечания: Для работы необходимо установить http://ciansoft.com/twaincontrolx/default.asp