Анализируйте PDF в VB. Net: найдите аннотации и выделите выделенный текст внизу - PullRequest
1 голос
/ 21 апреля 2020

Краткое объяснение того, чего я пытаюсь достичь: Я хочу создать программу, которая должна отслеживать выделенные части в PDF. На следующем этапе я хочу использовать эти (в конечном итоге измененные) значения для автоматизации некоторых простых процессов.

Я не программист.

Что я пробовал до сих пор:

Первая попытка: Я использовал каркас syncfusion pdf и написал небольшую подпрограмму, чтобы обнаружить ее:

Public Sub ReadPdf2()
        Dim Pdf As New PdfLoadedDocument("C:\temp\std\sample.pdf")
        Dim page As PdfLoadedPage = TryCast(Pdf.Pages(1), PdfLoadedPage)
        Dim extractedHighlights As PdfLoadedAnnotationCollection = TryCast(Pdf.Pages(1).Annotations, PdfLoadedAnnotationCollection)
        Dim extractedText As New List(Of TextData)()
        page.ExtractText(extractedText)
        For Each textData As TextData In extractedText

            Dim Txt As String = textData.Text
            Dim pFont As Font = New Font(textData.FontName, textData.FontSize, textData.FontStyle)

        Next

    End Sub
End Module

extractHighlights = дает мне все основные моменты на странице 1 с их положением в виде x, y, ширины, высоты

extractText = дает мне все текстовые шаблоны на странице 1 с их положением в виде x, y, ширины, высоты

Ok Насколько хорошо, теоретически я мог бы сравнить текстовые границы и выделенные рамки, сохранить этот текст и сравнить его со следующей версией PDF

  • Проблема 1: извлеченный текст представляет собой набор текстовых фрагментов, таких как слова, разделенные на части :

extracttextItems

  • Задача 2: Цена:

https://www.syncfusion.com/sales/products/fileformats

У маленького парня рядом с ценой точно мое лицо expr ession ...

Вторая попытка: Я использовал среду iText 7, в которой есть как минимум AGPL Lizenz, так что я могу использовать ее хотя бы для некоммерческого использования.

    Public Sub readPDF3()
        Dim pdfreader As PdfReader = New PdfReader("C:\temp\std\sample.pdf")
        Dim PdfDoc As PdfDocument = New PdfDocument(pdfreader)

        Dim PdfText As PdfStream = New PdfStream
        PdfText = PdfDoc.GetPage(1).GetContentStream(0)

        Dim PdfAnnots As New List(Of PdfAnnotation)()
        PdfAnnots = PdfDoc.GetPage(1).GetAnnotations
        Dim pdfAnnot As PdfAnnotation

        For i = 0 To PdfAnnots.Count
            pdfAnnot = PdfAnnots(i)
            Dim strContent As PdfString = pdfAnnot.GetContents()

            Dim strC As String
            strC = strContent.GetValue()
            Debug.Print(strC)

            pdfAnnot.GetRectangle()

        Next

    End Sub

Таким образом, я могу получить аннотации поиска и их привязку, даже если я не знаю, как обрабатывать возвращенный pdfarray из pdfAnnot.GetRectangle ()

Public Sub readPDF4()

        Dim Reader As PdfReader = New PdfReader("C:\temp\std\sample.pdf")
        Dim PdfDoc As PdfDocument = New PdfDocument(Reader)
        Dim rect As PdfArray = New PdfArray()
        Dim text As String = ""
        Dim ptext As PdfString

        For i = 1 To PdfDoc.GetNumberOfPages()
            text = text & PdfTextExtractor.GetTextFromPage(PdfDoc.GetPage(i), New LocationTextExtractionStrategy())
            'ptext = PdfDoc.'PdfTextExtractor.GetTextFromPage(PdfDoc.GetPage(i), New LocationTextExtractionStrategy())
        Next
        Form1.RichTextBox1.Text = text
        Debug.Print(text)
    End Sub

Теперь их приятно функция «PdfTextExtractor.GetTextFromPage», которая возвращает мне довольно «хорошо отформатированную» строку, но я не могу найти, как получить текстовое связывание.

Любые идеи приветствуются! Любые другие безлицензионные методы также, если я могу только экспортировать выделенный текст и сравнить его со следующей версией этого PDF-файла и получить их в качестве некоторой переменной в моем. Net -application

samplePDF Вы должны добавить хотя бы 1 комментарий, чтобы это (что-то вроде) заработало.

...