diff --git a/DocxRenderer/src/logic/Document.cpp b/DocxRenderer/src/logic/Document.cpp
index 4420d950d2..ff3b0bf0df 100644
--- a/DocxRenderer/src/logic/Document.cpp
+++ b/DocxRenderer/src/logic/Document.cpp
@@ -21,12 +21,10 @@ namespace NSDocxRenderer
}
void CDocument::Clear()
{
+ m_oPageBuilder.Clear();
NewPage();
- for(auto& val : m_mapXmlString)
- delete val.second;
-
- m_mapXmlString.clear();
+ m_arXmlString.clear();
m_lCurrentCommandType = 0;
m_oImageManager.Clear();
m_oFontStyleManager.Clear();
@@ -568,11 +566,16 @@ namespace NSDocxRenderer
m_lCurrentCommandType = -1;
m_oCurrentPage.m_lCurrentCommand = m_lCurrentCommandType;
- auto pWriter = new NSStringUtils::CStringBuilder();
- pWriter->AddSize(100000);
+ if (0 == m_oPageBuilder.GetSize())
+ m_oPageBuilder.AddSize(100000);
+ m_oPageBuilder.ClearNoAttack();
+
m_oCurrentPage.Analyze();
- m_oCurrentPage.Record(*pWriter, m_lPageNum >= m_lNumberPages - 1);
- m_mapXmlString[m_lPageNum] = pWriter;
+ m_oCurrentPage.Record(m_oPageBuilder, m_lPageNum >= m_lNumberPages - 1);
+ m_arXmlString.push_back(NSFile::CUtf8Converter::GetUtf8StringFromUnicode2(m_oPageBuilder.GetBuffer(), (LONG)m_oPageBuilder.GetCurSize()));
+
+ if (m_oPageBuilder.GetCurSize() > 100000000/*100Mb*/)
+ m_oPageBuilder.Clear();
}
else
m_oCurrentPage.EndCommand(lType);
@@ -867,9 +870,9 @@ namespace NSDocxRenderer
mc:Ignorable=\"w14 w15 w16se w16cid w16 w16cex w16sdtdh wp14\">\
");
- for (size_t i = 0; i < m_mapXmlString.size(); ++i)
+ for (std::list::const_iterator i = m_arXmlString.cbegin(); i != m_arXmlString.cend(); ++i)
{
- oDocumentStream.WriteStringUTF8(m_mapXmlString[i]->GetData());
+ oDocumentStream.WriteFile((const BYTE*)i->c_str(), (LONG)i->length());
}
oDocumentStream.WriteStringUTF8(L"");
diff --git a/DocxRenderer/src/logic/Document.h b/DocxRenderer/src/logic/Document.h
index da4c07b199..ed0e966530 100644
--- a/DocxRenderer/src/logic/Document.h
+++ b/DocxRenderer/src/logic/Document.h
@@ -5,6 +5,7 @@
#include "managers/ImageManager.h"
#include "managers/FontStyleManager.h"
#include "managers/ParagraphStyleManager.h"
+#include
namespace NSDocxRenderer
@@ -40,7 +41,8 @@ namespace NSDocxRenderer
bool m_bIsDisablePageCommand {false}; // disable commands inside draw function
- std::map m_mapXmlString;
+ NSStringUtils::CStringBuilder m_oPageBuilder;
+ std::list m_arXmlString;
public:
CDocument(IRenderer* pRenderer, NSFonts::IApplicationFonts* pFonts);