mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
Fix bug 76926
This commit is contained in:
@ -21,12 +21,10 @@ namespace NSDocxRenderer
|
|||||||
}
|
}
|
||||||
void CDocument::Clear()
|
void CDocument::Clear()
|
||||||
{
|
{
|
||||||
|
m_oPageBuilder.Clear();
|
||||||
NewPage();
|
NewPage();
|
||||||
|
|
||||||
for(auto& val : m_mapXmlString)
|
m_arXmlString.clear();
|
||||||
delete val.second;
|
|
||||||
|
|
||||||
m_mapXmlString.clear();
|
|
||||||
m_lCurrentCommandType = 0;
|
m_lCurrentCommandType = 0;
|
||||||
m_oImageManager.Clear();
|
m_oImageManager.Clear();
|
||||||
m_oFontStyleManager.Clear();
|
m_oFontStyleManager.Clear();
|
||||||
@ -568,11 +566,16 @@ namespace NSDocxRenderer
|
|||||||
m_lCurrentCommandType = -1;
|
m_lCurrentCommandType = -1;
|
||||||
m_oCurrentPage.m_lCurrentCommand = m_lCurrentCommandType;
|
m_oCurrentPage.m_lCurrentCommand = m_lCurrentCommandType;
|
||||||
|
|
||||||
auto pWriter = new NSStringUtils::CStringBuilder();
|
if (0 == m_oPageBuilder.GetSize())
|
||||||
pWriter->AddSize(100000);
|
m_oPageBuilder.AddSize(100000);
|
||||||
|
m_oPageBuilder.ClearNoAttack();
|
||||||
|
|
||||||
m_oCurrentPage.Analyze();
|
m_oCurrentPage.Analyze();
|
||||||
m_oCurrentPage.Record(*pWriter, m_lPageNum >= m_lNumberPages - 1);
|
m_oCurrentPage.Record(m_oPageBuilder, m_lPageNum >= m_lNumberPages - 1);
|
||||||
m_mapXmlString[m_lPageNum] = pWriter;
|
m_arXmlString.push_back(NSFile::CUtf8Converter::GetUtf8StringFromUnicode2(m_oPageBuilder.GetBuffer(), (LONG)m_oPageBuilder.GetCurSize()));
|
||||||
|
|
||||||
|
if (m_oPageBuilder.GetCurSize() > 100000000/*100Mb*/)
|
||||||
|
m_oPageBuilder.Clear();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
m_oCurrentPage.EndCommand(lType);
|
m_oCurrentPage.EndCommand(lType);
|
||||||
@ -867,9 +870,9 @@ namespace NSDocxRenderer
|
|||||||
mc:Ignorable=\"w14 w15 w16se w16cid w16 w16cex w16sdtdh wp14\">\
|
mc:Ignorable=\"w14 w15 w16se w16cid w16 w16cex w16sdtdh wp14\">\
|
||||||
<w:body>");
|
<w:body>");
|
||||||
|
|
||||||
for (size_t i = 0; i < m_mapXmlString.size(); ++i)
|
for (std::list<std::string>::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"</w:body></w:document>");
|
oDocumentStream.WriteStringUTF8(L"</w:body></w:document>");
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
#include "managers/ImageManager.h"
|
#include "managers/ImageManager.h"
|
||||||
#include "managers/FontStyleManager.h"
|
#include "managers/FontStyleManager.h"
|
||||||
#include "managers/ParagraphStyleManager.h"
|
#include "managers/ParagraphStyleManager.h"
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
|
||||||
namespace NSDocxRenderer
|
namespace NSDocxRenderer
|
||||||
@ -40,7 +41,8 @@ namespace NSDocxRenderer
|
|||||||
|
|
||||||
bool m_bIsDisablePageCommand {false}; // disable commands inside draw function
|
bool m_bIsDisablePageCommand {false}; // disable commands inside draw function
|
||||||
|
|
||||||
std::map<LONG, NSStringUtils::CStringBuilder*> m_mapXmlString;
|
NSStringUtils::CStringBuilder m_oPageBuilder;
|
||||||
|
std::list<std::string> m_arXmlString;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDocument(IRenderer* pRenderer, NSFonts::IApplicationFonts* pFonts);
|
CDocument(IRenderer* pRenderer, NSFonts::IApplicationFonts* pFonts);
|
||||||
|
|||||||
Reference in New Issue
Block a user