Существует ли достойный open-source или недорогой SDK для .NET с функциями извлечения текста из PDF?

Вопрос или проблема

Я пытаюсь написать либо автономное приложение на Windows Forms, либо VSTO Excel Add-in с использованием C# или VB .net, которое может читать PDF-файл и извлекать из него данные. Файлы, которые я получаю, представляют собой списки записей о дорожно-транспортных происшествиях, созданные из государственной базы данных, и каждая запись о происшествии включает данные об окружающей среде, особенности аварии и информацию об участвующих лицах.

В PDF листингах, которые я получаю, все данные для одного происшествия окружены коробкой, так что для получения данных я представляю сначала обнаружение квадрата, окружающего запись, а затем из верхней левой или верхней правой координаты этого квадрата, большинство различных данных всегда находятся в тех же относительных местах. Но квадраты не всегда одного размера, потому что может быть несколько участников, каждый из которых указывается внизу каждой записи. Я бы направил парсер искать следующую запись о происшествии, когда он достигнет y-координаты нижней части коробки. Могут быть и другие стратегии для извлечения данных, но этот метод кажется самым простым для кодирования на данный момент. Информация уже является текстом для поиска, поэтому мне не нужен OCR для цифровки данных. Мне просто нужно поместить их в Excel-таблицу или другой файл, который может быть прочитан Excel для моих расчетов. Мне не нужен API, если он интегрируется с Visual Studio.

Это исключительно для помощи мне в моей собственной работе, и я не намерен продавать то, что я произвожу с использованием SDK, так что роялти не являются проблемой. Я не профессиональный разработчик ПО, но я изучил C# и VB .net, чтобы автоматизировать повторяющиеся или итеративные расчеты и выполнять другие обыденные задачи, связанные с инженерией. Мне не нужно создавать PDF и не нужно их редактировать, мне просто нужно читать данные. Поскольку я не намерен зарабатывать деньги напрямую с этого проекта, я не могу оправдать оплату за годовую лицензию или огромную разовую плату за SDK, который я буду использовать только для разбора этих PDF-файлов. Я не ожидаю получить его бесплатно и готов заплатить за это, если стоимость будет разумной для моего ограниченного использования.

Мой примерный бюджет составляет менее $250. Это стоит мне того, чтобы не разбирать историю аварий вручную. Я рассмотрю более высокие расходы, но ненамного выше.

Есть какие-нибудь предложения?

Вы можете попробовать Syncfusion PDF Library

Эта высокопроизводительная и богатая функциональностью .NET PDF библиотека работает без зависимостей от Adobe. Она имеет библиотеку для создания и редактирования PDF, которая позволяет вам создавать, читать и редактировать PDF-файлы программно в любом .NET приложении. Она предлагает элементы управления для просмотра PDF, чтобы просматривать, рецензировать и печатать PDF-файлы. Ее мощные API для конверсии упрощают преобразование HTML, Word, Excel, PowerPoint и изображений в PDF.

https://www.syncfusion.com/document-processing/pdf-framework/net

Syncfusion также предлагает бесплатную лицензию для сообщества. https://www.syncfusion.com/products/communitylicense

Примечание: я работаю в Syncfusion

Поскольку вы упоминаете Excel, я полагаю, у вас также есть Office или, по крайней мере, WORD, в этом случае вы можете использовать функции pdf в Word и использовать их в вашем .net-коде. Вот пример использования VBA для получения данных из PDF в Excel, без внешних программ (кроме самого Office). это для получения данных из ТАБЛИЦ, а не из коробок (я думаю, что для этого нужно было бы использовать SHAPES вместо таблиц или, возможно, .Pages(1).Rectangles.Item(n).Range).

Sub read_pdf_document_tables()

Const PDFPath As String = "C:\Users\xxxxxx\Documents\Book2.pdf"

Dim sht As Worksheet
Dim WDoc As Word.Document
Dim WApp As Word.Application
Dim i As Long, r As Long, c As Long
Dim rng As Range, t As Word.Table

    Set WApp = CreateObject("Word.Application")
    WApp.Visible = True
    Set WDoc = WApp.Documents.Open(PDFPath, ConfirmConversions:=False, ReadOnly:=False)

    Set sht = Sheets("Temp")
    Set rng = sht.Range("A1")
    sht.Activate

    For Each t In WDoc.Tables
        t.Range.Copy
        rng.Select
        rng.Parent.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
        With rng.Resize(t.Rows.Count, t.Columns.Count)
            .Cells.UnMerge
            Cells.Columns.AutoFit
            Cells.Rows.AutoFit
        End With

        Set rng = rng.Offset(t.Rows.Count + 2, 0)
    Next t
    WDoc.Close
    WApp.Quit
End Sub

Ответ или решение

Для решения задачи, описанной в вопросе, вам необходимо найти программное средство, которое позволит вам извлекать текстовые данные из PDF-документов, чтобы автоматически заносить их в Excel для дальнейшей обработки. Основные требования заключаются в том, чтобы SDK имел возможность парсинга текста, был совместим с .NET и находился в пределах вашего бюджета. Рассмотрим несколько подходящих вариантов.

Теория (Theory):

Для работы с PDF в среде .NET существует множество библиотек, включая как коммерческие, так и бесплатные решения. Основные функции, которые вам понадобятся, это извлечение текста и возможное распознавание шаблонов, чтобы корректно определять границы записей об авариях.

Пример (Example):

  1. iText 7 Community: Это популярная библиотека для работы с PDF, имеющая открытый исходный код. Она поддерживает извлечение текста, аннотации и многое другое. Вы можете использовать ее, чтобы определить границы записей в PDF на основе определенных шаблонов и структур.

  2. PdfPig: Это более легковесная библиотека, которая сфокусирована на извлечении текста из PDF. Она позволяет обходить страницы PDF, извлекать текст и координаты его расположения, что идеально подходит для вашей задачи определения границ "коробок".

  3. Syncfusion PDF Library: Эта библиотека предлагает широкий функционал для работы с PDF без зависимостей от Adobe. Вы можете получать лицензию на бесплатной основе, если соответствуете условиям их Community License, что потенциально делает это решение бесплатным.

Применение (Application):

Вы можете начать с изучения документации указанных библиотек, чтобы определить, какая из них лучше всего подходит под ваши нужды. Вот краткое руководство по использованию PdfPig для извлечения текста:

using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;

public void ParsePdf(string filePath)
{
    using (var document = PdfDocument.Open(filePath))
    {
        foreach (var page in document.GetPages())
        {
            // Пример извлечения текста
            string text = page.Text;
            // Здесь можно добавить логику для поиска конкретной структуры, например, границ "коробок"
        }
    }
}

Убедитесь, что выбранная библиотека совместима с вашей версией .NET и позволяет достичь поставленных задач с минимальными накладными расходами. Если ваши потребности выходят за рамки возможностей бесплатных версий, вы всегда можете рассмотреть возможность приобретения платной лицензии, но основные функции вероятно покроются бесплатными решениями.

Оцените материал
Добавить комментарий

Капча загружается...