Files
core/ASCOfficeRtfFile/OOXWriter.cpp

124 lines
5.1 KiB
C++
Raw Blame History

#include "stdafx.h"
#include "OOXWriter.h"
#include "RtfDocument.h"
#include "OOXContentTypesWriter.h"
#include "OOXRelsWriter.h"
#include "OOXDocumentWriter.h"
#include "OOXNumberingWriter.h"
#include "OOXFontTableWriter.h"
#include "OOXStylesWriter.h"
#include "OOXSettingsWriter.h"
#include "OOXThemeWriter.h"
#include "OOXDocPropAppWriter.h"
#include "OOXDocPropCoreWriter.h"
#include "OOXFootnoteWriter.h"
#include "../Common/OfficeFileTemplate.h"
OOXWriter::OOXWriter( RtfDocument& oDocument, CString sPath ):m_oDocument(oDocument),m_sTargetFolder(sPath),m_oRels( _T(""), oDocument ),m_oDocRels( _T("document.xml"), oDocument )
{
nCurFitWidth = PROP_DEF;
m_poFootnoteWriter = NULL;
m_poEndnoteWriter = NULL;
m_sDocumentFolder = _T("word");
m_poDocumentWriter = new OOXDocumentWriter( *this, m_oDocument );
m_poFootnoteWriter = new OOXFootnoteWriter( *this, m_oDocument );
m_poEndnoteWriter = new OOXEndnoteWriter( *this, m_oDocument );
m_poDocPropAppWriter = new OOXDocPropAppWriter( *this, m_oDocument );
m_poDocPropCoreWriter = new OOXDocPropCoreWriter( *this, m_oDocument );
m_poFontTableWriter = new OOXFontTableWriter( *this, m_oDocument );
m_poNumberingWriter = new OOXNumberingWriter( *this, m_oDocument );
m_poSettingsWriter = new OOXSettingsWriter( *this, m_oDocument );
m_poStylesWriter = new OOXStylesWriter( *this, m_oDocument );
}
OOXWriter::~OOXWriter()
{
delete ((OOXDocumentWriter*)m_poDocumentWriter);
delete ((OOXFootnoteWriter*)m_poFootnoteWriter);
delete ((OOXEndnoteWriter*)m_poEndnoteWriter);
delete ((OOXDocPropAppWriter*)m_poDocPropAppWriter);
delete ((OOXDocPropCoreWriter*)m_poDocPropCoreWriter);
delete ((OOXFontTableWriter*)m_poFontTableWriter);
delete ((OOXNumberingWriter*)m_poNumberingWriter);
delete ((OOXSettingsWriter*)m_poSettingsWriter);
delete ((OOXStylesWriter*)m_poStylesWriter);
}
bool OOXWriter::Save()
{
int nItemsCount = ((OOXDocumentWriter*)m_poDocumentWriter)->GetCount();
SaveByItemStart();
for( int i = 0; i < nItemsCount; i++ )
{
SaveByItem();
short shCancel = c_shProgressContinue;
OnProgress( g_cdMaxPercent * i / nItemsCount, &shCancel );
if( c_shProgressCancel == shCancel )
break;
}
return SaveByItemEnd();
}
bool OOXWriter::SaveByItemStart()
{
//((OOXFootnoteWriter*)m_poFootnoteWriter)->Save(m_sTargetFolder + _T("\\") + m_sDocumentFolder);
//((OOXEndnoteWriter*)m_poEndnoteWriter)->Save(m_sTargetFolder + _T("\\") + m_sDocumentFolder);
//if( m_oFootnoteSep->GetCount() )
//{
// oNewParam = oRenderParameter;
// oNewParam.poRels = &poFootnoteWriter->m_oRelsWriter;
// oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
// poFootnoteWriter->AddFootnote( _T("separator"), -1, m_oFootnoteSep->RenderToOOX(oNewParam) );
//}
//if( m_oFootnoteCon->GetCount() )
//{
// oNewParam = oRenderParameter;
// oNewParam.poRels = &poFootnoteWriter->m_oRelsWriter;
// oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
// poFootnoteWriter->AddFootnote( _T("continuationSeparator"), 0, m_oFootnoteCon->RenderToOOX( oNewParam ) );
//}
//if( m_oEndnoteSep->GetCount() )
//{
// oNewParam = oRenderParameter;
// oNewParam.poRels = &poEndnoteWriter->m_oRelsWriter;
// oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
// poEndnoteWriter->AddEndnote( _T("separator"), -1, m_oEndnoteSep->RenderToOOX(oNewParam) );
//}
//if( m_oEndnoteCon->GetCount() )
//{
// oNewParam = oRenderParameter;
// oNewParam.poRels = &poEndnoteWriter->m_oRelsWriter;
// oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
// poEndnoteWriter->AddEndnote( _T("continuationSeparator"), 0, m_oEndnoteSep->RenderToOOX(oNewParam) );
//}
return ((OOXDocumentWriter*)m_poDocumentWriter)->SaveByItemStart( m_sTargetFolder );
}
bool OOXWriter::SaveByItem()
{
return ((OOXDocumentWriter*)m_poDocumentWriter)->SaveByItem();
}
bool OOXWriter::SaveByItemEnd()
{
OOXThemeWriter oThemeWr(*this, m_oDocument);
oThemeWr.Save(m_sTargetFolder);
((OOXDocumentWriter*)m_poDocumentWriter)->SaveByItemEnd();
((OOXFootnoteWriter*)m_poFootnoteWriter)->Save(m_sTargetFolder + _T("\\") + m_sDocumentFolder);
((OOXEndnoteWriter*)m_poEndnoteWriter)->Save(m_sTargetFolder + _T("\\") + m_sDocumentFolder);
((OOXNumberingWriter*)m_poNumberingWriter)->Save(m_sTargetFolder);
((OOXStylesWriter*)m_poStylesWriter)->Save(m_sTargetFolder);
((OOXFontTableWriter*)m_poFontTableWriter)->Save(m_sTargetFolder);
((OOXDocPropAppWriter*)m_poDocPropAppWriter)->Save(m_sTargetFolder);
((OOXDocPropCoreWriter*)m_poDocPropCoreWriter)->Save(m_sTargetFolder);
((OOXSettingsWriter*)m_poSettingsWriter)->Save(m_sTargetFolder); //setting <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool nResult = true;
nResult &= m_oContentTypes.Save(m_sTargetFolder);
nResult &= m_oRels.Save(m_sTargetFolder);
nResult &= m_oDocRels.Save(m_sTargetFolder + _T("\\") + m_sDocumentFolder);
for( int i = 0; i < (int)m_oCustomRelsWriter.GetCount(); i++ )
m_oCustomRelsWriter[i]->Save(m_sTargetFolder + _T("\\") + m_sDocumentFolder);
return nResult;
}