Suche String in mehreren PDF

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von 7081.

    Suche String in mehreren PDF

    Hallo,

    ich suche nach einer einfachen Methode um in VB eine Reihe von PDFs nach einem string zu durchsuchen.
    Am Ende brauche ich eigentlich nur einen Bool mit der Antwort - Ja, diese PDF enthält den gesuchten String.
    Ich will die PDF nicht via Visual Basic anzeigen und brauche auch nicht unbedingt den genauen Ort des Strings in der PDF

    VB.NET-Quellcode

    1. Dim suchtext as String = "Test"
    2. For Each foundFile As String In My.Computer.FileSystem.GetFiles(".\Ordner_in_dem_alle_PDF_sind")
    3. 'hier muss in PDF selbst gesucht werden
    4. Next


    Gibt es so eine Möglichkeit?
    Vielen Dank!!

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim suchtext As String = "Sender"
    3. For Each foundFile As String In IO.Directory.GetFiles("G:\Downloads\Ebooks", "*.pdf", IO.SearchOption.AllDirectories)
    4. Dim file As New System.IO.FileInfo(foundFile)
    5. If file.Name.Contains(suchtext) Then
    6. MsgBox(file.FullName) ' Hier!
    7. End If
    8. Next
    9. End Sub


    Hilft dir das weiter?
    Visual Basic.NET 8o
    MS-SQL
    8o
    Moin,

    ich hole mir für sowas den OCR-Text der PDF mit iTextSharp (sourceforge.net/projects/itextsharp/) und der Funktion:

    VB.NET-Quellcode

    1. Public Shared Function GetOCRText(P_File As String) As String
    2. Dim sb_Text As New StringBuilder
    3. If File.Exists(P_File) Then
    4. Using v_PDFReader As New PdfReader(P_File)
    5. For v_page As Integer = 1 To v_PDFReader.NumberOfPages
    6. Dim v_Strategy As ITextExtractionStrategy = New SimpleTextExtractionStrategy
    7. Dim v_currentText As String = PdfTextExtractor.GetTextFromPage(v_PDFReader, v_page, v_Strategy)
    8. v_currentText =
    9. Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.[Default],
    10. Encoding.UTF8, Encoding.[Default].GetBytes(v_currentText)))
    11. sb_Text.Append(v_currentText)
    12. Next
    13. v_PDFReader.Close()
    14. End Using
    15. End If
    16. Return sb_Text.ToString
    17. End Function

    (Auch hier iwo gefunden)
    Einfach für jede Datei laufen lassen, den Ergebnisstring durchsuchen und auf Treffer reagieren.

    Gruß
    7081

    7081 schrieb:

    SimpleTextExtractionStrategy
    Ja.
    Für einfache Texte geht das ganz gut.
    Ggf. hilft auch LocationTextExtractionStrategy.
    Nur manchmal sind die PDFs auch ziemlich tricky.
    Da hilft dann unter Umständen nur, die PDF-Tags detailliert zu parsen (s.o.).

    Und wenn es sich um Scans handelt, die nur Bilder beinhalten, hilft in der Regel nur, erst eine OCR-Erkennung drüber laufen zu lassen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo,

    danke für die Antworten!
    Es handelt sich bei den PDFs um wissenschaftliche Paper - sind also nahezu nie / vernachlässigbare Anzahl an Scans.
    Die meisten PDFs bestehen nur aus viel Text mit ein paar Bildern/Diagrammen.

    Meine derzeitige Umgehungsstrategie ist:
    1. Jedes neu hinzugefügte PDF automatisch einmalig im VisualBasic Webbrowser öffnen
    2. Manuell den gesamten Text markieren + kopieren und automatisch in separate .txt File (für jede PDF eine File) speichern
    3. Beim Filtern nach den Schlagworten werden simpel die .txt Files durchsucht und die gesuchten PDF in eine ListBox ausgegeben

    Das funktioniert bisher einwandfrei, und geht für eine PDF-Anzahl im zwei- bis niedrig dreistelligen Bereich super.
    Wenn ich das ganze professioneller lösen will (ohne manuelles markieren und kopieren) komme ich vermutlich um iTextSharp nicht herum, oder?

    Danke!!! ^^