#ifndef HEADER_FOOTER_WRITER #define HEADER_FOOTER_WRITER #include "../../XlsxSerializerCom/Common/Common.h" namespace Writers { class ContentWriter { public: XmlUtils::CStringWriter m_oContent; XmlUtils::CStringWriter m_oSecPr; }; class HdrFtrItem { public: HdrFtrItem(SimpleTypes::EHdrFtr _eType) { eType = _eType; } bool IsEmpty() { return m_sFilename.IsEmpty(); } CString m_sFilename; ContentWriter Header; CString rId; SimpleTypes::EHdrFtr eType; }; static CString g_string_hdr_Start = _T(""); static CString g_string_hdr_End = _T(""); static CString g_string_ftr_Start = _T(""); static CString g_string_ftr_End = _T(""); class HeaderFooterWriter { CString m_sDir; ContentTypesWriter& m_oContentTypesWriter; public: std::vector m_aHeaders; std::vector m_aFooters; public: HeaderFooterWriter(CString sDir, ContentTypesWriter& oContentTypesWriter):m_sDir(sDir),m_oContentTypesWriter(oContentTypesWriter) { } ~HeaderFooterWriter() { for(int i = 0, length = m_aHeaders.size(); i < length; ++i) delete m_aHeaders[i]; m_aHeaders.clear(); for(int i = 0, length = m_aFooters.size(); i < length; ++i) delete m_aFooters[i]; m_aFooters.clear(); } void Write() { for(int i = 0, length = m_aHeaders.size(); i < length; ++i) { HdrFtrItem* pHeader = m_aHeaders[i]; WriteItem(_T("header"), pHeader->m_sFilename, pHeader->Header, true); } for(int i = 0, length = m_aFooters.size(); i < length; ++i) { HdrFtrItem* pFooter = m_aFooters[i]; WriteItem(_T("footer"), pFooter->m_sFilename, pFooter->Header, false); } } void WriteItem(CString sHeader, CString& sFilename, ContentWriter& m_oWriter, bool bHeader) { OOX::CPath filePath = m_sDir + FILE_SEPARATOR_STR +_T("word") + FILE_SEPARATOR_STR + sFilename; CFile oFile; oFile.CreateFile(filePath.GetPath()); if(bHeader) oFile.WriteStringUTF8(g_string_hdr_Start); else oFile.WriteStringUTF8(g_string_ftr_Start); oFile.WriteStringUTF8(m_oWriter.m_oContent.GetData()); if(bHeader) oFile.WriteStringUTF8(g_string_hdr_End); else oFile.WriteStringUTF8(g_string_ftr_End); oFile.CloseFile(); //Content_Types m_oContentTypesWriter.AddOverride(_T("/word/") + sFilename, _T("application/vnd.openxmlformats-officedocument.wordprocessingml.")+sHeader+_T("+xml")); //Rels //return m_oDocumentRelsWriter.AddRels(_T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/") + sHeader, sFilename); } }; } #endif // #ifndef HEADER_FOOTER_WRITER