Hallo community !!
Ich habe relativ häufig Projekte in denen ich ein PDF in einer GUI anzeigen will.
Bisher habe ich das immer über das Acrobar Reader Object realisiert.
Funktioniert auch recht gut, leider stürzt mir der aus ungeklärter Ursache hin und wieder ab.
( bei Laufzeiten über 6 Stunden )
Auch das zusätzliche installieren des Readers ist finde ich etwas nervig.
Deshalb habe ich mir jetzt mal die Mühe gemacht ein UDF zu schreiben, mit dem man PDF Files in eine GUI einbinden kann, OHNE den Acrobat Reader zu verwenden.
Die läuft über das Open Source Project Sumatra -> http://blog.kowalczyk.info/software/sumat…-reader-de.html
Im Anhang findet ihr eine ZIP mit allen benötigten Dateien.
Der Sumatra Reader wird bei mir als Portable Version verwendet. d.h. es ist keine gesonderte Installation notwendig.
Aus Zeitgründen habe ich nur die Funktionen implementiert, welche ich persönlich auch brauche,
Wenn jetzt hier aber jemand noch eine Funktion zwingend braucht, werde ich diese natürlich noch einbauen. ( möglichst zeitnah )
mit dabei habe ich auch ein ganz ganz kleines Sample ..
würde mich über Feedback freuen.
BYE Vi
-> _sumatraPDF_udf-Release 2013.03.04 V1
Da der Upload auf maximal 1,5 MB beschränkt ist sind es leider 4 Teile
wer das nicht runter laden möchte, hier die Source
Spoiler anzeigen
#include-Once
Global Static $_sumatraPDF_UDF_Version = 1
Global Static $_sumatraPDF_UDF_ReleaseDatum = "2013.03.03"
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Author: Marc Neininger
Script Function:
UDF um das Open Source Project Sumatra als Portable Version in eine Eigene Gui einzubinden.
( somit wird Autoit um die PDF Anzeige erweitert )
Quelle Sumatra -> http://blog.kowalczyk.info/software/sumat…-viewer-de.html
[/autoit] [autoit][/autoit] [autoit]#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit];-Funktionen --------------------------------------------------------------------------------------------------------------------
;Settings
; _SumatraPDF_UDF_clear()
; _SumatraPDF_UDF_generateObject()
; _SumatraPDF_UDF_run(ByRef $ThisStructHandle,$ViewMode, $PDFFilePath = "0")
; _SumatraPDF_UDF_loadFile(ByRef $ThisStructHandle, $PDFFilePath)
; _SumatraPDF_UDF_inset($ThisGUI, ByRef $ThisStructHandle, $Mode = 0, $x_Start = 0, $y_Start = 0, $width = 0, $height = 0)
; _SumatraPDF_UDF_visibility(ByRef $ThisStructHandle, $visibility = 0)
; _SumatraPDF_UDF_resize(ByRef $ThisStructHandle, $x_Start = 0, $y_Start = 0, $width = 0, $height = 0)
; _SumatraPDF_UDF_loadFile(ByRef $ThisStructHandle, $PDFFilePath)
; _SumatraPDF_UDF_PageUp(ByRef $ThisStructHandle)
; _SumatraPDF_UDF_PageDown(ByRef $ThisStructHandle)
; _SumatraPDF_UDF_Print(ByRef $ThisStructHandle)
; _SumatraPDF_UDF_Close(ByRef $ThisStructHandle)
; _SumatraPDF_UDF_ShowObjectData($thisStruct, $Promt = "0")
; =====================================================
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GuiMenu.au3>
FileInstall(".\SumatraPDF.exe", ".\SumatraPDF.exe")
FileInstall(".\_sumatraPDF_UDF.au3", ".\_sumatraPDF_UDF.au3")
FileInstall(".\_sumatraPDF_UDF.pdf", ".\_sumatraPDF_UDF.pdf")
#cs
;###################### simple sample ###################################################################
#include <_sumatraPDF_UDF.au3>
HotKeySet("{ESC}", "Terminate")
[/autoit] [autoit][/autoit] [autoit]Opt("GUIOnEventMode", 1) ; Change to OnEvent mode , damit gui protokoll anderst abgearbeitet wird ( mit funktionen , nicht case )
[/autoit] [autoit][/autoit] [autoit]Global $dpfFullPath = "c:\1.pdf"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_SumatraPDF_UDF_clear()
Global $SUMObject1 = _SumatraPDF_UDF_generateObject()
_SumatraPDF_UDF_run($SUMObject1,$__SV_VM_facing)
;_SumatraPDF_UDF_run($SUMObject2,$__SV_VM_facing, $dpfFullPath)
Global $hGUI = GUICreate("Pdf Test", 1000, 1000, -1, -1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_CLIPCHILDREN, $WS_SIZEBOX))
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; wenn event $GUI_EVENT_CLOSE aktiviert wird, wird funktion "CLOSEClicked" aufgerufen
_SumatraPDF_UDF_inset($hGUI, $SUMObject1, $__SV_MenueHide, 100, 0, 150, 150,$GUI_HIDE)
;_SumatraPDF_UDF_inset($hGUI, $SUMObject2, 1, 100, 500, 150, 150)
$alabel = GUICtrlCreateLabel("Line 1 Cell 1", 10, 30) ; first cell 70 width
$button_P = GUICtrlCreateButton("P", 10, 100)
$button_N = GUICtrlCreateButton("N", 10, 150)
GUICtrlSetOnEvent($button_P, "Button_P")
GUICtrlSetOnEvent($button_N, "Button_N")
GUISetState()
[/autoit] [autoit][/autoit] [autoit]Global $zaehler = 0
[/autoit] [autoit][/autoit] [autoit];_SumatraPDF_UDF_loadFile($SUMObject1, $dpfFullPath)
[/autoit] [autoit][/autoit] [autoit]_SumatraPDF_UDF_visibility($SUMObject1,$GUI_SHOW )
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg()
If $msg = -3 Then ExitLoop
$zaehler = $zaehler + 1
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($alabel, $zaehler)
[/autoit] [autoit][/autoit] [autoit]Sleep(10)
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]Func CLOSEClicked()
Terminate()
EndFunc ;==>CLOSEClicked
;-------------------------------------------------------------------------------------------------------------------------------
Func Button_P()
;_SumatraPDF_UDF_resize($SUMObject1,300,0,500,0)
;_SumatraPDF_UDF_Close($SUMObject1)
_SumatraPDF_UDF_PageUp($SUMObject1)
;_SumatraPDF_UDF_PageDown($SUMObject1)
;_SumatraPDF_UDF_loadFile($SUMObject1, $dpfFullPath)
;_SumatraPDF_UDF_visibility($SUMObject1,$GUI_SHOW )
;_SumatraPDF_UDF_ShowObjectData($SUMObject1)
;_SumatraPDF_UDF_ShowObjectData($SUMObject2)
EndFunc ;==>Button_P
;-------------------------------------------------------------------------------------------------------------------------------
Func Button_N()
;_SumatraPDF_UDF_PageUp($SUMObject1)
;_SumatraPDF_UDF_visibility($SUMObject1, $GUI_HIDE)
_SumatraPDF_UDF_PageDown($SUMObject1)
EndFunc ;==>Button_N
;-------------------------------------------------------------------------------------------------------------------------------
Func Terminate()
Exit 0
EndFunc ;==>Terminate
;-------------------------------------------------------------------------------------------------------------------------------
;###################### simple sample END ###################################################################
#ce
;-Strukturen für ObjectHandle
;------------------------------------------------------------------------------------------------------------------------------------
Global $__SV_State = "Status"
Global $__SV_Headline = "Headline"
Global $__SV_FullPath = "FullPath"
Global $__SV_X_POS = "XPOS"
Global $__SV_Y_POS = "YPOS"
Global $__SV_Width = "Width"
Global $__SV_Height = "Height"
Global $__SV_WHandle = "WHandle"
Global $__SV_ProcessID = "ProcessID"
Global $__SV_ParentHandle = "ParentGuiHandle"
Global $__SV_MenueState = "MenueState"
Global $__SV_ViewMode = "ViewMode"
Global $__sumatraPDF_UDF_StructString = "int " & $__SV_State & ";char " & $__SV_Headline & "[512];char " & $__SV_FullPath & "[512];" _
& "int " & $__SV_X_POS & ";int " & $__SV_Y_POS & ";int " & $__SV_Width & ";int " & $__SV_Height & ";" _
& "HWND " & $__SV_WHandle & ";HWND " & $__SV_ProcessID & ";HWND " & $__SV_ParentHandle & ";int " & $__SV_MenueState & ";" _
& "char " & $__SV_ViewMode & "[512]"
;------------------------------------------------------------------------------------------------------------------------------------
Global Static $__sumatraPDF_UDF_StartUpFile = @ScriptDir & "\_sumatraPDF_UDF.pdf"
Global Static $__sumatraPortablePath = @ScriptDir & "\SumatraPDF.exe"
Global Const $__SV_VM_facing = '-view "facing"'
Global Const $__SV_VM_single = '-view "single page"'
Global Const $__SV_VM_bookView = '-view "book view"'
Global Const $__SV_VM_contSingle = '-view "continuous single page"'
Global Const $__SV_VM_contFacing = '-view "continuous facing"'
Global Const $__SV_VM_contBook = '-view "continuous book view"'
Global Const $__SV_MenueShow = @SW_SHOW
Global Const $__SV_MenueHide = @SW_HIDE
;===============================================================================
; Description: löscht die sumatra setup Datei welche beim beenden abgespeichert wird.
; Parameter(s):
;
;===============================================================================
Func _SumatraPDF_UDF_clear()
FileDelete(@ScriptDir & '\sumatrapdfprefs.dat') ; Deletes the defualt setting file that is created when SumatraPDF.exe is closed
EndFunc ;==>_SumatraPDF_UDF_clear
;===============================================================================
; Description: gibt als rückgabewert die benötigte Struktur für das Sumatra Object zurück.
; Parameter(s):
;
; Return Value(s): ein neues Sumatra Object
;
;===============================================================================
Func _SumatraPDF_UDF_generateObject()
$Struct = DllStructCreate($__sumatraPDF_UDF_StructString)
If @error Then
MsgBox(0, "", "Error in DllStructCreate " & @error);
MsgBox(0, "the Struct String", $__sumatraPDF_UDF_StructString)
Exit
EndIf
DllStructSetData($Struct, $__SV_State, -9) ; ststus des Objectes auf 1 setzen
Return $Struct
EndFunc ;==>_SumatraPDF_UDF_generateObject
;===============================================================================
; Description: Startet sumatra im Hintergrund
; Parameter(s): ByRef $ThisStructHandle = das betroffenen Sumatra Object
; $PDFFilePath=0 = das File welches geöfnet werden soll.
; wenn kein Pfad angegeben wird, wird das Standart File geladen
;
; Return Value(s): keins ( das Object wird aktualisiert )
;
;===============================================================================
Func _SumatraPDF_UDF_run(ByRef $ThisStructHandle, $sPDFViewMode, $PDFFilePath = "0")
;MsgBox(0, "debug", $PDFFilePath)
If $PDFFilePath = "0" Then
$PDFFilePath = $__sumatraPDF_UDF_StartUpFile
EndIf
Local $szDrive, $szDir, $szFName, $szExt
Local $TestPath = _PathSplit($PDFFilePath, $szDrive, $szDir, $szFName, $szExt)
Local $HeadlineName = $TestPath[3] & $TestPath[4] ;"Test.pdf"
DllStructSetData($ThisStructHandle, $__SV_Headline, $HeadlineName)
DllStructSetData($ThisStructHandle, $__SV_FullPath, $PDFFilePath)
DllStructSetData($ThisStructHandle, $__SV_ViewMode, $sPDFViewMode)
;_SumatraPDF_UDF_ShowObjectData($ThisStructHandle)
[/autoit] [autoit][/autoit] [autoit]Local $sPDFFileToOpen = '-reuse-instance "' & $PDFFilePath & '"'
;Local $sPDFViewMode = '-view "facing"'
;$sPDFFile = "Test.pdf"
;$sPDFFileToOpen = ' -reuse-instance "' & FileGetShortName(@ScriptDir & '\' & $sPDFFile & '"')
;ShellExecute(@ProgramFilesDir & "\SumatraPDF.exe", $sPDFFileToOpen, @ScriptDir, "",@SW_HIDE)
;ShellExecute("c:\SumatraPDF.exe", $sPDFFileToOpen, @ScriptDir, "", @SW_HIDE)
$PID = Run($__sumatraPortablePath & " " & $sPDFViewMode & " " & $sPDFFileToOpen, "", @SW_HIDE)
DllStructSetData($ThisStructHandle, $__SV_ProcessID, $PID)
WinWait(DllStructGetData($ThisStructHandle, $__SV_Headline))
$hWnd = WinGetHandle(DllStructGetData($ThisStructHandle, $__SV_Headline))
DllStructSetData($ThisStructHandle, $__SV_WHandle, $hWnd)
DllStructSetData($ThisStructHandle, $__SV_State, 0) ; ststus des Objectes auf 0 setzen
EndFunc ;==>_SumatraPDF_UDF_run
;===============================================================================
; Description: fügt das sumatra handle ( die instance ) in die gui ein .. an gewünschter position
; Parameter(s): ByRef $hGUI = die gui in die das sumatra eingesetzt werden soll
; ByRef $ThisStructHandle = das betroffenen Sumatra Object
; $MainMenueStatus = soll Menue des sumatra angezeigt werden oder nciht.
; $x_Start=0 = die Position in der $hGUI von X ( Startpos )
; $y_Start=0 = die Position in der $hGUI von y ( Startpos )
; $width=0 = die breite | wenn 0 dann max breite von Gui | wenn kleiner 0 wird entsprechender wert von Max breite abgezogen
; $height=0 = die höhe | wenn 0 dann max höhe von Gui | wenn kleiner 0 wird entsprechender wert von Max höhe abgezogen
; $sumatravisibility = beim einfügen gleich anzeigen oder noch im Hintergrund lassen
;
; Return Value(s):
;===============================================================================
;--------------------------------------------------------------------------------------------------------------------
Func _SumatraPDF_UDF_inset($ThisGUI, ByRef $ThisStructHandle, $MainMenueStatus = 0, $x_Start = 0, $y_Start = 0, $width = 0, $height = 0, $sumatravisibility = 0)
$state = DllStructGetData($ThisStructHandle, $__SV_State) ; ststus des Objectes auf 1 setzen
If $state < 0 Then
Return
EndIf
If $MainMenueStatus = 0 Then
$MainMenueStatus = @SW_HIDE
Else
$MainMenueStatus = @SW_SHOW
EndIf
[/autoit] [autoit][/autoit] [autoit]; das eingesetzte sumatra sichbar oder unsichtbar starten
If $sumatravisibility = 0 Or $sumatravisibility = $GUI_HIDE Then
$sumatravisibility = $SWP_HIDEWINDOW
Else
$sumatravisibility = $SWP_SHOWWINDOW
EndIf
[/autoit] [autoit][/autoit] [autoit]$hMain = _GUICtrlMenu_GetMenu(DllStructGetData($ThisStructHandle, $__SV_WHandle))
$hView = _GUICtrlMenu_GetItemSubMenu($hMain, 1)
;WinMenuSelectItem($sPDFFile, "", "&View", "Continuous") ; sets view to continuos page
WinMenuSelectItem(DllStructGetData($ThisStructHandle, $__SV_Headline), "", "&View", "Continuous") ; sets view to continuos page
;_GUICtrlMenu_SetItemChecked($hView, 11,$MainMenueStatus)
If _GUICtrlMenu_GetItemChecked($hView, 11) Then WinMenuSelectItem(DllStructGetData($ThisStructHandle, $__SV_Headline), "", "&View", "Show toolbar") ; hides the toolbar
_GUICtrlMenu_SetMenu(DllStructGetData($ThisStructHandle, $__SV_WHandle), $MainMenueStatus) ; hides the menu
_WinAPI_SetWindowLong(DllStructGetData($ThisStructHandle, $__SV_WHandle), $GWL_STYLE, BitOR($WS_CLIPCHILDREN, $WS_CLIPSIBLINGS, $WS_VISIBLE)) ; removes borders from SumatraPDF.exe
$ThisHandle = DllStructGetData($ThisStructHandle, $__SV_WHandle)
_WinAPI_SetParent($ThisHandle, $ThisGUI) ; parent the SumatraPDF.exe window into an autoit window
$aWinSize = WinGetClientSize($ThisGUI)
[/autoit] [autoit][/autoit] [autoit]If $width = 0 Then
$width = $aWinSize[0]
ElseIf $width < 0 Then
$width = $aWinSize[0] + $width
EndIf
[/autoit] [autoit][/autoit] [autoit]If $height = 0 Then
$height = $aWinSize[1]
ElseIf $height < 0 Then
$height = $aWinSize[1] + $height
EndIf
[/autoit] [autoit][/autoit] [autoit]_WinAPI_SetWindowPos($ThisHandle, $HWND_TOP, $x_Start, $y_Start, $width, $height, $sumatravisibility) ; size SumatraPDF.exe window to fit inside the autoit window
[/autoit] [autoit][/autoit] [autoit]; werte in ObjectStruktur speichern
[/autoit] [autoit][/autoit] [autoit]DllStructSetData($ThisStructHandle, $__SV_X_POS, $x_Start)
DllStructSetData($ThisStructHandle, $__SV_Y_POS, $y_Start)
DllStructSetData($ThisStructHandle, $__SV_Width, $width)
DllStructSetData($ThisStructHandle, $__SV_Height, $height)
DllStructSetData($ThisStructHandle, $__SV_ParentHandle, $ThisGUI) ; ststus des Objectes auf 1 setzen
DllStructSetData($ThisStructHandle, $__SV_MenueState, $MainMenueStatus) ; Menue Status speichern
DllStructSetData($ThisStructHandle, $__SV_State, 1) ; ststus des Objectes auf 1 setzen
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_SumatraPDF_UDF_inset
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];===============================================================================
; Description: fügt das sumatra handle ( die instance ) in die gui ein .. an gewünschter position
; Parameter(s): ByRef $hGUI = die gui in die das sumatra eingesetzt werden soll
; ByRef $ThisStructHandle = das betroffenen Sumatra Object
; $x_Start=0 = die Position in der $hGUI von X ( Startpos )
; $y_Start=0 = die Position in der $hGUI von y ( Startpos )
; $width=0 = die breite | wenn 0 dann max breite von Gui | wenn kleiner 0 wird entsprechender wert von Max breite abgezogen
; $height=0 = die höhe | wenn 0 dann max höhe von Gui | wenn kleiner 0 wird entsprechender wert von Max höhe abgezogen
;
; Return Value(s):
;===============================================================================
;--------------------------------------------------------------------------------------------------------------------
Func _SumatraPDF_UDF_visibility(ByRef $ThisStructHandle, $visibility = 0)
$state = DllStructGetData($ThisStructHandle, $__SV_State) ; ststus des Objectes auf 1 setzen
If $state < 0 Then
Return
EndIf
If $visibility = 0 Or $visibility = $GUI_HIDE Then
$sumatravisibility = $SWP_HIDEWINDOW
ElseIf $visibility = 1 Or $visibility = $GUI_SHOW Then
$sumatravisibility = $SWP_SHOWWINDOW
Else
$sumatravisibility = $visibility
EndIf
$ThisHandle = DllStructGetData($ThisStructHandle, $__SV_WHandle)
$x_Start = DllStructGetData($ThisStructHandle, $__SV_X_POS)
$y_Start = DllStructGetData($ThisStructHandle, $__SV_Y_POS)
$width = DllStructGetData($ThisStructHandle, $__SV_Width)
$height = DllStructGetData($ThisStructHandle, $__SV_Height)
_WinAPI_SetWindowPos($ThisHandle, $HWND_TOP, $x_Start, $y_Start, $width, $height, $sumatravisibility) ; size SumatraPDF.exe window to fit inside the autoit window
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_SumatraPDF_UDF_visibility
[/autoit] [autoit][/autoit] [autoit];===============================================================================
; Description: verändert die Größe und position des handels
; Parameter(s):
; ByRef $ThisStructHandle = das betroffenen SumatraObject
; $x_Start=0 = die Position in der $hGUI von X ( Startpos )
; $y_Start=0 = die Position in der $hGUI von y ( Startpos )
; $width=0 = die breite | wenn 0 dann max breite von Gui | wenn kleiner 0 wird entsprechender wert von Max breite abgezogen
; $height=0 = die höhe | wenn 0 dann max höhe von Gui | wenn kleiner 0 wird entsprechender wert von Max höhe abgezogen
;
; Return Value(s):
;===============================================================================
;--------------------------------------------------------------------------------------------------------------------
Func _SumatraPDF_UDF_resize(ByRef $ThisStructHandle, $x_Start = 0, $y_Start = 0, $width = 0, $height = 0)
$ThisHandle = DllStructGetData($ThisStructHandle, $__SV_WHandle)
[/autoit] [autoit][/autoit] [autoit]#cs
GUIRegisterMsg($WM_SIZE, "resize")
Func resize($h, $m, $w, $p)
If $h = $hGUI Then
$aWinSize = WinGetClientSize($hGUI)
WinMove($hWnd1, "", 0, 0, $aWinSize[0], $aWinSize[1])
EndIf
EndFunc ;==>resize
#ce
;$aWinSize = WinGetClientSize($ThisGUI)
[/autoit] [autoit][/autoit] [autoit]If $x_Start = 0 Then
$x_Start = DllStructGetData($ThisStructHandle, $__SV_X_POS)
ElseIf $x_Start < 0 Then
$x_Start = DllStructGetData($ThisStructHandle, $__SV_X_POS) + $x_Start
EndIf
If $y_Start = 0 Then
$y_Start = DllStructGetData($ThisStructHandle, $__SV_Y_POS)
ElseIf $y_Start < 0 Then
$y_Start = DllStructGetData($ThisStructHandle, $__SV_Y_POS) + $y_Start
EndIf
If $width = 0 Then
$width = DllStructGetData($ThisStructHandle, $__SV_Width)
ElseIf $width < 0 Then
$width = DllStructGetData($ThisStructHandle, $__SV_Width) + $width
EndIf
If $height = 0 Then
$height = DllStructGetData($ThisStructHandle, $__SV_Height)
ElseIf $height < 0 Then
$height = DllStructGetData($ThisStructHandle, $__SV_Height) + $height
EndIf
WinMove($ThisHandle, "", $x_Start, $y_Start, $width, $height)
[/autoit] [autoit][/autoit] [autoit]DllStructSetData($ThisStructHandle, $__SV_X_POS, $x_Start)
DllStructSetData($ThisStructHandle, $__SV_Y_POS, $y_Start)
DllStructSetData($ThisStructHandle, $__SV_Width, $width)
DllStructSetData($ThisStructHandle, $__SV_Height, $height)
EndFunc ;==>_SumatraPDF_UDF_resize
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];===============================================================================
; Description: Öffnet ein neues File 8 dabei wir das Alte Handel geschlossen, ein neues erstelt und an die Alte Position eingesetzt
; Parameter(s):
; ByRef $ThisStructHandle = das betroffenen SumatraObject
; $PDFFilePath=0 = das File welches geöfnet werden soll.
;
; Return Value(s): keine
;
;===============================================================================
Func _SumatraPDF_UDF_loadFile(ByRef $ThisStructHandle, $PDFFilePath)
_SumatraPDF_UDF_Close($ThisStructHandle)
[/autoit] [autoit][/autoit] [autoit]_SumatraPDF_UDF_run($ThisStructHandle, DllStructGetData($ThisStructHandle, $__SV_ViewMode), $PDFFilePath)
[/autoit] [autoit][/autoit] [autoit]$Mode = DllStructGetData($ThisStructHandle, $__SV_MenueState)
$x_Start = DllStructGetData($ThisStructHandle, $__SV_X_POS)
$y_Start = DllStructGetData($ThisStructHandle, $__SV_Y_POS)
$width = DllStructGetData($ThisStructHandle, $__SV_Width)
$height = DllStructGetData($ThisStructHandle, $__SV_Height)
_SumatraPDF_UDF_inset(DllStructGetData($ThisStructHandle, $__SV_ParentHandle), $ThisStructHandle, $Mode, $x_Start, $y_Start, $width, $height)
EndFunc ;==>_SumatraPDF_UDF_loadFile
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];===============================================================================
; Description: blättert eine Seite hoch
; Parameter(s):
; ByRef $ThisStructHandle = das betroffenen SumatraObject
;===============================================================================
Func _SumatraPDF_UDF_PageUp(ByRef $ThisStructHandle)
ControlSend(DllStructGetData($ThisStructHandle, $__SV_WHandle), "", "", "{RIGHT}") ; can be use to open print dialog box
EndFunc ;==>_SumatraPDF_UDF_PageUp
;===============================================================================
; Description: blättert eine Seite runter
; Parameter(s):
; ByRef $ThisStructHandle = das betroffenen SumatraObject
;===============================================================================
Func _SumatraPDF_UDF_PageDown(ByRef $ThisStructHandle)
ControlSend(DllStructGetData($ThisStructHandle, $__SV_WHandle), "", "", "{LEFT}") ; can be use to open print dialog box
EndFunc ;==>_SumatraPDF_UDF_PageDown
;===============================================================================
; Description: druckt das Dokument
; Parameter(s):
; ByRef $ThisStructHandle = das betroffenen SumatraObject
;===============================================================================
Func _SumatraPDF_UDF_Print(ByRef $ThisStructHandle)
ControlSend(DllStructGetData($ThisStructHandle, $__SV_WHandle), "", "", "^p") ; can be use to open print dialog box
EndFunc ;==>_SumatraPDF_UDF_Print
;===============================================================================
; Description: schließt das Sumatra Object
; Parameter(s):
; ByRef $ThisStructHandle = das betroffenen SumatraObject
;===============================================================================
Func _SumatraPDF_UDF_Close(ByRef $ThisStructHandle)
ControlSend(DllStructGetData($ThisStructHandle, $__SV_WHandle), "", "", "^q") ; can be use to open print dialog box
DllStructSetData($ThisStructHandle, $__SV_State, -1)
EndFunc ;==>_SumatraPDF_UDF_Close
;===============================================================================
; Description: zeigt den gespeicherten inhalt des Sumatra Objectes
; Parameter(s):
; ByRef $ThisStructHandle = das betroffenen SumatraObject
;===============================================================================
Func _SumatraPDF_UDF_ShowObjectData($thisStruct, $Promt = "0")
If $Promt = 0 Then
$Promt = "values in " & $thisStruct
Else
$Promt = "values in " & $thisStruct & "->" & $Promt
EndIf
$seperatet = StringSplit($__sumatraPDF_UDF_StructString, ";")
For $i = 1 To $seperatet[0]
$retval = StringSplit($seperatet[$i], " ")
$seperatet[$i] = $retval[2]
Next
For $i = 1 To $seperatet[0]
$retval = StringSplit($seperatet[$i], "[")
$seperatet[$i] = $retval[1]
Next
$valueString = ""
For $i = 1 To $seperatet[0]
$valueString = $valueString & $seperatet[$i] & "=" & DllStructGetData($thisStruct, $seperatet[$i]) & " |" & @CRLF
Next
MsgBox(0, $Promt, $valueString)
EndFunc ;==>_SumatraPDF_UDF_ShowObjectData
die Portable Version des Sumatra muss man sich halt dann gesondert auf den HP runter laden.
;-------------------------------------
wer dennoch lieber mit dem Acrobat Reader arbeiten möchte hier meine entsprechende Acrobat Reader UDF
Spoiler anzeigen
#include-Once
FileInstall(".\LOAD.pdf", ".\LOAD.pdf")
Global Static $_Acro_UDF_Version = 1
Global Static $_Acro_UDF_ReleaseDatum = "2013.01.17"
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.8.1
Author: Marc Neininger
Script Function:
Acrobar_Reader_UDF erleichert den Umgang mit der AcrobatReader OLE
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];-Funktionen --------------------------------------------------------------------------------------------------------------------
; _Acro_UDF_initialization()
; _Acro_UDF_CreateCtrl($AcrobatObj, $width = 100, $height = 100, $left = 0, $top = 0)
; _Acro_UDF_loadPdfFile($AcrobatObj, $PDF_File)
#cs
;###################### simple sample ###################################################################
HotKeySet("{ESC}", "Terminate")
#include "_Acrobat_Reader_UDF.au3"
[/autoit] [autoit][/autoit] [autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]Opt("GUIOnEventMode", 1) ; Change to OnEvent mode , damit gui protokoll anderst abgearbeitet wird ( mit funktionen , nicht case )
[/autoit] [autoit][/autoit] [autoit]$gui_Width = @DesktopWidth / 2
$gui_Height = @DesktopHeight / 2
$Start_Position_X = 0
$Start_Position_Y = 0
Global $mainwindow = GUICreate(@ScriptName, $gui_Width, $gui_Height, $Start_Position_X, $Start_Position_Y)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ; wenn event $GUI_EVENT_CLOSE aktiviert wird, wird funktion "CLOSEClicked" aufgerufen
Global $AcroObject1 = _Acro_UDF_initialization()
Global $AcroOb1_Ctrl = _Acro_UDF_CreateCtrl($AcroObject1,$gui_Width,$gui_Height,10,10)
GUISetState(@SW_SHOW) ; anzeigen des gui
Sleep(2000)
[/autoit] [autoit][/autoit] [autoit]$PDF_File = "I:\Pruefmittel\3210_PK\Prüfgeräte_Projekte\Pruefgeraete\4019-147-000_Dislpaytest SC28pro\Software\OpenCVreferencemanual.pdf"
[/autoit] [autoit][/autoit] [autoit]MsgBox(0,"load PDF","load PDF="&_Acro_UDF_loadPdfFile($AcroObject1, $PDF_File))
[/autoit] [autoit][/autoit] [autoit]Sleep(2000)
MsgBox(0,"load PDF","set dual fit="&_Acro_UDF_setDualFit($AcroObject1))
Sleep(2000)
MsgBox(0,"load PDF","set PageTo="&_Acro_UDF_setPageTo($AcroObject1,3))
While 1
[/autoit] [autoit][/autoit] [autoit]Sleep(400)
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]Func CLOSEClicked()
Terminate()
EndFunc ;==>CLOSEClicked
Func Terminate()
Exit 0
EndFunc ;==>Terminate
;###################### simple sample ###################################################################
#ce
; ===============================================================================================================================
#include <GUIConstants.au3>
Global Static $_Acro_UDF_firstLoad_File = @ScriptDir & "\load.pdf"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];===============================================================================
; Description: generiert ein Object auf den Acrobat reader
; Parameter(s): keine
;
; Return Value(s): das Acrobat Object
;
;===============================================================================
Func _Acro_UDF_initialization()
$AcrobatObj = ObjCreate("AcroPDF.PDF.1")
$AcrobatObj.src = $_Acro_UDF_firstLoad_File
Return $AcrobatObj
EndFunc ;==>_Acro_UDF_initialization
;===============================================================================
; Description: generiert ein GUI-Controle von einem Object
; Parameter(s): $AcrobatObj -> das Object
; $width = 100 -> die breite
; $height = 100 -> die höhe
; $left = 0 -> startkoordinate in X
; $top = 0 -> startkoordinate in Y
;
; Return Value(s): das Control Handle
;===============================================================================
Func _Acro_UDF_CreateCtrl($AcrobatObj, $width = 100, $height = 100, $left = 0, $top = 0)
$AcrobatObj_ctrl = GUICtrlCreateObj($AcrobatObj, $left, $top, $width, $height)
GUICtrlSetState($AcrobatObj_ctrl, $GUI_SHOW)
Return $AcrobatObj_ctrl
EndFunc ;==>_Acro_UDF_CreateCtrl
;===============================================================================
; Description: läd ein pdf file in ein Object
; Parameter(s): $AcrobatObj -> das Object
; $PDF_File -> das file ( kompletter pfad )
;
; Return Value(s): =1 -> alles ok file geladen
; =-1 -> Object wurde nicht gefunden
; =-2 -> File wurde nicht gefunden
;===============================================================================
Func _Acro_UDF_loadPdfFile($AcrobatObj, $PDF_File)
If IsObj($AcrobatObj) Then
; $AcrobatObj ist ein Object
If FileExists($PDF_File) Then
; file exists
$AcrobatObj.src = $PDF_File
Return 1
Else
; dpf nicht gefunden
Return -2
EndIf
EndIf
;$AcrobatObj ist kein object
Return -1
EndFunc ;==>_Acro_UDF_loadPdfFile
;===============================================================================
; Description: DPF ansicht auf -> an bildschirm anpassen und -> 2Seitenansicht setzen
; Parameter(s): $AcrobatObj -> das Object
;
; Return Value(s): =1 -> alles ok file geladen
; =-1 -> Object wurde nicht gefunden
;===============================================================================
Func _Acro_UDF_setDualFit($AcrobatObj)
If IsObj($AcrobatObj) Then
; $AcrobatObj ist ein Object
; Object Controlls !!!!!!!! siehe iac_api_reference.pdf
$AcrobatObj.SetView("Fit")
$AcrobatObj.setLayoutMode("TwoColumnLeft")
Return 1
EndIf
;$AcrobatObj ist kein object
Return -1
EndFunc ;==>_Acro_UDF_setDualFit
;===============================================================================
; Description: set current page to
; Parameter(s): $AcrobatObj -> das Object
; $page=1 -> Seite
;
; Return Value(s): =1 -> alles ok
; =-1 -> Object wurde nicht gefunden
;===============================================================================
Func _Acro_UDF_setPageTo($AcrobatObj, $page = 1)
If IsObj($AcrobatObj) Then
; $AcrobatObj ist ein Object
; Object Controlls !!!!!!!! siehe iac_api_reference.pdf
$AcrobatObj.setCurrentPage($page);
Return 1
EndIf
;$AcrobatObj ist kein object
Return -1
EndFunc ;==>_Acro_UDF_setPageTo