Извлечение текста с надстрочными и подстрочными знаками из PDF

Извлечение текста с надстрочными и подстрочными знаками

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

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

Используйте класс TextFragmentAbsorber и вы уже можете делать что угодно с найденным текстом, то есть, вы можете просто использовать весь текст. Попробуйте следующий фрагмент кода:

Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.

    Document doc = new Document(GetInputPath("test1.pdf"));
    TextFragmentAbsorber absorber = new TextFragmentAbsorber();
    doc.Pages[1].Accept(absorber);
        using (StreamWriter writer = new StreamWriter(GetOutputPath("output.txt")))
        {
            writer.WriteLine(absorber.Text);
        }

Или используйте TextFragments отдельно и выполняйте с ними различные манипуляции, например, сортировку по координатам или по размеру.

Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing. Следующий код также работает с библиотекой Aspose.PDF.Drawing.

    Document doc = new Document(GetInputPath("test1.pdf"));
    TextFragmentAbsorber absorber = new TextFragmentAbsorber();
    doc.Pages[1].Accept(absorber);
        using (StreamWriter writer = new StreamWriter(GetOutputPath("output.txt")))
        {
            foreach (var textFragment in absorber.TextFragments)
            {
                writer.Write(textFragment.Text);
            }
        }