itextsharp CreationDate Bug

  • VB.NET
  • .NET (FX) 4.5–4.8

    itextsharp CreationDate Bug

    Hallo Leute,

    folgendes Problem:

    Ich verwende itextsharp, um mir das originale Erstelldatum von knapp 2000 Dateien zu erfassen und anzuzeigen.
    Funktioniert soweit auch perfekt.

    Komischerweise funktioniert das ganze nicht bei allen PDFs.
    Ich erzeuge zwei Textdateien. in der einen befinden sich die Dateinamen + Erstelldatum und in der anderen werden die fehlerhaften Dateien aufgelistet.

    Weiß nicht wieso das nicht funktioniert.

    Kann die PDFs bei denen es nicht klappt leider nicht ins Netz stellen, da sie vertrauliche Daten beinhalten.
    Darunter sind auch PDF's die den Reiter "PDF" unter den Einstellungen nicht haben. Bei denen ist klar, dass ich ein anderes Datum verwenden werde.
    Bei denen die den "PDF" Reiter haben, aber es nicht klappt bin ich ratlos.

    Benötigt wird:
    -3x Button
    -1x FolderBrowserDialog
    -3x Label (Label1,3,4)
    -1x textbox

    Elemente können natürlich weggelassen werden.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Collections.Hashtable
    3. Public Class Form1
    4. Public datei As String
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. Label3.Hide()
    7. Label4.Hide()
    8. Dim args = Environment.GetCommandLineArgs()
    9. Dim i As Integer = 0
    10. For Each a In args
    11. i = i + 1
    12. If i = 2 Then
    13. End If
    14. Next
    15. End Sub
    16. Public Sub pdftime(pfad)
    17. ' FolderBrowserDialog1.ShowDialog()
    18. Dim a As String = pfad 'FolderBrowserDialog1.SelectedPath 'Pfad der durchsucht werden soll
    19. Dim di As New System.IO.DirectoryInfo(a)
    20. Dim fs As New FileStream(a & "\Times.txt", FileMode.Create)
    21. Dim fx As New FileStream(a & "\Timesnodate.txt", FileMode.Create)
    22. Dim sw As New StreamWriter(fs)
    23. Dim swnpdf As New StreamWriter(fx)
    24. For Each fi As System.IO.FileInfo In di.GetFiles("*.pdf", System.IO.SearchOption.AllDirectories)
    25. Try
    26. Dim pdfr As New iTextSharp.text.pdf.PdfReader(fi.FullName)
    27. Dim ht As Hashtable = New Hashtable(pdfr.Info)
    28. Dim CD As String = ht("CreationDate")
    29. CD = CD.Remove(0, 2)
    30. CD = CD.Remove(14, 7)
    31. Dim year As String = CD.Substring(0, 4)
    32. Dim month As String = CD.Substring(4, 2)
    33. Dim day As String = CD.Substring(6, 2)
    34. Dim hour As String = CD.Substring(8, 2)
    35. Dim minute As String = CD.Substring(10, 2)
    36. Dim second As String = CD.Substring(12, 2)
    37. Dim Zeitneu As String = day & "." & month & "." & year & ", um " & hour & ":" & minute & ":" & second & " Uhr"
    38. Label3.Text = "Textdatei wird in " & a & " erzeugt..."
    39. Label3.Show()
    40. sw.WriteLine(fi.FullName & vbTab & Zeitneu)
    41. Catch ex As Exception
    42. swnpdf.WriteLine(fi.FullName & " konnte nicht analysiert werden")
    43. End Try
    44. Next
    45. sw.Close()
    46. swnpdf.Close()
    47. Label3.Hide()
    48. If File.Exists(datei) Then
    49. Label4.Text = "Fertig"
    50. Label4.Show()
    51. ' Me.Close()
    52. ' Me.Dispose()
    53. End If
    54. End Sub
    55. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    56. Me.Close()
    57. Me.Dispose()
    58. End Sub
    59. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    60. FolderBrowserDialog1.ShowDialog()
    61. TextBox1.Text = FolderBrowserDialog1.SelectedPath
    62. datei = FolderBrowserDialog1.SelectedPath & "\Times.txt"
    63. End Sub
    64. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    65. pdftime(FolderBrowserDialog1.SelectedPath)
    66. End Sub
    67. End Class





    Edit//

    Fehler gefunden!

    Das Problem bei der ganzen Sache ist, dass das CreationDate verschiedene Formate annehmen kann und ich daher durch mein Datumsformat einen Fehler erzeuge.

    Wenn jemand mit Hashtables arbeitet und nicht weiß, welche Metadaten es so gibt...
    So könnt ihr sie euch anzeigen lassen(Ich mache das hier für jede Datei im ausgewählten Ordner):
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click 'hashtable Varianten herausfinden.
    2. Dim a As String = FolderBrowserDialog1.SelectedPath 'FolderBrowserDialog1.SelectedPath 'Pfad der durchsucht werden soll
    3. Dim di As New System.IO.DirectoryInfo(a)
    4. For Each fi As System.IO.FileInfo In di.GetFiles("*.pdf", System.IO.SearchOption.AllDirectories)
    5. Dim pdfr As New iTextSharp.text.pdf.PdfReader(fi.FullName)
    6. Dim ht As Hashtable = New Hashtable(pdfr.Info)
    7. For Each entry As DictionaryEntry In ht
    8. Console.WriteLine(entry.Key + ":" + entry.Value)
    9. Next
    10. Next
    11. End Sub


    Benötigt wird nur ein Button und ein Folderbrowserdialog


    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „razzzer530i“ ()