From cec10b705800380bdddf5d130c5545d954002451 Mon Sep 17 00:00:00 2001 From: Alexey Nagaev Date: Wed, 10 Dec 2025 15:58:50 +0300 Subject: [PATCH] Fix problem with shape top and height --- DocxRenderer/src/logic/Page.cpp | 5 +++-- DocxRenderer/src/logic/elements/ContText.cpp | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/DocxRenderer/src/logic/Page.cpp b/DocxRenderer/src/logic/Page.cpp index b13ae5ce46..82aee2ab1b 100644 --- a/DocxRenderer/src/logic/Page.cpp +++ b/DocxRenderer/src/logic/Page.cpp @@ -1606,7 +1606,8 @@ namespace NSDocxRenderer // lamda to setup and add paragpraph auto add_paragraph = [this, &max_right, &min_left, &ar_paragraphs] (paragraph_ptr_t& paragraph) { - paragraph->m_dBot = paragraph->m_arTextLines.back()->m_dBotWithMaxDescent; + double additional_bottom = m_arTextLines.front()->m_dTopWithMaxAscent - m_arTextLines.front()->m_dTop; + paragraph->m_dBot = paragraph->m_arTextLines.back()->m_dBot + additional_bottom; paragraph->m_dTop = paragraph->m_arTextLines.front()->m_dTopWithMaxAscent; paragraph->m_dRight = max_right; paragraph->m_dLeft = min_left; @@ -2540,7 +2541,7 @@ namespace NSDocxRenderer pParagraph->m_arTextLines.push_back(pLine); pParagraph->m_dLeft = pLine->m_dLeft; pParagraph->m_dTop = pLine->m_dTopWithMaxAscent; - pParagraph->m_dBot = pLine->m_dBotWithMaxDescent; + pParagraph->m_dBot = pLine->m_dBot + (pLine->m_dTopWithMaxAscent - pLine->m_dTop); pParagraph->m_dWidth = pLine->m_dWidth; pParagraph->m_dHeight = pLine->m_dHeight; pParagraph->m_dRight = pLine->m_dRight; diff --git a/DocxRenderer/src/logic/elements/ContText.cpp b/DocxRenderer/src/logic/elements/ContText.cpp index 1bd13c2477..139f07a022 100644 --- a/DocxRenderer/src/logic/elements/ContText.cpp +++ b/DocxRenderer/src/logic/elements/ContText.cpp @@ -1260,8 +1260,8 @@ namespace NSDocxRenderer double em_height = oMetrics.dEmHeight; double ratio = font_size / em_height * c_dPtToMM; - pCont->m_dTopWithAscent = pCont->m_dBot - (oMetrics.dAscent * ratio) - oMetrics.dBaselineOffset; - pCont->m_dBotWithDescent = pCont->m_dBot + (oMetrics.dDescent * ratio) - oMetrics.dBaselineOffset; + pCont->m_dTopWithAscent = pCont->m_dBot - (oMetrics.dAscent * ratio); + pCont->m_dBotWithDescent = pCont->m_dBot + (oMetrics.dDescent * ratio); pCont->m_dSpaceWidthMM = pFontManager->GetSpaceWidthMM(); pCont->m_wsOriginFontName = oFont.Name;