Что нового

Сканирование документов в PDF и JPEG

artpluss

Новичок
Сообщения
21
Репутация
0
Версия AutoIt: 3.3.6.1

Описание: Программа для работы со сканерами. Сканирование в PDF и JPEG форматы

Примечания: Для работы необходим twaincontrolx (платная программа)

Помогите пожалуйста перестроить работу программы так, чтобы не было необходимости использовать twaincontrolx
Когда написал эту программу я хотел купить лицензию на twaincontrolx, но сейчас мне это не по карману.
Еще был бы признателен, если поможете оптимизировать код.
И еще при выключенном сканере программа выдает ошибки, было бы правильнее если бы она сообщала о том, что сканер не найден.

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
#include <WindowsConstants.au3>

If WinExists(@ScriptName) Then Exit
	AutoItWinSetTitle(@ScriptName)

opt("TrayIconHide", 1)

; переменные

$sVer="версия 14.03.14"
$iniFile="ScanPFR.ini"
Global $Radio_CHECKED = IniRead($iniFile, "Main", "FileFormat", 1)
Global $Radio_Resolution = IniRead($iniFile, "Main", "Resolution", 200)
Global $Radio_Color = IniRead($iniFile, "Main", "Color", 2)
Global $iCheckedRadio_Number

$aYY=150
; Создать окно диалога для добавления управляющих элементов ...
$GUI=GUICreate("ScanPFR", 410, 83 + $aYY, -1, -1, _ 
BitOR($WS_MINIMIZEBOX, $WS_GROUP, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))


;~    $GUI=GUICreate( $sHeadMsg,  486-20, 430, -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)
GUICtrlSetFont(-1, 19, 800, 0, "Courier New")

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, "C:\")
				 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)
			   GUICtrlSetState($Scaner, $GUI_DISABLE)
			   GUICtrlSetData($Scaner, "ЖДИТЕ Я СКАНИРУЮ...")
			   If $Radio_CHECKED = 1 Then
				  _TWAIN_Start_PDF ($Save_As1, $Name_File1)
			   Else
				  _TWAIN_Start_JPEG ($Save_As1, $Name_File1)
				  EndIf
			   GUICtrlSetState($Scaner, $GUI_ENABLE)
			   GUICtrlSetData($Scaner, "СКАНИРОВАТЬ")
	  EndSelect
  WEnd



;~ Дочернее окно настроек
Func _Settings_Dlg($hParent = 0)
	Local $hSettings, $iGOEM_Opt
;~ MsgBox(262208,"Сообщение...", $Radio_Color)
    ;Предотвращение проблем в случае если главный GUI использует режим событий
    $iGOEM_Opt = Opt("GUIOnEventMode", 0)
    $hSettings_GUI = GUICreate("Настройки", 360, 180, -1, -1, -1, -1, $hParent)

	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
    $Radio1 = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
	$Radio2 = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
	$Radio3 = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
	$Radio4 = GUICtrlCreateRadio("600 dpi", 95, 110, 55, 17)
	  Else
		If $Radio_Resolution = 200 Then
    $Radio1 = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
	$Radio2 = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
	    GUICtrlSetState(-1, $GUI_CHECKED)
	$Radio3 = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
	$Radio4 = GUICtrlCreateRadio("600 dpi", 95, 110, 55, 17)
	  Else
		If $Radio_Resolution = 300 Then
    $Radio1 = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
	$Radio2 = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
	$Radio3 = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
		GUICtrlSetState(-1, $GUI_CHECKED)
	$Radio4 = GUICtrlCreateRadio("600 dpi", 95, 110, 55, 17)
	  Else
		If $Radio_Resolution = 600 Then
    $Radio1 = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
	$Radio2 = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
	$Radio3 = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
	$Radio4 = GUICtrlCreateRadio("600 dpi", 95, 110, 55, 17)
		 GUICtrlSetState(-1, $GUI_CHECKED)
	  Else
    $Radio1 = GUICtrlCreateRadio("150 dpi", 35, 80, 55, 17)
	$Radio2 = GUICtrlCreateRadio("200 dpi", 95, 80, 55, 17)
	$Radio3 = GUICtrlCreateRadio("300 dpi", 35, 110, 55, 17)
	$Radio4 = GUICtrlCreateRadio("600 dpi", 95, 110, 55, 17)
	  EndIf
   EndIf
EndIf
EndIf


	GUICtrlCreateGroup("Картинка:", 190, 60, 160, 75)
	If $Radio_Color = 1 Then
	  $ColorOn = GUICtrlCreateRadio("Цветная", 210, 80, 90, 17)
	  $ColorOff = GUICtrlCreateRadio("Черно-белая", 210, 110, 90, 17)
	  GUICtrlSetState(-1, $GUI_CHECKED)
    Else
	  $ColorOn = GUICtrlCreateRadio("Цветная", 210, 80, 90, 17)
	  GUICtrlSetState(-1, $GUI_CHECKED)
	  $ColorOff = GUICtrlCreateRadio("Черно-белая", 210, 110, 90, 17)
    EndIf


	$DeviceBtn = 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 $radio1 To $radio4
                   $iCheckedRadio_Number=($nMsg+1)-$radio1; фиксируем номер активного Radio
			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

				   $Radio_Resolution = $iCheckedRadio_Number
				   If $Radio_Resolution = 1 Then
					  IniWrite($iniFile, "Main", "Resolution", "150")
					  $Radio_Resolution = 150
				   Else
					  If $Radio_Resolution = 2 Then
						 IniWrite($iniFile, "Main", "Resolution", "200")
						 $Radio_Resolution = 200
					  Else
						 If $Radio_Resolution = 3 Then
							IniWrite($iniFile, "Main", "Resolution", "300")
							$Radio_Resolution = 300
						 Else
							If $Radio_Resolution = 4 Then
							  IniWrite($iniFile, "Main", "Resolution", "600")
							  $Radio_Resolution = 600
						    Else
							  IniWrite($iniFile, "Main", "Resolution", "200")
							  $Radio_Resolution = 200
						 EndIf
					  EndIf
				   EndIf
				   EndIf

				$Radio_Color = Number(GUICtrlRead($ColorOn) = $GUI_CHECKED)
				If $Radio_Color = 1 Then
				   IniWrite($iniFile, "Main", "Color", 2)
				   $Radio_Color = 2
				Else
				   IniWrite($iniFile, "Main", "Color", 1)
				   $Radio_Color = 1
			    EndIf
			    ExitLoop

			Case $DeviceBtn
			   $oTWAIN = ObjCreate("TwainControlXTrial.Twain")
			   If Not IsObj($oTWAIN) Then MsgBox(262208,"Сообщение...", "Отсутствует ($oTWAIN)")
			   $iSelectDevice = $oTWAIN.SelectDevice
        EndSwitch
    WEnd

    Opt("GUIOnEventMode", $iGOEM_Opt)
	GUISetState(@SW_DISABLE, $hParent)
    GUISetState(@SW_ENABLE, $hParent)
    GUIDelete($hSettings_GUI)
 EndFunc
 

Geqsogen

Новичок
Сообщения
24
Репутация
1
Доброго дня.
Неделю назад задался тем же вопросом. Изучал долго и нудно. Пришел к выводу - с TWAIN у autoit очень все грустно.
Мой совет:
1 - использовать готовое решение (его автоматизировать уже проще)
NAPS2 бесплатно.
2 - использовать для написания сторонние программы, но они все же кривоваты. Я пытался все вместе связать:
Работа с TWAIN через командную строку + UDF создание PDF
(через командную строку сканирует, но выдает ошибку после использования дополнительного лотка и не передает параметры сканирования драйверу Kyocera)

Я остановился сегодня на первом варианте. Жаль что сам не написал, но главное результат, а не самописный скрипт.
 
Верх