diff --git a/ASCOfficeDocxFile2/ASCOfficeDocxFile2.rc b/ASCOfficeDocxFile2/ASCOfficeDocxFile2.rc index 1f5b2ffc02..3c3b8f7162 100644 --- a/ASCOfficeDocxFile2/ASCOfficeDocxFile2.rc +++ b/ASCOfficeDocxFile2/ASCOfficeDocxFile2.rc @@ -137,11 +137,11 @@ END // Generated from the TEXTINCLUDE 3 resource. // -IDB_DEFAULT_DOC_RELS DOCXWR "Resources\\.rels" -IDB_DEFAULT_DOC_APP DOCXWR "Resources\\app.xml" -IDB_DEFAULT_DOC_CORE DOCXWR "Resources\\core.xml" -IDB_DEFAULT_DOC_THEME DOCXWR "Resources\\theme.xml" -IDB_DEFAULT_DOC_WEBSETTINGS DOCXWR "Resources\\webSettings.xml" +//IDB_DEFAULT_DOC_RELS DOCXWR "Resources\\.rels" +//IDB_DEFAULT_DOC_APP DOCXWR "Resources\\app.xml" +//IDB_DEFAULT_DOC_CORE DOCXWR "Resources\\core.xml" +//IDB_DEFAULT_DOC_THEME DOCXWR "Resources\\theme.xml" +//IDB_DEFAULT_DOC_WEBSETTINGS DOCXWR "Resources\\webSettings.xml" IDB_DEFAULT_XLSX_THEME XLSXSER "..\\XlsxSerializerCom\\Resource\\theme1.xml" IDB_XML_NOTESTHEME PPTXW "..\\ASCOfficePPTXFile\\Editor\\ResourceFiles\\notesTheme.xml" IDB_XML_NOTESMASTER PPTXW "..\\ASCOfficePPTXFile\\Editor\\ResourceFiles\\notesMaster.xml" diff --git a/ASCOfficeDocxFile2/BinReader/DefaultThemeWriter.h b/ASCOfficeDocxFile2/BinReader/DefaultThemeWriter.h new file mode 100644 index 0000000000..9db6fb257f Binary files /dev/null and b/ASCOfficeDocxFile2/BinReader/DefaultThemeWriter.h differ diff --git a/ASCOfficeDocxFile2/BinReader/DocumentRelsWriter.h b/ASCOfficeDocxFile2/BinReader/DocumentRelsWriter.h index e11dfaecc0..14ceb5602b 100644 --- a/ASCOfficeDocxFile2/BinReader/DocumentRelsWriter.h +++ b/ASCOfficeDocxFile2/BinReader/DocumentRelsWriter.h @@ -9,58 +9,29 @@ namespace Writers { XmlUtils::CStringWriter m_oWriter; CString m_sDir; - int m_nRid; - std::vector m_aRels; - bool bDocumentRels; public: - DocumentRelsWriter(CString sDir, bool bDocumentRels, int nRid = 1):m_sDir(sDir),bDocumentRels(bDocumentRels) + DocumentRelsWriter(CString sDir):m_sDir(sDir) { - m_nRid = nRid; } - void Write(CString sFileName) + void Write() { - CString s_dr_Start; - CString s_dr_End; - if(true == bDocumentRels) - { - s_dr_Start = _T(""); - s_dr_End = _T(""); - } - else - { - s_dr_Start = _T(""); - s_dr_End = _T(""); - } - if(m_nRid > 1) - { - m_oWriter.WriteString(s_dr_Start); - for(int i = 0, length = m_aRels.size(); i < length; ++i) - { - m_oWriter.WriteString(m_aRels[i]); - } - m_oWriter.WriteString(s_dr_End); + CString s_Common; - OOX::CPath fileName = m_sDir + _T("\\word\\_rels\\") + sFileName; + s_Common = _T(" \ + \ + \ + \ + \ + "); - CFile oFile; - oFile.CreateFile(fileName.GetFilename()); - oFile.WriteStringUTF8(m_oWriter.GetData()); - oFile.CloseFile(); - } - } - CString AddRels(CString sType, CString sTarget, bool bExternal = false) - { - sType = XmlUtils::EncodeXmlString(sType); - sTarget = XmlUtils::EncodeXmlString(sTarget); - CString srId;srId.Format(_T("rId%d"), m_nRid); - CString sRels; - if(bExternal) - sRels.Format(_T(""), srId, sType, sTarget); - else - sRels.Format(_T(""), srId, sType, sTarget); - m_nRid++; - m_aRels.push_back(sRels); - return srId; + m_oWriter.WriteString(s_Common); + + OOX::CPath fileName = m_sDir + _T("\\_rels\\.rels"); + + CFile oFile; + oFile.CreateFile(fileName.GetPath()); + oFile.WriteStringUTF8(m_oWriter.GetData()); + oFile.CloseFile(); } }; } diff --git a/ASCOfficeDocxFile2/BinReader/FileWriter.h b/ASCOfficeDocxFile2/BinReader/FileWriter.h index 36cab17d5a..c7530fe70b 100644 --- a/ASCOfficeDocxFile2/BinReader/FileWriter.h +++ b/ASCOfficeDocxFile2/BinReader/FileWriter.h @@ -10,6 +10,10 @@ #include "SettingWriter.h" #include "CommentsWriter.h" #include "ChartWriter.h" +#include "ChartWriter.h" +#include "DocumentRelsWriter.h" +#include "webSettingsWriter.h" +#include "DefaultThemeWriter.h" namespace BinDocxRW { class CComments; @@ -33,6 +37,9 @@ namespace Writers SettingWriter m_oSettingWriter; CommentsWriter m_oCommentsWriter; ChartWriter m_oChartWriter; + DocumentRelsWriter m_oDocumentRelsWriter; + WebSettingsWriter m_oWebSettingsWriter; + DefaultThemeWriter m_oDefaultTheme; int m_nDocPrIndex; BinDocxRW::CComments* m_pComments; @@ -48,6 +55,9 @@ namespace Writers m_oSettingWriter(sDirOutput, m_oHeaderFooterWriter), m_oCommentsWriter(sDirOutput, m_oContentTypesWriter), m_oChartWriter(sDirOutput, m_oContentTypesWriter), + m_oDocumentRelsWriter(sDirOutput), + m_oWebSettingsWriter(sDirOutput), + m_oDefaultTheme(sDirOutput), m_nDocPrIndex(0), m_pComments(NULL) { diff --git a/ASCOfficeDocxFile2/BinReader/Readers.h b/ASCOfficeDocxFile2/BinReader/Readers.h index 4c3f3c9f87..4bb5ff369a 100644 --- a/ASCOfficeDocxFile2/BinReader/Readers.h +++ b/ASCOfficeDocxFile2/BinReader/Readers.h @@ -5549,37 +5549,38 @@ public: { if(false == m_oFileWriter.m_bSaveChartAsImg) { - // rels - CString sChartsDir; - sChartsDir.Format(_T("%ls\\word\\charts"), m_oFileWriter.m_oChartWriter.m_sDir); - if( !NSDirectory::Exists(string2std_string(sChartsDir)) ) - OOX::CSystemUtility::CreateDirectories(sChartsDir); - CString sRelsDir; - sRelsDir.Format(_T("%ls\\_rels"), sChartsDir); - if( !NSDirectory::Exists(string2std_string(sRelsDir)) ) - OOX::CSystemUtility::CreateDirectories(sRelsDir); + OOX::CPath pathChartsDir = m_oFileWriter.m_oChartWriter.m_sDir + _T("\\word\\charts"); + OOX::CSystemUtility::CreateDirectories(pathChartsDir.GetPath()); + + OOX::CPath pathChartsRelsDir = pathChartsDir.GetPath() + _T("\\_rels"); + OOX::CSystemUtility::CreateDirectories(pathChartsRelsDir.GetPath()); + m_oFileWriter.m_pDrawingConverter->SetDstContentRels(); CString sThemeDir; - int nIndex = m_oFileWriter.m_sThemePath.ReverseFind('\\'); + int nIndex = m_oFileWriter.m_sThemePath.ReverseFind(FILE_SEPARATOR_CHAR); if(-1 != nIndex) sThemeDir = m_oFileWriter.m_sThemePath.Left(nIndex); - BinXlsxRW::SaveParams oSaveParams(sThemeDir); - BinXlsxRW::BinaryChartReader oBinaryChartReader(m_oBufferedStream, oSaveParams, m_oFileWriter.m_pDrawingConverter); + + BinXlsxRW::SaveParams oSaveParams(sThemeDir); + BinXlsxRW::BinaryChartReader oBinaryChartReader(m_oBufferedStream, oSaveParams, m_oFileWriter.m_pDrawingConverter); + OOX::Spreadsheet::CChartSpace* pChartSpace = new OOX::Spreadsheet::CChartSpace(); oBinaryChartReader.ReadCT_ChartSpace(length, &pChartSpace->m_oChartSpace); XmlUtils::CStringWriter sw; pChartSpace->toXML(sw); + CString sChartContent = sw.GetData(); CString sFilename; CString sRelsName; int nChartIndex; + m_oFileWriter.m_oChartWriter.AddChart(sChartContent, sRelsName, sFilename, nChartIndex); m_oFileWriter.m_oContentTypesWriter.AddOverrideRaw(oSaveParams.sAdditionalContentTypes); - CString sRelsPath;sRelsPath.Format(_T("%ls\\%ls.rels"), sRelsDir, sFilename); - m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(sRelsPath); + OOX::CPath pathChartsRels = pathChartsRelsDir.GetPath() + _T("\\") + sFilename + _T(".rels"); + m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(pathChartsRels.GetPath()); long rId; CString bstrChartRelType = OOX::Spreadsheet::FileTypes::Charts.RelationType(); @@ -5946,7 +5947,7 @@ int Binary_HdrFtrTableReader::ReadHdrFtrItem(BYTE type, long length, void* poRes OOX::CPath fileRelsPath = m_oFileWriter.m_oDocumentWriter.m_sDir + _T("\\word\\_rels\\") + poHdrFtrItem->m_sFilename + _T(".rels"); - m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetFilename()); + m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetPath()); } } else @@ -6159,7 +6160,7 @@ public: BinaryFileReader(CString& sFileInDir, NSBinPptxRW::CBinaryFileReader& oB m_oFileWriter.m_pDrawingConverter->WriteRels(CString(_T("http://schemas.microsoft.com/office/2011/relationships/people")), CString(_T("people.xml")), CString(), &rId); } - m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetFilename()); + m_oFileWriter.m_pDrawingConverter->SaveDstContentRels(fileRelsPath.GetPath()); if(c_oSerConstants::ReadOk != res) return res; } diff --git a/ASCOfficeDocxFile2/BinReader/webSettingsWriter.h b/ASCOfficeDocxFile2/BinReader/webSettingsWriter.h new file mode 100644 index 0000000000..9d1f17334f --- /dev/null +++ b/ASCOfficeDocxFile2/BinReader/webSettingsWriter.h @@ -0,0 +1,36 @@ +#ifndef WEB_SETTINGS_WRITER +#define WEB_SETTINGS_WRITER + +#include "../../XlsxSerializerCom/Common/Common.h" + +namespace Writers +{ + class WebSettingsWriter + { + XmlUtils::CStringWriter m_oWriter; + CString m_sDir; + public: + WebSettingsWriter(CString sDir):m_sDir(sDir) + { + } + void Write() + { + CString s_Common; + + s_Common = _T(" \ + \ + \ + "); + + m_oWriter.WriteString(s_Common); + + OOX::CPath fileName = m_sDir + _T("\\word\\webSettings.xml"); + + CFile oFile; + oFile.CreateFile(fileName.GetPath()); + oFile.WriteStringUTF8(m_oWriter.GetData()); + oFile.CloseFile(); + } + }; +} +#endif // #ifndef WEB_SETTINGS_WRITER diff --git a/ASCOfficeDocxFile2/DocWrapper/DocxSerializer.cpp b/ASCOfficeDocxFile2/DocWrapper/DocxSerializer.cpp index f050080f9f..3292954ec5 100644 --- a/ASCOfficeDocxFile2/DocWrapper/DocxSerializer.cpp +++ b/ASCOfficeDocxFile2/DocWrapper/DocxSerializer.cpp @@ -35,11 +35,13 @@ bool BinDocxRW::CDocxSerializer::ConvertDocxToDoct(const CString& sSrcFileName, } bool BinDocxRW::CDocxSerializer::ConvertDoctToDocx(const CString& sSrcFileName, const CString& sDstFileName, const CString& sTmpDir, const CString& sXMLOptions, const CString& sThemePath, const CString& sMediaPath) { - std::wstring strDirSrc = NSSystemPath::Combine(string2std_string(sTmpDir), _T("from")); - std::wstring strEditorBin = NSSystemPath::Combine(strDirSrc, _T("Editor.bin")); - std::wstring strDirDst = NSSystemPath::Combine(string2std_string(sTmpDir), _T("to")); + std::wstring strDirSrc = NSSystemPath::Combine(string2std_string(sTmpDir), _T("from")); + std::wstring strEditorBin = NSSystemPath::Combine(strDirSrc, _T("Editor.bin")); + std::wstring strDirDst = NSSystemPath::Combine(string2std_string(sTmpDir), _T("to")); + NSDirectory::CreateDirectory(strDirSrc); NSDirectory::CreateDirectory(strDirDst); + CString sEditorBin = std_string2string(strEditorBin); CString sDirDst = std_string2string(strDirDst); COfficeUtils oCOfficeUtils(NULL); @@ -51,10 +53,10 @@ bool BinDocxRW::CDocxSerializer::ConvertDoctToDocx(const CString& sSrcFileName, } bool BinDocxRW::CDocxSerializer::saveToFile(const CString& sSrcFileName, const CString& sDstPath, const CString& sXMLOptions) { - //create mediadir - OOX::CPath path(sSrcFileName); - CString mediaDir = path.GetDirectory() + _T("media/"); - NSDirectory::CreateDirectory(string2std_string(mediaDir)); + OOX::CPath pathMain(sSrcFileName); + + OOX::CPath pathMedia = pathMain.GetDirectory() + FILE_SEPARATOR_STR + _T("media"); + NSDirectory::CreateDirectory(string2std_string(pathMedia.GetPath())); COfficeFontPicker* pFontPicker = new COfficeFontPicker(); pFontPicker->Init(m_sFontDir); @@ -86,8 +88,10 @@ bool BinDocxRW::CDocxSerializer::saveToFile(const CString& sSrcFileName, const C oDrawingConverter.SetFontDir(m_sFontDir); oDrawingConverter.SetFontPicker(pFontPicker); oDrawingConverter.SetMainDocument(this); - oDrawingConverter.SetMediaDstPath(mediaDir); + oDrawingConverter.SetMediaDstPath(pathMedia.GetPath()); + ParamsWriter oParamsWriter(&oBufferedStream, &fp, &oDrawingConverter, pEmbeddedFontsManager); + m_oBinaryFileWriter = new BinaryFileWriter(oParamsWriter); m_oBinaryFileWriter->intoBindoc(sDstPath); BYTE* pbBinBuffer = oBufferedStream.GetBuffer(); @@ -118,9 +122,38 @@ bool BinDocxRW::CDocxSerializer::saveToFile(const CString& sSrcFileName, const C RELEASEOBJECT(pFontPicker); return true; } +void BinDocxRW::CDocxSerializer::CreateDocxFolders(CString strDirectory, CString& sThemePath, CString& sMediaPath) +{ + // rels + OOX::CPath pathRels = strDirectory + _T("\\_rels"); + CreateDirectory(pathRels.GetPath(), NULL); + + // word + OOX::CPath pathWord = strDirectory + _T("\\word"); + CreateDirectory(pathWord.GetPath(), NULL); + + // documentRels + OOX::CPath pathWordRels = pathWord.GetPath() + _T("\\_rels"); + CreateDirectory(pathWordRels.GetPath(), NULL); + + //media + OOX::CPath pathMedia = pathWord.GetPath() + _T("\\media"); + sMediaPath = pathMedia.GetPath(); + + // theme + OOX::CPath pathTheme = pathWord.GetPath() + _T("\\theme"); + CreateDirectory(pathTheme.GetPath(), NULL); + + OOX::CPath pathThemeRels = pathTheme.GetPath() + _T("\\_rels"); + CreateDirectory(pathThemeRels.GetPath(), NULL); + + pathTheme = pathTheme.GetPath() + _T("\\theme1.xml"); + sThemePath = pathTheme.GetPath(); +} bool BinDocxRW::CDocxSerializer::loadFromFile(const CString& sSrcFileName, const CString& sDstPath, const CString& sXMLOptions, const CString& sThemePath, const CString& sMediaPath) { bool bResultOk = false; + NSFile::CFileBinary oFile; if(oFile.OpenFile(string2std_string(sSrcFileName))) { @@ -154,7 +187,6 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const CString& sSrcFileName, const BYTE _c = pBase64Data[nIndex]; if (_c == ';') { - if(0 == nType) { nType = 1; @@ -171,8 +203,10 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const CString& sSrcFileName, const else dst_len.AppendChar(_c); } + int nDataSize = atoi(dst_len); BYTE* pData = new BYTE[nDataSize]; + if(FALSE != Base64::Base64Decode((LPCSTR)(pBase64Data + nIndex), nBase64DataSize - nIndex, pData, &nDataSize)) { NSBinPptxRW::CDrawingConverter oDrawingConverter; @@ -207,10 +241,41 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const CString& sSrcFileName, const var.bstrVal = sFileInDir.GetString(); oDrawingConverter.SetAdditionalParam(CString(L"SourceFileDir"), var); #endif - + m_pCurFileWriter->m_oDefaultTheme.Write(); + BinaryFileReader oBinaryFileReader(sFileInDir, oBufferedStream, *m_pCurFileWriter); oBinaryFileReader.ReadFile(); +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + OOX::CContentTypes oContentTypes; + //docProps + OOX::CPath pathDocProps = sDstPath + _T("\\docProps"); + CreateDirectory(pathDocProps.GetPath(), NULL); + + OOX::CPath DocProps = L"docProps"; + OOX::CApp* pApp = new OOX::CApp(); + if (pApp) + { + pApp->SetApplication(_T("OnlyOffice")); + pApp->SetAppVersion(_T("3.0000")); + pApp->SetDocSecurity(0); + pApp->SetScaleCrop(false); + pApp->SetLinksUpToDate(false); + pApp->SetSharedDoc(false); + pApp->SetHyperlinksChanged(false); + + pApp->write(pathDocProps + _T("//app.xml"), DocProps, oContentTypes); + delete pApp; + } + OOX::CCore* pCore = new OOX::CCore(); + if (pCore) + { + pCore->SetCreator(_T("")); + pCore->SetLastModifiedBy(_T("")); + pCore->write(pathDocProps + _T("//core.xml"), DocProps, oContentTypes); + delete pCore; + } +///////////////////////////////////////////////////////////////////////////////////// VARIANT vt; oDrawingConverter.GetAdditionalParam(CString(_T("ContentTypes")), &vt); if(VT_BSTR == vt.vt) @@ -224,10 +289,11 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(const CString& sSrcFileName, const m_pCurFileWriter->m_oHeaderFooterWriter.Write(); //Setting пишем после HeaderFooter, чтобы заполнить evenAndOddHeaders m_pCurFileWriter->m_oSettingWriter.Write(); + m_pCurFileWriter->m_oWebSettingsWriter.Write(); //Document пишем после HeaderFooter, чтобы заполнить sectPr m_pCurFileWriter->m_oDocumentWriter.Write(); //Rels и ContentTypes пишем в конце - //m_pCurFileWriter->m_oDocumentRelsWriter.Write(_T("document.xml.rels")); + m_pCurFileWriter->m_oDocumentRelsWriter.Write(); m_pCurFileWriter->m_oContentTypesWriter.Write(); //CSerializer oSerializer = CSerializer(); diff --git a/ASCOfficeDocxFile2/DocWrapper/DocxSerializer.h b/ASCOfficeDocxFile2/DocWrapper/DocxSerializer.h index 163e93e8e1..c808fbac7a 100644 --- a/ASCOfficeDocxFile2/DocWrapper/DocxSerializer.h +++ b/ASCOfficeDocxFile2/DocWrapper/DocxSerializer.h @@ -8,16 +8,20 @@ #include "../../Common/DocxFormat/Source/Base/ASCString.h" #endif -namespace Writers{ +namespace Writers +{ class FileWriter; } -namespace NSBinPptxRW{ +namespace NSBinPptxRW +{ class CBinaryFileReader; class CBinaryFileWriter; } -namespace BinDocxRW { +namespace BinDocxRW +{ class BinaryFileWriter; - class CDocxSerializer{ + class CDocxSerializer + { private: CString m_sFontDir; CString m_sEmbeddedFontsDir; @@ -29,10 +33,15 @@ namespace BinDocxRW { CDocxSerializer(); bool ConvertDocxToDoct(const CString& sSrcFileName, const CString& sDstFileName, const CString& sTmpDir, const CString& sXMLOptions); bool ConvertDoctToDocx(const CString& sSrcFileName, const CString& sDstFileName, const CString& sTmpDir, const CString& sXMLOptions, const CString& sThemePath, const CString& sMediaPath); + bool loadFromFile(const CString& sSrcFileName, const CString& sDstPath, const CString& sXMLOptions, const CString& sThemePath, const CString& sMediaPath); bool saveToFile(const CString& sSrcFileName, const CString& sDstPath, const CString& sXMLOptions); + + void CreateDocxFolders(CString strDirectory, CString& sThemePath, CString& sMediaPath); + bool getXmlContent(NSBinPptxRW::CBinaryFileReader& oBufferedStream, long lLength, CString& sOutputXml); bool getBinaryContent(const CString& bsTxContent, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize); + void setFontDir(const CString& sFontDir); void setEmbeddedFontsDir(const CString& sEmbeddedFontsDir); void setIsNoBase64Save(bool bIsNoBase64Save); diff --git a/ASCOfficeDocxFile2/DocWrapper/XlsxSerializer.cpp b/ASCOfficeDocxFile2/DocWrapper/XlsxSerializer.cpp index 1597d2ec4f..0e807f3cfd 100644 --- a/ASCOfficeDocxFile2/DocWrapper/XlsxSerializer.cpp +++ b/ASCOfficeDocxFile2/DocWrapper/XlsxSerializer.cpp @@ -116,8 +116,9 @@ namespace BinXlsxRW{ // sThemePath bsFilename theme bsFilename CString sThemePath; CString sFilenameReverse = sFilepath;sFilenameReverse.MakeReverse(); - int nIndex = sFilenameReverse.Find('\\'); - nIndex = sFilenameReverse.Find('\\', nIndex + 1); + + int nIndex = sFilenameReverse.Find(FILE_SEPARATOR_CHAR); + nIndex = sFilenameReverse.Find(FILE_SEPARATOR_CHAR, nIndex + 1); if(-1 != nIndex) sThemePath = sFilepath.Left(sFilepath.GetLength() - nIndex) + _T("theme"); @@ -129,22 +130,20 @@ namespace BinXlsxRW{ if(oChartSpace.isValid()) { - std::wstring strFilepath = string2std_string(sFilepath); - std::wstring strDir = NSSystemPath::GetDirectoryName(strFilepath); - std::wstring strFilename = NSSystemPath::GetFileName(strFilepath); + std::wstring strFilepath = string2std_string(sFilepath); + std::wstring strDir = NSSystemPath::GetDirectoryName(strFilepath); + std::wstring strFilename = NSSystemPath::GetFileName(strFilepath); CString sRelsDir = strDir.c_str(); CString sFilename = strFilename.c_str(); sRelsDir.Append(_T("_rels")); - if( !NSDirectory::Exists(string2std_string(sRelsDir)) ) - OOX::CSystemUtility::CreateDirectories(sRelsDir); + + OOX::CSystemUtility::CreateDirectories(sRelsDir); oChartSpace.write2(sFilepath); - CString sRelsPath; - sRelsPath.Format(_T("%ls\\%ls.rels"), sRelsDir, sFilename); - - m_pExternalDrawingConverter->SaveDstContentRels(sRelsPath); + OOX::CPath pathRelsPath = sRelsDir + FILE_SEPARATOR_STR + sFilename + _T(".rels"); + m_pExternalDrawingConverter->SaveDstContentRels(pathRelsPath.GetPath()); CString sContentType(sContentTypePath); sContentType.Append(sFilename); diff --git a/ASCOfficeDocxFile2/DocxFile2.h b/ASCOfficeDocxFile2/DocxFile2.h index 376dca2f7e..61a34ff4c8 100644 --- a/ASCOfficeDocxFile2/DocxFile2.h +++ b/ASCOfficeDocxFile2/DocxFile2.h @@ -134,8 +134,10 @@ public: CString sDirectoryOut = bstrDirectoryOut; CString sThemePath; CString sMediaPath; - CreateDocument(sDirectoryOut, sThemePath, sMediaPath); + + m_oCDocxSerializer.CreateDocxFolders(sDirectoryOut, sThemePath, sMediaPath); bool bRes = m_oCDocxSerializer.loadFromFile(CString(bstrFileIn), CString(bstrDirectoryOut), CString(_T("")), CString(sThemePath.GetString()), CString(sMediaPath.GetString())); + return bRes ? S_OK : S_FALSE; } STDMETHOD(GetXmlContent)(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, BSTR* bsXml) @@ -147,60 +149,21 @@ public: return bRes ? S_OK : S_FALSE; } private: - void CreateDocument(CString strDirectory, CString& sThemePath, CString& sMediaPath) - { - HINSTANCE hInst = _AtlBaseModule.GetModuleInstance(); + //void LoadResourceFile(HINSTANCE hInst, LPCTSTR sResName, LPCTSTR sResType, const CString& strDstFile) + //{ + // HRSRC hrRes = FindResource(hInst, sResName, sResType); + // if (!hrRes) + // return; - // rels - CString strRels = strDirectory + _T("\\_rels"); - CreateDirectory(strRels, NULL); + // HGLOBAL hGlobal = LoadResource(hInst, hrRes); + // DWORD sz = SizeofResource(hInst, hrRes); + // void* ptrRes = LockResource(hGlobal); - LoadResourceFile(hInst, MAKEINTRESOURCE(IDB_DEFAULT_DOC_RELS), _T("DOCXWR"), strRels + _T("\\.rels")); + // CFile oFile; + // oFile.CreateFile(strDstFile); + // oFile.WriteFile(ptrRes, sz); - - - // docProps - CString strDocProps = strDirectory + _T("\\docProps"); - CreateDirectory(strDocProps, NULL); - - LoadResourceFile(hInst, MAKEINTRESOURCE(IDB_DEFAULT_DOC_APP), _T("DOCXWR"), strDocProps + _T("\\app.xml")); - LoadResourceFile(hInst, MAKEINTRESOURCE(IDB_DEFAULT_DOC_CORE), _T("DOCXWR"), strDocProps + _T("\\core.xml")); - - // word - CString strWord = strDirectory + _T("\\word"); - CreateDirectory(strWord, NULL); - - sMediaPath = strWord + _T("\\media"); - - //LoadResourceFile(hInst, MAKEINTRESOURCE(IDB_DEFAULT_DOC_SETTINGS), _T("DOCXWR"), strWord + _T("\\settings.xml")); - LoadResourceFile(hInst, MAKEINTRESOURCE(IDB_DEFAULT_DOC_WEBSETTINGS), _T("DOCXWR"), strWord + _T("\\webSettings.xml")); - - // theme - CString strTheme = strWord + _T("\\theme"); - CreateDirectory(strTheme, NULL); - CString strThemeRels = strTheme + _T("\\_rels"); - CreateDirectory(strThemeRels, NULL); - sThemePath = strTheme + _T("\\theme1.xml"); - LoadResourceFile(hInst, MAKEINTRESOURCE(IDB_DEFAULT_DOC_THEME), _T("DOCXWR"), sThemePath); - - // documentRels - CreateDirectory(strWord + _T("\\_rels"), NULL); - } - void LoadResourceFile(HINSTANCE hInst, LPCTSTR sResName, LPCTSTR sResType, const CString& strDstFile) - { - HRSRC hrRes = FindResource(hInst, sResName, sResType); - if (!hrRes) - return; - - HGLOBAL hGlobal = LoadResource(hInst, hrRes); - DWORD sz = SizeofResource(hInst, hrRes); - void* ptrRes = LockResource(hGlobal); - - CFile oFile; - oFile.CreateFile(strDstFile); - oFile.WriteFile(ptrRes, sz); - - UnlockResource(hGlobal); - FreeResource(hGlobal); - } + // UnlockResource(hGlobal); + // FreeResource(hGlobal); + //} }; \ No newline at end of file diff --git a/ASCOfficeDocxFile2/PptxFile.h b/ASCOfficeDocxFile2/PptxFile.h index 1d074b190c..96c70fa535 100644 --- a/ASCOfficeDocxFile2/PptxFile.h +++ b/ASCOfficeDocxFile2/PptxFile.h @@ -182,14 +182,16 @@ void comLoadTheme(void* pArg, int nIndex, CString& strDstFolder) CDirectory::CreateDirectory(strDstFolder + _T("\\ppt\\notesMasters")); pCAVSOfficePPTXFile->LoadResourceFile(hInst, MAKEINTRESOURCE(IDB_XML_NOTESMASTER), _T("PPTXW"), strDstFolder + _T("\\ppt\\notesMasters\\notesMaster1.xml")); - CDirectory::CreateDirectory(strDstFolder + _T("\\ppt\\notesMasters\\_rels")); + OOX::CPath pathNotesMasterRels = strDstFolder + _T("\\ppt\\notesMasters\\_rels"); + CDirectory::CreateDirectory(pathNotesMasterRels.GetPath()); + CString strThemeNotesNum = _T(""); strThemeNotesNum.Format(_T("%d"), nIndex); CString strVal = _T("\ \ "); CFile oFileRels; - oFileRels.CreateFile(strDstFolder + _T("\\ppt\\notesMasters\\_rels\\notesMaster1.xml.rels")); + oFileRels.CreateFile(pathNotesMasterRels.GetPath() + FILE_SEPARATOR_STR + _T("notesMaster1.xml.rels")); oFileRels.WriteStringUTF8(strVal); oFileRels.CloseFile(); } diff --git a/ASCOfficeDocxFile2/Resources/.rels b/ASCOfficeDocxFile2/Resources/.rels deleted file mode 100644 index 889dd8fe8d..0000000000 --- a/ASCOfficeDocxFile2/Resources/.rels +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ASCOfficeDocxFile2/Resources/[Content_Types].xml b/ASCOfficeDocxFile2/Resources/[Content_Types].xml deleted file mode 100644 index 009dfcae67..0000000000 --- a/ASCOfficeDocxFile2/Resources/[Content_Types].xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ASCOfficeDocxFile2/Resources/app.xml b/ASCOfficeDocxFile2/Resources/app.xml deleted file mode 100644 index c74ecd680f..0000000000 --- a/ASCOfficeDocxFile2/Resources/app.xml +++ /dev/null @@ -1 +0,0 @@ -1100OnlyOffice011falsefalse0falsefalse3.0000 diff --git a/ASCOfficeDocxFile2/Resources/core.xml b/ASCOfficeDocxFile2/Resources/core.xml deleted file mode 100644 index a033b145cf..0000000000 --- a/ASCOfficeDocxFile2/Resources/core.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ASCOfficeDocxFile2/Resources/theme.xml b/ASCOfficeDocxFile2/Resources/theme.xml deleted file mode 100644 index ec7f51395d..0000000000 --- a/ASCOfficeDocxFile2/Resources/theme.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ASCOfficeDocxFile2/Resources/webSettings.xml b/ASCOfficeDocxFile2/Resources/webSettings.xml deleted file mode 100644 index 060c6417ca..0000000000 --- a/ASCOfficeDocxFile2/Resources/webSettings.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ASCOfficeDocxFile2/XlsxFile2.h b/ASCOfficeDocxFile2/XlsxFile2.h index ad2a4d9b8f..c0ae9eec82 100644 --- a/ASCOfficeDocxFile2/XlsxFile2.h +++ b/ASCOfficeDocxFile2/XlsxFile2.h @@ -56,10 +56,11 @@ public: { } public: - STDMETHOD(LoadFromFile)(BSTR sSrcFileName, BSTR sDstPath, BSTR bstrXMLOptions) + STDMETHOD(LoadFromFile)(BSTR sSrcFileName, BSTR bstrDstPath, BSTR bstrXMLOptions) { - CString sMediaDir = sDstPath; - sMediaDir.Append(_T("\\xl\\media")); + CString sDstPath = bstrDstPath; + OOX::CPath pathMediaDir = sDstPath + _T("\\xl\\media"); + // File Type ( , , ReadFile , ) BYTE fileType; UINT nCodePage; @@ -68,19 +69,22 @@ public: if (BinXlsxRW::c_oFileTypes::CSV != fileType) { - CString sXlDir;sXlDir.Format(_T("%s\\xl"), sDstPath); - CString sThemeDir;sThemeDir.Format(_T("%s\\xl\\%s"), sDstPath, OOX::FileTypes::Theme.DefaultDirectory().GetPath()); - CString sThemePath;sThemePath.Format(_T("%s\\%s"), sThemeDir, OOX::FileTypes::Theme.DefaultFileName().GetPath()); - CString sThemeRelsPath;sThemeRelsPath.Format(_T("%s\\_rels"), sThemeDir); + OOX::CPath pathXlDir = sDstPath + _T("\\xl"); - NSDirectory::CreateDirectory(string2std_string(sXlDir)); - NSDirectory::CreateDirectory(string2std_string(sThemeDir)); - NSDirectory::CreateDirectory(string2std_string(sThemeRelsPath)); - NSDirectory::CreateDirectory(string2std_string(sMediaDir)); + OOX::CPath pathThemeDir = pathXlDir + FILE_SEPARATOR_STR + OOX::FileTypes::Theme.DefaultDirectory().GetPath(); + + OOX::CPath pathThemeFile = pathThemeDir + FILE_SEPARATOR_STR + OOX::FileTypes::Theme.DefaultFileName().GetPath(); + + OOX::CPath pathThemeThemeRelsDir = pathThemeDir + _T("\\_rels"); - CreateTheme(sThemePath); + NSDirectory::CreateDirectory(string2std_string(pathXlDir.GetPath())); + NSDirectory::CreateDirectory(string2std_string(pathThemeDir.GetPath())); + NSDirectory::CreateDirectory(string2std_string(pathThemeThemeRelsDir.GetPath())); + NSDirectory::CreateDirectory(string2std_string(pathMediaDir.GetPath())); + + CreateTheme(pathThemeFile.GetPath()); } - bool bRes = m_oXlsxSerializer.loadFromFile(CString(sSrcFileName), CString(sDstPath), CString(bstrXMLOptions), sMediaDir); + bool bRes = m_oXlsxSerializer.loadFromFile(CString(sSrcFileName), CString(sDstPath), CString(bstrXMLOptions), pathMediaDir.GetPath()); return bRes ? S_OK : S_FALSE; } STDMETHOD(SaveToFile)(BSTR sDstFileName, BSTR sSrcPath, BSTR sXMLOptions) diff --git a/ASCOfficePPTXFile/ASCOfficeDrawingConverter.cpp b/ASCOfficePPTXFile/ASCOfficeDrawingConverter.cpp index b1b87dbbb6..bf98f4f25b 100644 --- a/ASCOfficePPTXFile/ASCOfficeDrawingConverter.cpp +++ b/ASCOfficePPTXFile/ASCOfficeDrawingConverter.cpp @@ -3131,15 +3131,14 @@ HRESULT CDrawingConverter::SaveThemeXml(LONG lStart, LONG lLength, const CString OOX::CPath filename = strThemePath; CString strTemp = filename.GetDirectory() + _T("\\_rels\\"); - CString strFileName = filename.GetFilename(); - if (strFileName == _T("")) - strTemp += _T(".rels"); - else - strTemp += (strFileName + _T(".rels")); + CString strFileName = filename.GetPath(); + + if (strFileName == _T("")) strTemp += _T(".rels"); + else strTemp += (strFileName + _T(".rels")); filename = strTemp; - SaveDstContentRels(filename.GetFilename()); + SaveDstContentRels(filename.GetPath()); m_pXmlWriter->ClearNoAttack(); diff --git a/ASCOfficePPTXFile/Editor/PPTXWriter.h b/ASCOfficePPTXFile/Editor/PPTXWriter.h index 24fe66d1c5..e211ad1873 100644 --- a/ASCOfficePPTXFile/Editor/PPTXWriter.h +++ b/ASCOfficePPTXFile/Editor/PPTXWriter.h @@ -260,11 +260,11 @@ namespace NSBinPptxRW pPair = m_mainTables.find(NSMainTables::Themes); if (m_mainTables.end() != pPair) { - CString strFolder = m_strDstFolder + _T("\\ppt\\theme"); - CString strFolderRels = strFolder + _T("\\_rels"); + OOX::CPath pathFolder = m_strDstFolder + _T("\\ppt\\theme"); + OOX::CPath pathFolderRels = pathFolder.GetPath() + _T("\\_rels"); - FileSystem::Directory::CreateDirectory(strFolder); - FileSystem::Directory::CreateDirectory(strFolderRels); + FileSystem::Directory::CreateDirectory(pathFolder.GetPath()); + FileSystem::Directory::CreateDirectory(pathFolderRels.GetPath()); m_oReader.Seek(pPair->second); m_oReader.Skip(4); @@ -285,14 +285,18 @@ namespace NSBinPptxRW m_arThemes[i].fromPPTY(&m_oReader); CString strMasterXml = _T(""); - strMasterXml.Format(_T("\\theme%d.xml"), i + 1); + strMasterXml.Format(_T("theme%d.xml"), i + 1); oXmlWriter.ClearNoAttack(); m_oReader.m_pRels->CloseRels(); m_arThemes[i].toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(strFolder + strMasterXml); - m_oReader.m_pRels->SaveRels(strFolderRels + strMasterXml + _T(".rels")); + + pathFolder = pathFolder + FILE_SEPARATOR_STR + strMasterXml; + oXmlWriter.SaveToFile(pathFolder.GetPath()); + + pathFolderRels = pathFolderRels + FILE_SEPARATOR_STR + strMasterXml + _T(".rels"); + m_oReader.m_pRels->SaveRels(pathFolderRels.GetPath()); } } @@ -300,11 +304,11 @@ namespace NSBinPptxRW pPair = m_mainTables.find(NSMainTables::SlideMasters); if (m_mainTables.end() != pPair) { - CString strFolder = m_strDstFolder + _T("\\ppt\\slideMasters"); - CString strFolderRels = strFolder + _T("\\_rels"); + OOX::CPath pathFolder = m_strDstFolder + _T("\\ppt\\slideMasters"); + OOX::CPath pathFolderRels = pathFolder + _T("\\_rels"); - FileSystem::Directory::CreateDirectory(strFolder); - FileSystem::Directory::CreateDirectory(strFolderRels); + FileSystem::Directory::CreateDirectory(pathFolder.GetPath()); + FileSystem::Directory::CreateDirectory(pathFolderRels.GetPath()); m_oReader.Seek(pPair->second); m_oReader.Skip(4); @@ -338,13 +342,16 @@ namespace NSBinPptxRW m_oReader.m_pRels->CloseRels(); CString strMasterXml = _T(""); - strMasterXml.Format(_T("\\slideMaster%d.xml"), i + 1); + strMasterXml.Format(_T("slideMaster%d.xml"), i + 1); oXmlWriter.ClearNoAttack(); m_arSlideMasters[i].toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(strFolder + strMasterXml); - m_oReader.m_pRels->SaveRels(strFolderRels + strMasterXml + _T(".rels")); + pathFolder = pathFolder + FILE_SEPARATOR_STR + strMasterXml; + oXmlWriter.SaveToFile(pathFolder.GetPath()); + + pathFolderRels = pathFolderRels + FILE_SEPARATOR_STR + strMasterXml + _T(".rels"); + m_oReader.m_pRels->SaveRels(pathFolderRels.GetPath()); } } @@ -352,11 +359,11 @@ namespace NSBinPptxRW pPair = m_mainTables.find(NSMainTables::SlideLayouts); if (m_mainTables.end() != pPair) { - CString strFolder = m_strDstFolder + _T("\\ppt\\slideLayouts"); - CString strFolderRels = strFolder + _T("\\_rels"); + OOX::CPath pathFolder = m_strDstFolder + _T("\\ppt\\slideLayouts"); + OOX::CPath pathFolderRels = pathFolder + _T("\\_rels"); - FileSystem::Directory::CreateDirectory(strFolder); - FileSystem::Directory::CreateDirectory(strFolderRels); + FileSystem::Directory::CreateDirectory(pathFolder.GetPath()); + FileSystem::Directory::CreateDirectory(pathFolderRels.GetPath()); m_oReader.Seek(pPair->second); m_oReader.Skip(4); @@ -372,13 +379,16 @@ namespace NSBinPptxRW m_oReader.m_pRels->CloseRels(); CString strMasterXml = _T(""); - strMasterXml.Format(_T("\\slideLayout%d.xml"), i + 1); + strMasterXml.Format(_T("slideLayout%d.xml"), i + 1); oXmlWriter.ClearNoAttack(); m_arSlideLayouts[i].toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(strFolder + strMasterXml); - m_oReader.m_pRels->SaveRels(strFolderRels + strMasterXml + _T(".rels")); + pathFolder = pathFolder + FILE_SEPARATOR_STR + strMasterXml; + oXmlWriter.SaveToFile(pathFolder.GetPath()); + + pathFolderRels = pathFolderRels + FILE_SEPARATOR_STR + strMasterXml + _T(".rels"); + m_oReader.m_pRels->SaveRels(pathFolderRels.GetPath()); } } @@ -387,11 +397,11 @@ namespace NSBinPptxRW pPair = m_mainTables.find(NSMainTables::Slides); if (m_mainTables.end() != pPair) { - CString strFolder = m_strDstFolder + _T("\\ppt\\slides"); - CString strFolderRels = strFolder + _T("\\_rels"); + OOX::CPath pathFolder = m_strDstFolder + _T("\\ppt\\slides"); + OOX::CPath pathFolderRels = pathFolder + _T("\\_rels"); - FileSystem::Directory::CreateDirectory (strFolder); - FileSystem::Directory::CreateDirectory (strFolderRels); + FileSystem::Directory::CreateDirectory (pathFolder.GetPath()); + FileSystem::Directory::CreateDirectory (pathFolderRels.GetPath()); m_oReader.Seek(pPair->second); m_oReader.Skip(4); @@ -410,14 +420,17 @@ namespace NSBinPptxRW m_oReader.m_pRels->WriteSlideComments(nComment); if (1 == nComment) { - FileSystem::Directory::CreateDirectory (m_strDstFolder + _T("\\ppt\\comments")); + OOX::CPath pathFolderCommentDir = m_strDstFolder + _T("\\ppt\\comments"); + FileSystem::Directory::CreateDirectory (pathFolderCommentDir.GetPath()); } CString strCommentFile = _T(""); strCommentFile.Format(_T("\\ppt\\comments\\comment%d.xml"), nComment); oXmlWriter.ClearNoAttack(); m_arSlides[i].comments->toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(m_strDstFolder + strCommentFile); + + OOX::CPath pathComment = m_strDstFolder + strCommentFile; + oXmlWriter.SaveToFile(pathComment.GetPath()); ++nComment; } @@ -425,13 +438,16 @@ namespace NSBinPptxRW m_oReader.m_pRels->CloseRels(); CString strMasterXml = _T(""); - strMasterXml.Format(_T("\\slide%d.xml"), i + 1); + strMasterXml.Format(_T("slide%d.xml"), i + 1); oXmlWriter.ClearNoAttack(); m_arSlides[i].toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(strFolder + strMasterXml); - m_oReader.m_pRels->SaveRels(strFolderRels + strMasterXml + _T(".rels")); + pathFolder = pathFolder + FILE_SEPARATOR_STR + strMasterXml; + oXmlWriter.SaveToFile(pathFolder.GetPath()); + + pathFolderRels = pathFolderRels + FILE_SEPARATOR_STR + strMasterXml + _T(".rels"); + m_oReader.m_pRels->SaveRels(pathFolderRels.GetPath()); } } @@ -473,11 +489,11 @@ namespace NSBinPptxRW CreateDefaultNotesMasters((int)m_arThemes.size() + 1); CreateDefaultNote(); - CString strFolder = m_strDstFolder + _T("\\ppt\\notesSlides"); - CString strFolderRels = strFolder + _T("\\_rels"); + OOX::CPath pathFolder = m_strDstFolder + _T("\\ppt\\notesSlides"); + OOX::CPath pathFolderRels = pathFolder + _T("\\_rels"); - FileSystem::Directory::CreateDirectory (strFolder); - FileSystem::Directory::CreateDirectory (strFolderRels); + FileSystem::Directory::CreateDirectory (pathFolder.GetPath()); + FileSystem::Directory::CreateDirectory (pathFolderRels.GetPath()); LONG lCount = (LONG)m_arSlides.size(); for (LONG i = 0; i < lCount; ++i) @@ -487,13 +503,16 @@ namespace NSBinPptxRW m_oReader.m_pRels->CloseRels(); CString strMasterXml = _T(""); - strMasterXml.Format(_T("\\notesSlide%d.xml"), i + 1); + strMasterXml.Format(_T("notesSlide%d.xml"), i + 1); oXmlWriter.ClearNoAttack(); m_oDefaultNote.toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(strFolder + strMasterXml); - m_oReader.m_pRels->SaveRels(strFolderRels + strMasterXml + _T(".rels")); + pathFolder = pathFolder + FILE_SEPARATOR_STR + strMasterXml; + oXmlWriter.SaveToFile(pathFolder.GetPath()); + + pathFolderRels = pathFolderRels + FILE_SEPARATOR_STR + strMasterXml + _T(".rels"); + m_oReader.m_pRels->SaveRels(pathFolderRels.GetPath()); } } @@ -558,22 +577,30 @@ namespace NSBinPptxRW // app oXmlWriter.ClearNoAttack(); m_oApp.toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(m_strDstFolder + _T("\\docProps\\app.xml")); + + OOX::CPath pathApp = m_strDstFolder + _T("\\docProps\\app.xml"); + oXmlWriter.SaveToFile(pathApp.GetPath()); // core oXmlWriter.ClearNoAttack(); m_oCore.toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(m_strDstFolder + _T("\\docProps\\core.xml")); + + OOX::CPath pathCore = m_strDstFolder + _T("\\docProps\\core.xml"); + oXmlWriter.SaveToFile(pathCore.GetPath()); // presProps oXmlWriter.ClearNoAttack(); m_oPresProps.toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(m_strDstFolder + _T("\\ppt\\presProps.xml")); + + OOX::CPath pathPresProps = m_strDstFolder + _T("\\ppt\\presProps.xml"); + oXmlWriter.SaveToFile(pathPresProps.GetPath()); // viewProps oXmlWriter.ClearNoAttack(); m_oViewProps.toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(m_strDstFolder + _T("\\ppt\\viewProps.xml")); + + OOX::CPath pathViewProps = m_strDstFolder + _T("\\ppt\\viewProps.xml"); + oXmlWriter.SaveToFile(pathViewProps.GetPath()); m_oReader.m_pRels->Clear(); m_oReader.m_pRels->StartRels(); @@ -581,17 +608,19 @@ namespace NSBinPptxRW // tablestyles oXmlWriter.ClearNoAttack(); m_oTableStyles.toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(m_strDstFolder + _T("\\ppt\\tableStyles.xml")); + + OOX::CPath pathTableStyles = m_strDstFolder + _T("\\ppt\\tableStyles.xml"); + oXmlWriter.SaveToFile(pathTableStyles.GetPath()); // presentation bool bIsAuthors = false; pPair = m_mainTables.find(NSMainTables::Presentation); if (m_mainTables.end() != pPair) { - CString strFolder = m_strDstFolder + _T("\\ppt"); - CString strFolderRels = strFolder + _T("\\_rels"); + OOX::CPath pathFolder = m_strDstFolder + _T("\\ppt"); + OOX::CPath pathFolderRels = pathFolder + _T("\\_rels"); - FileSystem::Directory::CreateDirectory (strFolderRels); + FileSystem::Directory::CreateDirectory (pathFolderRels.GetPath()); m_oReader.Seek(pPair->second); m_oPresentation.fromPPTY(&m_oReader); @@ -641,15 +670,20 @@ namespace NSBinPptxRW oXmlWriter.ClearNoAttack(); m_oPresentation.toXmlWriter(&oXmlWriter); - oXmlWriter.SaveToFile(strFolder + _T("\\presentation.xml")); - m_oReader.m_pRels->SaveRels(strFolderRels + _T("\\presentation.xml.rels")); + pathFolder = pathFolder + FILE_SEPARATOR_STR + _T("presentation.xml"); + oXmlWriter.SaveToFile(pathFolder.GetPath()); + + pathFolderRels = pathFolderRels + FILE_SEPARATOR_STR + _T("\\presentation.xml.rels"); + m_oReader.m_pRels->SaveRels(pathFolderRels.GetPath()); if (m_oPresentation.commentAuthors.is_init()) { oXmlWriter.ClearNoAttack(); m_oPresentation.commentAuthors->toXmlWriter(&oXmlWriter); + + OOX::CPath pathCommentAuthors = pathFolder + _T("\\commentAuthors.xml"); + oXmlWriter.SaveToFile(pathCommentAuthors.GetPath()); - oXmlWriter.SaveToFile(strFolder + _T("\\commentAuthors.xml")); bIsAuthors = true; } } @@ -659,22 +693,22 @@ namespace NSBinPptxRW // content types CStringWriter oContentTypes; oContentTypes.WriteString(_T("\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -")); + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + ")); // themes for (LONG i = 0; i < (LONG)m_arThemes.size(); ++i) @@ -756,14 +790,13 @@ namespace NSBinPptxRW \ "); - OOX::CPath filePath = m_strDstFolder + _T("\\_rels"); + OOX::CPath filePathRels = m_strDstFolder + _T("\\_rels"); + FileSystem::Directory::CreateDirectory (filePathRels.GetPath()); - FileSystem::Directory::CreateDirectory (filePath.GetFilename()); - - filePath = m_strDstFolder + _T("\\_rels\\.rels"); - - oFile.CreateFile(filePath.GetFilename()); - oFile.WriteStringUTF8(strRELS); + filePathRels = filePathRels + _T("\\.rels"); + + oFile.CreateFile(filePathRels.GetPath()); + oFile.WriteStringUTF8(strRELS); oFile.CloseFile(); } diff --git a/ASCOfficePPTXFile/PPTXFormat/DocxFormat/Rels/File.h b/ASCOfficePPTXFile/PPTXFormat/DocxFormat/Rels/File.h index b24d919d40..735c8c8f7a 100644 --- a/ASCOfficePPTXFile/PPTXFormat/DocxFormat/Rels/File.h +++ b/ASCOfficePPTXFile/PPTXFormat/DocxFormat/Rels/File.h @@ -111,17 +111,13 @@ namespace PPTX private: const OOX::CPath createFileName(const OOX::CPath& filename) const { - CString strTemp = filename.GetDirectory(); - #ifdef _WIN32 - strTemp += _T("\\_rels\\"); - #else - strTemp += _T("/_rels/"); - #endif - if (filename.GetFilename() == _T("")) - strTemp += _T(".rels"); - else - strTemp += (filename.GetFilename() + _T(".rels")); - return strTemp; + CString strTemp = filename.GetDirectory() + _T("\\_rels\\"); + + if (filename.GetFilename() == _T("")) strTemp += _T(".rels"); + else strTemp += (filename.GetFilename() + _T(".rels")); + + OOX::CPath pathTemp = strTemp; + return pathTemp.GetPath(); } public: diff --git a/ASCOfficePPTXFile/PPTXFormat/Logic/CxnSp.h b/ASCOfficePPTXFile/PPTXFormat/Logic/CxnSp.h index 1a49bbb712..13d4f65214 100644 --- a/ASCOfficePPTXFile/PPTXFormat/Logic/CxnSp.h +++ b/ASCOfficePPTXFile/PPTXFormat/Logic/CxnSp.h @@ -97,4 +97,4 @@ namespace PPTX } // namespace Logic } // namespace PPTX -#endif // PPTX_LOGIC_CXNSP_INCLUDE_H +#endif // PPTX_LOGIC_CXNSP_INCLUDE_H \ No newline at end of file diff --git a/Common/DocxFormat/Source/DocxFormat/Rels.h b/Common/DocxFormat/Source/DocxFormat/Rels.h index de4d2d268c..d5dff34837 100644 --- a/Common/DocxFormat/Source/DocxFormat/Rels.h +++ b/Common/DocxFormat/Source/DocxFormat/Rels.h @@ -286,18 +286,13 @@ namespace OOX const CPath CreateFileName(const CPath& oFilePath) const { - CString strTemp; -#ifdef _WIN32 - strTemp = oFilePath.GetDirectory() + _T("\\_rels\\"); -#else - strTemp = oFilePath.GetDirectory() + _T("/_rels/"); -#endif - if ( _T("") == oFilePath.GetFilename() ) - strTemp += _T(".rels"); - else - strTemp += ( oFilePath.GetFilename() + _T(".rels") ); + CString strTemp = oFilePath.GetDirectory() + _T("\\_rels\\"); - return strTemp; + if ( _T("") == oFilePath.GetFilename() ) strTemp += _T(".rels"); + else strTemp += ( oFilePath.GetFilename() + _T(".rels") ); + + CPath pathTemp = strTemp; + return pathTemp.GetPath(); } diff --git a/Common/DocxFormat/Source/SystemUtility/FileSystem/Directory.cpp b/Common/DocxFormat/Source/SystemUtility/FileSystem/Directory.cpp index 25b843f844..0064a21fd1 100644 --- a/Common/DocxFormat/Source/SystemUtility/FileSystem/Directory.cpp +++ b/Common/DocxFormat/Source/SystemUtility/FileSystem/Directory.cpp @@ -36,7 +36,10 @@ namespace FileSystem } bool Directory::CreateDirectory(const String& path) { - return CreateDirectory(path.c_str()); + DWORD dwAttrib = ::GetFileAttributesW(path.c_str()); + if (dwAttrib != INVALID_FILE_ATTRIBUTES && 0 != (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return true; + + return CreateDirectory(path.c_str()); } bool Directory::CreateDirectory(String strFolderPathRoot, String strFolderName) { @@ -47,6 +50,9 @@ namespace FileSystem } bool Directory::CreateDirectories(LPCTSTR path) { + DWORD dwAttrib = ::GetFileAttributesW(path); + if (dwAttrib != INVALID_FILE_ATTRIBUTES && 0 != (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return true; + int codeResult = ERROR_SUCCESS; codeResult = SHCreateDirectory(NULL, path); diff --git a/Common/DocxFormat/Source/SystemUtility/SystemUtility.h b/Common/DocxFormat/Source/SystemUtility/SystemUtility.h index 9e28df90e9..1444c882e0 100644 --- a/Common/DocxFormat/Source/SystemUtility/SystemUtility.h +++ b/Common/DocxFormat/Source/SystemUtility/SystemUtility.h @@ -24,14 +24,14 @@ namespace OOX friend CPath operator/(const CPath& path1, const CPath& path2) { - CPath path(path1.m_strFilename + _T("//") + path2.m_strFilename); + CPath path(path1.m_strFilename + FILE_SEPARATOR_STR + path2.m_strFilename); path.Normalize(); return path; } friend CPath operator/(const CPath& path1, const CString& path2) { - CPath path(path1.m_strFilename + _T("//") + path2); + CPath path(path1.m_strFilename + FILE_SEPARATOR_STR + path2); path.Normalize(); return path; diff --git a/XlsxSerializerCom/Reader/BinaryWriter.h b/XlsxSerializerCom/Reader/BinaryWriter.h index fd8e97e8b3..46a7c7c2c1 100644 --- a/XlsxSerializerCom/Reader/BinaryWriter.h +++ b/XlsxSerializerCom/Reader/BinaryWriter.h @@ -1655,8 +1655,10 @@ namespace BinXlsxRW { if (oFile.IsInit() && OOX::Spreadsheet::FileTypes::Drawings == oFile->type()) { OOX::Spreadsheet::CDrawing* pDrawing = (OOX::Spreadsheet::CDrawing*)oFile.operator->(); + CString sOldRelsPath = m_pOfficeDrawingConverter->GetRelsPath(); CString sDrawingRelsPath = pDrawing->GetReadPath().GetPath(); + m_pOfficeDrawingConverter->SetRelsPath(sDrawingRelsPath); nCurPos = m_oBcw.WriteItemStart(c_oSerWorksheetsTypes::Drawings); diff --git a/XlsxSerializerCom/Reader/CSVReader.cpp b/XlsxSerializerCom/Reader/CSVReader.cpp index 54bb0ebcaf..d281acc739 100644 --- a/XlsxSerializerCom/Reader/CSVReader.cpp +++ b/XlsxSerializerCom/Reader/CSVReader.cpp @@ -1,6 +1,7 @@ #include "CSVReader.h" #include +#include "..\..\DesktopEditor\Common\File.h" namespace CSVReader { diff --git a/XlsxSerializerCom/Reader/ChartFromToBinary.cpp b/XlsxSerializerCom/Reader/ChartFromToBinary.cpp index dbd35f9931..b7ff358b6d 100644 --- a/XlsxSerializerCom/Reader/ChartFromToBinary.cpp +++ b/XlsxSerializerCom/Reader/ChartFromToBinary.cpp @@ -961,8 +961,8 @@ namespace BinXlsxRW{ CString sThemePathReverse = m_oSaveParams.sThemePath;sThemePathReverse.MakeReverse(); CString sContentTypesPath; - int nIndex = sThemePathReverse.Find('\\'); - nIndex = sThemePathReverse.Find('\\', nIndex + 1); + int nIndex = sThemePathReverse.Find(FILE_SEPARATOR_CHAR); + nIndex = sThemePathReverse.Find(FILE_SEPARATOR_CHAR, nIndex + 1); if(-1 != nIndex) { CString sContentTypesPath = m_oSaveParams.sThemePath.Right(nIndex); diff --git a/XlsxSerializerCom/Writer/BinaryReader.h b/XlsxSerializerCom/Writer/BinaryReader.h index b0543f2864..1241dae49f 100644 --- a/XlsxSerializerCom/Writer/BinaryReader.h +++ b/XlsxSerializerCom/Writer/BinaryReader.h @@ -1838,14 +1838,11 @@ namespace BinXlsxRW { } else if(c_oSerWorksheetsTypes::Drawings == type) { - CString sDrawingsDir; - sDrawingsDir.Format(_T("%ls/xl/drawings"), m_sDestinationDir); - if( !NSDirectory::Exists(string2std_string(sDrawingsDir)) ) - OOX::CSystemUtility::CreateDirectories(sDrawingsDir); - CString sRelsDir; - sRelsDir.Format(_T("%ls/_rels"), sDrawingsDir); - if( !NSDirectory::Exists(string2std_string(sRelsDir)) ) - OOX::CSystemUtility::CreateDirectories(sRelsDir); + OOX::CPath pathDrawingsDir = m_sDestinationDir + _T("\\xl\\drawings"); + OOX::CSystemUtility::CreateDirectories(pathDrawingsDir.GetPath()); + + OOX::CPath pathDrawingsRelsDir = pathDrawingsDir.GetPath() + _T("\\_rels"); + OOX::CSystemUtility::CreateDirectories(pathDrawingsRelsDir.GetPath()); m_pOfficeDrawingConverter->SetDstContentRels(); m_pCurDrawing = new OOX::Spreadsheet::CDrawing(); @@ -1856,10 +1853,8 @@ namespace BinXlsxRW { m_pCurWorksheet->m_oDrawing->m_oId.Init(); m_pCurWorksheet->m_oDrawing->m_oId->SetValue(oRId.get()); - CString sFilename = m_pCurDrawing->m_sFilename; - CString sRelsPath; - sRelsPath.Format(_T("%ls/%ls.rels"), sRelsDir, sFilename); - m_pOfficeDrawingConverter->SaveDstContentRels(sRelsPath); + OOX::CPath pathDrawingsRels = pathDrawingsRelsDir.GetPath() + _T("\\") + m_pCurDrawing->m_sFilename + _T(".rels"); + m_pOfficeDrawingConverter->SaveDstContentRels(pathDrawingsRels.GetPath()); } else if(c_oSerWorksheetsTypes::SheetData == type) { @@ -2420,14 +2415,12 @@ namespace BinXlsxRW { if(c_oSer_DrawingType::Chart2 == type) { // rels - CString sChartsDir; - sChartsDir.Format(_T("%ls/xl/charts"), m_sDestinationDir); - if( !NSDirectory::Exists(string2std_string(sChartsDir)) ) - OOX::CSystemUtility::CreateDirectories(sChartsDir); - CString sRelsDir; - sRelsDir.Format(_T("%ls/_rels"), sChartsDir); - if( !NSDirectory::Exists(string2std_string(sRelsDir)) ) - OOX::CSystemUtility::CreateDirectories(sRelsDir); + OOX::CPath pathChartsDir = m_sDestinationDir + _T("\\xl\\charts"); + OOX::CSystemUtility::CreateDirectories(pathChartsDir.GetPath()); + + OOX::CPath pathChartsRelsDir = pathChartsDir.GetPath() + _T("\\_rels"); + OOX::CSystemUtility::CreateDirectories(pathChartsRelsDir.GetPath()); + m_pOfficeDrawingConverter->SetDstContentRels(); OOX::Spreadsheet::CChartSpace* pChartSpace = new OOX::Spreadsheet::CChartSpace(); @@ -2437,8 +2430,8 @@ namespace BinXlsxRW { pChartFile->m_bDoNotAddRels = true; m_pCurDrawing->Add(pChartFile); - CString sRelsPath;sRelsPath.Format(_T("%ls/%ls.rels"), sRelsDir, pChartFile->m_sFilename); - m_pOfficeDrawingConverter->SaveDstContentRels(sRelsPath); + OOX::CPath pathChartsRels = pathChartsRelsDir.GetPath() + _T("\\") + pChartFile->m_sFilename + _T(".rels"); + m_pOfficeDrawingConverter->SaveDstContentRels(pathChartsRels.GetPath()); long rId; CString sNewImgRel;