Dateieigenschaften/Dateiinfo auslesen (speziell PDF)

  • Hallo zusammen,

    Ich schreibe gerade an einer Möglichkeit PDF-Merkblätter auf Aktualität zu prüfen. Da wir die Techn.Merkblätter um unsere Firmenadresse ergänzen, wollen wir die Dateien von Lieferanten nur kopieren, wenn auch notwendig.

    Die PDF-Version ist kein Problem, da ein PDF-Dokument auch normalen Text enthält und diese Info ganz am Anfang steht:
    $text = FileRead($datei, 8 )
    $file[$i][1] = $text ; = PDF-Version

    Ähnlich könnte ich es auch mit dem internen PDF-Erstellungsdatum machen. (entspricht der PDF-Info bei Eigenschaften bzw. bei rechter Maustaste im Explorer- und NICHT dem Datum von FileGetTime() ). Die lesbare Textzeile ' <pdf:CreationDate>2004-04-07T13:24:19Z</pdf:CreationDate>' steht am Ende der Datei.

    Da ich davon ausgehe, dass alle PDFs nach diesem String zu durchsuchen mit AutoIt nicht gerade besonders effektiv ist, habe ich es auch noch nicht ausprobiert. Ich würde lieber auf die Windows-Funktion zugreifen, wie es der Explorer liefert.

    Ist das möglich?

    Vielen Dank
    Carsten

    • Offizieller Beitrag

    Hallo und :willkommen:,

    Du kannst dir mit FileGetTime auch das Erstellungsdatum auslesen. Einfach nur

    [autoit]

    FileGetTime("Dateiname",1,1) ; Erstellungsdatum lesen

    [/autoit]

    Die erste 1 steht für das Erstellungsdatum und die zweite 1 sorgt dafür das das Ergebnis als String (YYYYMMDDHHMMSS) und nicht als Array zurückgegeben wiird.

    Wenn das das Datum ist welches Du suchst!

    • Offizieller Beitrag

    HI,

    okay guck dir den Output hiervon an:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name: GetExtProperty($sPath,$iProp)
    ; Description: Returns an extended property of a given file.
    ; Parameter(s): $sPath - The path to the file you are attempting to retrieve an extended property from.
    ; $iProp - The numerical value for the property you want returned. If $iProp is is set
    ; to -1 then all properties will be returned in a 1 dimensional array in their corresponding order.
    ; The properties are as follows:
    ; Name = 0
    ; Size = 1
    ; Type = 2
    ; DateModified = 3
    ; DateCreated = 4
    ; DateAccessed = 5
    ; Attributes = 6
    ; Status = 7
    ; Owner = 8
    ; Author = 9
    ; Title = 10
    ; Subject = 11
    ; Category = 12
    ; Pages = 13
    ; Comments = 14
    ; Copyright = 15
    ; Artist = 16
    ; AlbumTitle = 17
    ; Year = 18
    ; TrackNumber = 19
    ; Genre = 20
    ; Duration = 21
    ; BitRate = 22
    ; Protected = 23
    ; CameraModel = 24
    ; DatePictureTaken = 25
    ; Dimensions = 26
    ; Width = 27
    ; Height = 28
    ; Company = 30
    ; Description = 31
    ; FileVersion = 32
    ; ProductName = 33
    ; ProductVersion = 34
    ; Requirement(s): File specified in $spath must exist.
    ; Return Value(s): On Success - The extended file property, or if $iProp = -1 then an array with all properties
    ; On Failure - 0, @Error - 1 (If file does not exist)
    ; Author(s): Simucal ([email='Simucal@gmail.com'][/email])
    ; Note(s):
    ;
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <array.au3>
    $path = FileOpenDialog("Select a file to read attributes",@ScriptDir,"All (*.*)")
    $prop = _GetExtProperty($path,-1)
    _ArrayDisplay($prop,"Property Array")

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetExtProperty($sPath, $iProp)
    Local $iExist, $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty
    $iExist = FileExists($sPath)
    If $iExist = 0 Then
    SetError(1)
    Return 0
    Else
    $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
    $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))
    $oShellApp = ObjCreate ("shell.application")
    $oDir = $oShellApp.NameSpace ($sDir)
    $oFile = $oDir.Parsename ($sFile)
    If $iProp = -1 Then
    Local $aProperty[35]
    For $i = 0 To 34
    $aProperty[$i] = $oDir.GetDetailsOf ($oFile, $i)
    Next
    Return $aProperty
    Else
    $sProperty = $oDir.GetDetailsOf ($oFile, $iProp)
    If $sProperty = "" Then
    Return 0
    Else
    Return $sProperty
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_GetExtProperty

    [/autoit]

    Einfach ein PDF oder jede andere Datei auswählen und gucken :)

    So long,

    Mega

  • Vielen Dank für die Infos - das ist super und die Zeilen von Mega gehen auch genau in die Richtung, die ich mir wünsche.

    Trotz der großen Auswahl an Eigenschaften fehlt aber das PDF-Erstellungsdatum.

    Im Anhang (da ich auf die Schnelle keinen Webspace für eine 'Bildeinfügung' habe) finden sich 3 Bilder, die das belegen.

    Das Erstellungsdatum ist von heute, da ich die Datei heute auf Festplatte kopiert haben. Das PDF-Erstellungdatum ist aber schon 2001 und wird leider nicht im AutoIt-Skript angezeigt.

    Ich mache doch jetzt den Versuch die Dateien mit fileread() durchzuforsten - vielleicht ist das ganze schneller als ich denke - und vielleicht findet sich hier auch bald noch eine bessere Möglichkeit. In AutoIt wäre das ja schnell geändert :)

    Vielen Dank
    Carsten