Fehler beim PDF extracten

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Dr_Gre.

    Fehler beim PDF extracten

    Hallo, ich versuche mit meinem programm simpel den Text einer PDF zu extrahieren.
    Bisher habe ich mir Folgendes aus dem Internet zusammengestöpselt: (ofd ist ein OpenFileDirectory)

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If ofd.ShowDialog() = DialogResult.OK Then
    3. Dim stream() As Byte = {115, 116, 114, 101, 97, 109} ' "stream" in ascii
    4. Dim endstream() As Byte = {101, 110, 100, 115, 116, 114, 101, 97, 109}
    5. Dim length As Integer
    6. Dim Mystream As New IO.FileStream(ofd.FileName, IO.FileMode.Open)
    7. Dim filesize As Long = Mystream.Length
    8. Dim file_bytes(filesize) As Byte ' stores all bytes of the file
    9. Mystream.Read(file_bytes, 0, filesize)
    10. For i = 0 To file_bytes.Length - 6
    11. If file_bytes(i) = stream(0) And file_bytes(i + 1) = stream(1) And file_bytes(i + 2) = stream(2) And
    12. file_bytes(i + 3) = stream(3) And file_bytes(i + 4) = stream(4) And file_bytes(i + 5) = stream(5) Then
    13. i += 6 ' i zeigt auf den ersten byte des streams
    14. For k = i To file_bytes.Length - 9
    15. If file_bytes(k) = endstream(0) And file_bytes(k + 1) = endstream(1) And file_bytes(k + 2) = endstream(2) And
    16. file_bytes(k + 3) = endstream(3) And file_bytes(k + 4) = endstream(4) And file_bytes(k + 5) = endstream(5) And
    17. file_bytes(k + 6) = endstream(6) And file_bytes(k + 7) = endstream(7) And file_bytes(k + 8) = endstream(8) Then
    18. length = k - i - 1
    19. k = file_bytes.Length ' exit for
    20. End If
    21. Next
    22. Dim text(length) As Byte
    23. For k = i To i + length
    24. text(k - i) = file_bytes(k)
    25. Next
    26. Dim inputStream As New IO.MemoryStream(text)
    27. Dim outputStream As New IO.MemoryStream()
    28. Dim decompStream As New IO.Compression.DeflateStream(inputStream, IO.Compression.CompressionMode.Decompress)
    29. Try
    30. decompStream.CopyTo(outputStream)
    31. Dim result(outputStream.Length) As Byte
    32. result = outputStream.ToArray
    33. For t = 0 To result.Length - 1
    34. TextBox1.Text &= Chr(result(t))
    35. Next
    36. Catch ex As Exception
    37. MsgBox(ex.Message)
    38. End Try
    39. i += length + 8
    40. End If
    41. Next
    42. End If
    43. End Sub


    Leider gibt er mir den Fehler "ungültige Daten beim Decodierern gefunden." zurück
    FIndet jemand den Fehler?

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

    Heyho,

    wäre schön wenn du den Code in VB.NET Tags packst dann kommt auch das Highlighten daher.
    Desweiteren würde ich gerne wissen in welcher Zeile kommt der Fehler?

    Nächste wäre das du evtl. mal das Try-Catch weg machst denn das ist dort ziemlich fehl am platze siehe: TryCatch ist ein heißes Eisen
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Ich weiß ja nicht wozu du das machst, jedoch gibt es die iTextSharp .dll die solche Dinge recht komfortabel können soll... vielleicht ist das ja was für dich.

    github.com/itext/itextsharp
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Danke für die Info!
    Derzeit nutze ich in meinem Programm tatsächlich itextsharp :D

    Wenn ich das Programm jetzt aber anderen zur Verfügung stellen will muss ich mich an die itextsharp Lizenz (AGPL und Copyleft) halten. Ich finde es besser unabhängig von solchen Drittanbietern zu sein (ist halt leider nicht immer möglich).