Как извлечь текст из элементов структуры в pdf с тегами с помощью itext7 - PullRequest
1 голос
/ 05 августа 2020

Я хочу прочитать pdf с тегами, пройти по дереву структуры и извлечь текст для каждого элемента, окончательный результат будет примерно таким:

- document
  - div
    - H1
      - "The title of the document"
    - P
      - "The contents of the paragraph"

Я могу пройти по дереву, используя этот код: 1004 *

if (doc.IsTagged())
{
    var root = doc.GetStructTreeRoot();
    var stack = new Stack<iText.Kernel.Pdf.Tagging.IStructureNode>();
    var stack2 = new Stack<iText.Kernel.Pdf.Tagging.IStructureNode>();
    stack.Push(root);


    while (stack.Count > 0)
    {
        var currentNode = stack.Pop();
        stack2.Push(currentNode);
        var kids = currentNode.GetKids();


        if (kids != null)
        {
            foreach (var kid in kids)
            {
                stack.Push(kid);
            }
        }
    }

    while (stack2.Count > 0)
    {
        var currentNode = stack2.Pop();
        var role = currentNode.GetRole()?.ToString();
        if (currentNode is iText.Kernel.Pdf.Tagging.PdfMcrDictionary mcr) {
          // this is where I want to extract the text from the structured node
        }
    }
}

Я не уверен, как получить фактический текст, который будет go внутри узла структуры, например, содержимое H1, P и других тегов.

1 Ответ

2 голосов
/ 06 августа 2020

Существует нестандартное решение для чтения структуры тегов документа - оно называется TaggedPdfReaderTool. Он позволяет анализировать структуру тегов, включая текстовое содержимое элемента, и создавать XML с этим содержимым.

Пример использования инструмента:

FileOutputStream xmlOut = new FileOutputStream(outXmlPath);
new TaggedPdfReaderTool(pdfDocument).setRootTag("root").convertToXml(xmlOut);

Если XML структура не работает для вас, тогда вы можете посмотреть на реализацию для вдохновения - класс является самодостаточным и включает logi c для извлечения текста из тегов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...