Files
DocumentServer-v-9.2.0/core/DocxRenderer/readme.md
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

40 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Логика описана в CPage::ProcessingAndRecordingOfPageData
I Этап
1. Собираются шейпы с векторной графикой (DrawPath -> m_arShapes)
- Копируются текущие Pen и Brush,
- определяется тип шейпа VectorTexture или VectorGraphics
- первоначально определяем положение на стронице (перед текстом/позади текста - пока плохо работает, когда удалялись белые прямоугольники было лучше)
- задаются геометрические параметры
- определяется тип графики (Rectangle, Curve, ComplicatedFigure, NoGraphics) и подтип (LongDash, Dash, Dot, Wave)
2. Собираются шейпы-картинки (WriteImage -> m_arImages)
- задаются геометрические параметры и тип шейпа Picture
3. Собираются буквы и сразу распределются по текстовым линиям. Отдельно собираются DiacriticalSymbol (CollectTextData -> m_arTextLine, m_arDiacriticalSymbol)
- отбрасываем все пробелы (нужно будет добавить доп юникоды для других типов пробелов)
- работа FontManager
- задаются геометрические параметры
- генерим или проверяем на наличие стиль (копируются и анализируются текущие Font, Brush, PickFontName, PickFontStyle)
II Этап
Собрали все объекты для текущей страницы. Начинаем анализ.
1. Анализируем графику - AnalyzeCollectedShapes()
- BuildTables(); - собираем таблицы из шейпов (в разработке)
- DetermineLinesType() - превращаем шейпы в горизонтальные линии в зависимости от геометрии, удаляем обработанные шейпы, определяем тип полученной линии на основании типа графики (Rectangle, Curve, ComplicatedFigure, NoGraphics) и подтипа (LongDash, Dash, Dot, Wave). (2 вложенных цикла m_arShapes - m_arShapes с сортировкой вектора)
2. AnalyzeCollectedTextLines() - добавляем свойства каждому символу отдельно
- Определяем взаимотношения между символами - FontEffects, VertAlignTypeBetweenConts, IsDuplicate (2 вложенных цикла m_arSymbol - m_arSymbol) (удаляем отработанные символы)
- DetermineStrikeoutsUnderlinesHighlights() - определяем взаимоотношения между графикой и символами Strikeouts, Underlines, Highlights, FontEffect (2 вложенных цикла m_arShapes - m_arSymbol) (удаляем отработанные шейпы)
- AddDiacriticalSymbols() - добавляем DiacriticalSymbol
- MergeLinesByVertAlignType() - объединяем линии с определенными eVertAlignType
- DeleteTextClipPage() - удаление линий вне страницы (1 цикл m_arTextLine)
- DetermineTextColumns() - определяем колонки текста и добавляем в таблицу (в разработке)
- BuildLines() - собираем из символов слова, добавляем пробелы
- DetermineDominantGraphics() - нужно, чтобы выделить шейп, который будет использоваться в качестве шейдинга параграфа (2 вложенных цикла m_arTextLine - m_arConts)
- BuildParagraphes() - собираем из текстовых строк параграфы/шейпы и добавляем в m_arOutputObjects
III Этап ToXml