Fix ToBin function

This commit is contained in:
Alexey Nagaev
2025-05-26 18:02:56 +03:00
parent 0b79502804
commit c140c6ef6a
3 changed files with 61 additions and 5 deletions

View File

@ -1101,7 +1101,6 @@ namespace NSDocxRenderer
//Условие пересечения по горизонтали
bool bIf3 = h_type != eHorizontalCrossingType::hctUnknown &&
h_type != eHorizontalCrossingType::hctCurrentLeftOfNext &&
h_type != eHorizontalCrossingType::hctNoCrossingCurrentLeftOfNext &&
h_type != eHorizontalCrossingType::hctNoCrossingCurrentRightOfNext;

View File

@ -154,7 +154,7 @@ namespace NSDocxRenderer
oWriter.WriteString(L"<a:spcAft>");
oWriter.WriteString(L"<a:spcPts val=\"");
oWriter.AddInt(static_cast<int>(m_dSpaceBefore * c_dMMToPt * 100));
oWriter.AddInt(static_cast<int>(m_dSpaceAfter * c_dMMToPt * 100));
oWriter.WriteString(L"\"/>");
oWriter.WriteString(L"</a:spcAft>");
@ -176,7 +176,64 @@ namespace NSDocxRenderer
[this, &oWriter] () {
oWriter.StartRecord(0);
oWriter.WriteBYTE(kBin_g_nodeAttributeStart);
oWriter.WriteBYTE(0);
switch (m_eTextAlignmentType)
{
case tatByCenter:
oWriter.WriteBYTE(0);
break;
case tatByRight:
oWriter.WriteBYTE(5);
break;
case tatByWidth:
oWriter.WriteBYTE(2);
break;
case tatByLeft: // fallthrough
case tatUnknown: // fallthrough
default:
oWriter.WriteBYTE(4);
break;
}
if (m_bIsNeedFirstLineIndent)
{
oWriter.WriteBYTE(5);
oWriter.AddSInt(static_cast<int>(m_dFirstLine * c_dMMToEMU));
}
oWriter.WriteBYTE(kBin_g_nodeAttributeEnd);
const int max_value = 158400;
// line spacing
oWriter.StartRecord(0);
oWriter.WriteBYTE(kBin_g_nodeAttributeStart);
int height_value = static_cast<int>(m_dLineHeight * c_dMMToPt * 100);
if (fabs(height_value) > max_value)
height_value > 0 ? height_value = max_value : height_value = -max_value;
oWriter.WriteBYTE(1); oWriter.AddSInt(static_cast<int>(height_value));
oWriter.WriteBYTE(kBin_g_nodeAttributeEnd);
oWriter.EndRecord();
// space after
oWriter.StartRecord(1);
oWriter.WriteBYTE(kBin_g_nodeAttributeStart);
int after_value = static_cast<int>(m_dSpaceAfter * c_dMMToPt * 100);
if (fabs(after_value) > max_value)
after_value > 0 ? after_value = max_value : after_value = -max_value;
oWriter.WriteBYTE(1); oWriter.AddSInt(static_cast<int>(after_value));
oWriter.WriteBYTE(kBin_g_nodeAttributeEnd);
oWriter.EndRecord();
// space before
oWriter.StartRecord(2);
oWriter.WriteBYTE(kBin_g_nodeAttributeStart);
int before_value = static_cast<int>(m_dSpaceBefore * c_dMMToPt * 100);
if (fabs(before_value) > max_value)
before_value > 0 ? before_value = max_value : before_value = -max_value;
oWriter.WriteBYTE(1); oWriter.AddSInt(static_cast<int>(before_value));
oWriter.WriteBYTE(kBin_g_nodeAttributeEnd);
oWriter.EndRecord();
oWriter.EndRecord();
}();

View File

@ -1109,15 +1109,15 @@ namespace NSDocxRenderer
oWriter.StartRecord(0);
oWriter.AddInt(static_cast<unsigned int>(data.size()));
auto write_coords = [&oWriter] (const CVectorGraphics::CPathCommand& command) {
auto write_coords = [&oWriter, &left, &top] (const CVectorGraphics::CPathCommand& command) {
BYTE byte_count = 0;
oWriter.WriteBYTE(kBin_g_nodeAttributeStart);
for (const auto& point : command.points)
{
oWriter.WriteBYTE(byte_count++);
oWriter.WriteStringUtf16(std::to_wstring(point.x * c_dMMToEMU));
oWriter.WriteStringUtf16(std::to_wstring((point.x - left) * c_dMMToEMU));
oWriter.WriteBYTE(byte_count++);
oWriter.WriteStringUtf16(std::to_wstring(point.y * c_dMMToEMU));
oWriter.WriteStringUtf16(std::to_wstring((point.y - top) * c_dMMToEMU));
}
oWriter.WriteBYTE(kBin_g_nodeAttributeEnd);
};