Skip to content

Latest commit

 

History

History

DocxRenderer

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Логика описана в CPage::ProcessingAndRecordingOfPageData

I Этап

  1. Собираются шейпы с векторной графикой (DrawPath -> m_arShapes)
  • Копируются текущие Pen и Brush,
  • определяется тип шейпа VectorTexture или VectorGraphics
  • первоначально определяем положение на стронице (перед текстом/позади текста - пока плохо работает, когда удалялись белые прямоугольники было лучше)
  • задаются геометрические параметры
  • определяется тип графики (Rectangle, Curve, ComplicatedFigure, NoGraphics) и подтип (LongDash, Dash, Dot, Wave)
  1. Собираются шейпы-картинки (WriteImage -> m_arImages)
  • задаются геометрические параметры и тип шейпа Picture
  1. Собираются буквы и сразу распределются по текстовым линиям. Отдельно собираются 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 с сортировкой вектора)
  1. 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