Commit 6ec3a4cf authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander Trofimov

add ASCOfficeUtils lib вместо dll; добавлено const в некоторые интерфейсы классов.

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@59124 954022d7-b5bf-4e40-9824-e11837661b57
parent 73ab9f4b
This diff is collapsed.
...@@ -6208,7 +6208,7 @@ namespace BinDocxRW ...@@ -6208,7 +6208,7 @@ namespace BinDocxRW
//Seek MainTable //Seek MainTable
m_oBcw.m_oStream.SetPosition(nCurPos); m_oBcw.m_oStream.SetPosition(nCurPos);
} }
void intoBindoc(CString& sDir) { void intoBindoc(const CString& sDir) {
NSBinPptxRW::CBinaryFileWriter& oBufferedStream = m_oBcw.m_oStream; NSBinPptxRW::CBinaryFileWriter& oBufferedStream = m_oBcw.m_oStream;
OOX::CDocx oDocx = OOX::CDocx(OOX::CPath(sDir)); OOX::CDocx oDocx = OOX::CDocx(OOX::CPath(sDir));
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "../BinWriter/BinWriters.h" #include "../BinWriter/BinWriters.h"
#include "../BinReader/Readers.h" #include "../BinReader/Readers.h"
#include "../../ASCOfficePPTXFile/Editor/FontPicker.h" #include "../../ASCOfficePPTXFile/Editor/FontPicker.h"
#include "../../ASCOfficeUtils/ASCOfficeUtilsLib/OfficeUtils.h"
#ifndef _WIN32 #ifndef _WIN32
#include "../../DesktopEditor/common/Types.h" #include "../../DesktopEditor/common/Types.h"
...@@ -20,7 +21,35 @@ BinDocxRW::CDocxSerializer::CDocxSerializer() ...@@ -20,7 +21,35 @@ BinDocxRW::CDocxSerializer::CDocxSerializer()
m_bIsNoBase64Save = false; m_bIsNoBase64Save = false;
m_bSaveChartAsImg = false; m_bSaveChartAsImg = false;
} }
bool BinDocxRW::CDocxSerializer::saveToFile(CString& sSrcFileName, CString& sDstPath, CString& sXMLOptions) bool BinDocxRW::CDocxSerializer::ConvertDocxToDoct(const CString& sSrcFileName, const CString& sDstFileName, const CString& sTmpDir, const CString& sXMLOptions)
{
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"));
CString sDirSrc = std_string2string(strDirSrc);
CString sEditorBin = std_string2string(strEditorBin);
COfficeUtils oCOfficeUtils(NULL);
if(oCOfficeUtils.ExtractToDirectory(string2std_string(sSrcFileName), strDirSrc, NULL, 0))
if(saveToFile(sDirSrc, sEditorBin, sXMLOptions))
if(oCOfficeUtils.CompressFileOrDirectory(strDirDst, string2std_string(sDstFileName), -1))
return true;
return false;
}
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"));
CString sDirSrc = std_string2string(strDirSrc);
CString sEditorBin = std_string2string(strEditorBin);
COfficeUtils oCOfficeUtils(NULL);
if(oCOfficeUtils.ExtractToDirectory(string2std_string(sSrcFileName), strDirSrc, NULL, 0))
if(loadFromFile(sDirSrc, sEditorBin, sXMLOptions, sThemePath, sMediaPath))
if(oCOfficeUtils.CompressFileOrDirectory(strDirDst, string2std_string(sDstFileName), -1))
return true;
return false;
}
bool BinDocxRW::CDocxSerializer::saveToFile(const CString& sSrcFileName, const CString& sDstPath, const CString& sXMLOptions)
{ {
//create mediadir //create mediadir
OOX::CPath path(sSrcFileName); OOX::CPath path(sSrcFileName);
...@@ -91,7 +120,7 @@ bool BinDocxRW::CDocxSerializer::saveToFile(CString& sSrcFileName, CString& sDst ...@@ -91,7 +120,7 @@ bool BinDocxRW::CDocxSerializer::saveToFile(CString& sSrcFileName, CString& sDst
RELEASEOBJECT(pFontPicker); RELEASEOBJECT(pFontPicker);
return true; return true;
} }
bool BinDocxRW::CDocxSerializer::loadFromFile(CString& sSrcFileName, CString& sDstPath, CString& sXMLOptions, CString& sThemePath, CString& sMediaPath) bool BinDocxRW::CDocxSerializer::loadFromFile(const CString& sSrcFileName, const CString& sDstPath, const CString& sXMLOptions, const CString& sThemePath, const CString& sMediaPath)
{ {
bool bResultOk = false; bool bResultOk = false;
NSFile::CFileBinary oFile; NSFile::CFileBinary oFile;
...@@ -224,7 +253,7 @@ bool BinDocxRW::CDocxSerializer::getXmlContent(NSBinPptxRW::CBinaryFileReader& o ...@@ -224,7 +253,7 @@ bool BinDocxRW::CDocxSerializer::getXmlContent(NSBinPptxRW::CBinaryFileReader& o
sOutputXml = oTempContentWriter.m_oContent.GetData().GetString(); sOutputXml = oTempContentWriter.m_oContent.GetData().GetString();
return true; return true;
} }
bool BinDocxRW::CDocxSerializer::getBinaryContent(CString& bsTxContent, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize) bool BinDocxRW::CDocxSerializer::getBinaryContent(const CString& bsTxContent, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize)
{ {
if(NULL == m_oBinaryFileWriter) if(NULL == m_oBinaryFileWriter)
return false; return false;
...@@ -257,11 +286,11 @@ bool BinDocxRW::CDocxSerializer::getBinaryContent(CString& bsTxContent, NSBinPpt ...@@ -257,11 +286,11 @@ bool BinDocxRW::CDocxSerializer::getBinaryContent(CString& bsTxContent, NSBinPpt
lDataSize = nEndPos - nStartPos; lDataSize = nEndPos - nStartPos;
return true; return true;
} }
void BinDocxRW::CDocxSerializer::setFontDir(CString& sFontDir) void BinDocxRW::CDocxSerializer::setFontDir(const CString& sFontDir)
{ {
m_sFontDir = sFontDir; m_sFontDir = sFontDir;
} }
void BinDocxRW::CDocxSerializer::setEmbeddedFontsDir(CString& sEmbeddedFontsDir) void BinDocxRW::CDocxSerializer::setEmbeddedFontsDir(const CString& sEmbeddedFontsDir)
{ {
m_sEmbeddedFontsDir = sEmbeddedFontsDir; m_sEmbeddedFontsDir = sEmbeddedFontsDir;
} }
......
...@@ -27,12 +27,14 @@ namespace BinDocxRW { ...@@ -27,12 +27,14 @@ namespace BinDocxRW {
Writers::FileWriter* m_pCurFileWriter; Writers::FileWriter* m_pCurFileWriter;
public: public:
CDocxSerializer(); CDocxSerializer();
bool loadFromFile(CString& sSrcFileName, CString& sDstPath, CString& sXMLOptions, CString& sThemePath, CString& sMediaPath); bool ConvertDocxToDoct(const CString& sSrcFileName, const CString& sDstFileName, const CString& sTmpDir, const CString& sXMLOptions);
bool saveToFile(CString& sSrcFileName, CString& sDstPath, 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);
bool getXmlContent(NSBinPptxRW::CBinaryFileReader& oBufferedStream, long lLength, CString& sOutputXml); bool getXmlContent(NSBinPptxRW::CBinaryFileReader& oBufferedStream, long lLength, CString& sOutputXml);
bool getBinaryContent(CString& bsTxContent, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize); bool getBinaryContent(const CString& bsTxContent, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize);
void setFontDir(CString& sFontDir); void setFontDir(const CString& sFontDir);
void setEmbeddedFontsDir(CString& sEmbeddedFontsDir); void setEmbeddedFontsDir(const CString& sEmbeddedFontsDir);
void setIsNoBase64Save(bool bIsNoBase64Save); void setIsNoBase64Save(bool bIsNoBase64Save);
void setSaveChartAsImg(bool bSaveChartAsImg); void setSaveChartAsImg(bool bSaveChartAsImg);
}; };
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "../ASCOfficePPTXFile/ASCOfficePPTXFile.h" #include "../ASCOfficePPTXFile/ASCOfficePPTXFile.h"
#include "../Common/DocxFormat/Source/SystemUtility/File.h" #include "../Common/DocxFormat/Source/SystemUtility/File.h"
#include "../ASCOfficeUtils/ASCOfficeUtilsLib/OfficeUtils.h"
void comLoadTheme(void* pArg, int nIndex, CString& strDstFolder); void comLoadTheme(void* pArg, int nIndex, CString& strDstFolder);
bool comExtractFile(void* pArg, CString& sFile, CString& sDir); bool comExtractFile(void* pArg, CString& sFile, CString& sDir);
...@@ -194,39 +195,13 @@ void comLoadTheme(void* pArg, int nIndex, CString& strDstFolder) ...@@ -194,39 +195,13 @@ void comLoadTheme(void* pArg, int nIndex, CString& strDstFolder)
} }
bool comExtractFile(void* pArg, CString& sFile, CString& sDir) bool comExtractFile(void* pArg, CString& sFile, CString& sDir)
{ {
OfficeUtils::IOfficeUtils* pOfficeUtils = NULL; COfficeUtils oCOfficeUtils(NULL);
return S_OK == oCOfficeUtils.ExtractToDirectory(string2std_string(sFile), string2std_string(sDir), NULL, 0) ? true : false;
if (S_OK != CoCreateInstance(__uuidof(OfficeUtils::COfficeUtils), NULL, CLSCTX_INPROC_SERVER, __uuidof(OfficeUtils::IOfficeUtils),(void**)&pOfficeUtils))
return false;
BSTR bsFile = sFile.AllocSysString();
BSTR bsDir = sDir.AllocSysString();
HRESULT hr = pOfficeUtils->ExtractToDirectory( bsFile, bsDir, NULL, 0);
SysFreeString(bsFile);
SysFreeString(bsDir);
if(hr != S_OK)
return false;
RELEASEINTERFACE(pOfficeUtils);
return true;
} }
bool comCompressFile(void* pArg, CString& sDir, CString& sFile) bool comCompressFile(void* pArg, CString& sDir, CString& sFile)
{ {
OfficeUtils::IOfficeUtils* pOfficeUtils = NULL; COfficeUtils oCOfficeUtils(NULL);
return S_OK == oCOfficeUtils.CompressFileOrDirectory(string2std_string(sDir), string2std_string(sFile), -1) ? true : false;
if (S_OK != CoCreateInstance(__uuidof(OfficeUtils::COfficeUtils), NULL, CLSCTX_INPROC_SERVER, __uuidof(OfficeUtils::IOfficeUtils),(void**)&pOfficeUtils))
return false;
BSTR bsDir = sDir.AllocSysString();
BSTR bsFile = sFile.AllocSysString();
HRESULT hr = pOfficeUtils->CompressFileOrDirectory( bsDir, bsFile, -1 );
SysFreeString(bsDir);
SysFreeString(bsFile);
if(hr != S_OK)
return false;
RELEASEINTERFACE(pOfficeUtils);
return true;
} }
bool comProgress(void* pArg, long ID, long Percent) bool comProgress(void* pArg, long ID, long Percent)
{ {
......
...@@ -74,7 +74,7 @@ namespace ASCGraphics ...@@ -74,7 +74,7 @@ namespace ASCGraphics
#endif #endif
#import "../Redist/ASCOfficeUtils.dll" named_guids raw_interfaces_only rename_namespace("OfficeUtils") //#import "../Redist/ASCOfficeUtils.dll" named_guids raw_interfaces_only rename_namespace("OfficeUtils")
//#import "../Redist/ASCOfficePPTXFile.dll" named_guids raw_interfaces_only rename_namespace("PPTXFile"), exclude("_IAVSOfficeFileTemplateEvents"), exclude("_IAVSOfficeFileTemplateEvents2"), exclude("IASCRenderer") //#import "../Redist/ASCOfficePPTXFile.dll" named_guids raw_interfaces_only rename_namespace("PPTXFile"), exclude("_IAVSOfficeFileTemplateEvents"), exclude("_IAVSOfficeFileTemplateEvents2"), exclude("IASCRenderer")
#include "../Common/DocxFormat/Source/DocxFormat/Docx.h" #include "../Common/DocxFormat/Source/DocxFormat/Docx.h"
......
...@@ -65,7 +65,7 @@ using namespace ATL; ...@@ -65,7 +65,7 @@ using namespace ATL;
//#include "../ASCImageStudio3/ASCGraphics/Interfaces/ASCRenderer.h" //#include "../ASCImageStudio3/ASCGraphics/Interfaces/ASCRenderer.h"
#include "../Common/Config.h" #include "../Common/Config.h"
#import "../Redist/ASCOfficeUtils.dll" named_guids raw_interfaces_only rename_namespace("OfficeUtils") //#import "../Redist/ASCOfficeUtils.dll" named_guids raw_interfaces_only rename_namespace("OfficeUtils")
//#import "../Redist/ASCOfficeDocxFile2.dll" named_guids raw_interfaces_only rename_namespace("DocxFile2") //#import "../Redist/ASCOfficeDocxFile2.dll" named_guids raw_interfaces_only rename_namespace("DocxFile2")
//#import "../Redist/XlsxSerializerCom.dll" named_guids raw_interfaces_only rename_namespace("XlsxCom"), exclude("_IAVSOfficeFileTemplateEvents"), exclude("_IAVSOfficeFileTemplateEvents2") //#import "../Redist/XlsxSerializerCom.dll" named_guids raw_interfaces_only rename_namespace("XlsxCom"), exclude("_IAVSOfficeFileTemplateEvents"), exclude("_IAVSOfficeFileTemplateEvents2")
......
...@@ -121,10 +121,7 @@ namespace ZLibZipUtils ...@@ -121,10 +121,7 @@ namespace ZLibZipUtils
static int mymkdir( const wchar_t* dirname ) static int mymkdir( const wchar_t* dirname )
{ {
//todo return return NSDirectory::CreateDirectory(dirname) ? 0 : -1;
NSDirectory::CreateDirectory(dirname);
return 0;
} }
/*========================================================================================================*/ /*========================================================================================================*/
...@@ -159,7 +156,7 @@ namespace ZLibZipUtils ...@@ -159,7 +156,7 @@ namespace ZLibZipUtils
p++; p++;
hold = *p; hold = *p;
*p = 0; *p = 0;
if ((mymkdir(buffer) == -1) && (errno == ENOENT)) if ((mymkdir(buffer) == -1) && !NSDirectory::Exists(buffer))
{ {
delete[] buffer; delete[] buffer;
return 0; return 0;
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <stdio.h> #include <stdio.h>
#include <string> #include <string>
#include "Array.h" #include "Array.h"
#include "File.h"
#ifdef WIN32 #ifdef WIN32
#include "windows.h" #include "windows.h"
...@@ -12,7 +13,7 @@ ...@@ -12,7 +13,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
#include "File.h" #include <dirent.h>
#elif MAC #elif MAC
#endif #endif
...@@ -42,25 +43,119 @@ namespace NSDirectory ...@@ -42,25 +43,119 @@ namespace NSDirectory
} }
} while( FindNextFileW( hRes, &oFD ) ); } while( FindNextFileW( hRes, &oFD ) );
FindClose( hRes ); FindClose( hRes );
#elif LINUX
BYTE* pUtf8 = NULL;
LONG lLen = 0;
NSFile::CUtf8Converter::GetUtf8StringFromUnicode(strDirectory.c_str(), strDirectory.length(), pUtf8, lLen, false);
DIR *dp;
struct dirent *dirp;
if((dp = opendir((char*)pUtf8)) != NULL)
{
while ((dirp = readdir(dp)) != NULL)
{
if(DT_REG == dirp->d_type)
{
std::wstring sName = NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)dirp->d_name, strlen(dirp->d_name));
oArray.Add(strDirectory + L"/" + sName);
}
}
}
closedir(dp);
delete [] pUtf8;
#elif MAC
#endif
return oArray;
}
static CArray<std::wstring> GetDirectories(std::wstring strDirectory)
{
CArray<std::wstring> oArray;
#ifdef WIN32
WIN32_FIND_DATAW oFD;
std::wstring sSpec = strDirectory + L"\\*";
HANDLE hRes = FindFirstFileW( sSpec.c_str(), &oFD );
if( INVALID_HANDLE_VALUE == hRes )
return oArray;
do
{
sSpec = oFD.cFileName;
if (sSpec != L"." && sSpec != L"..")
{
sSpec = strDirectory + L"\\" + sSpec;
if( oFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
oArray.Add(sSpec);
}
}
} while( FindNextFileW( hRes, &oFD ) );
FindClose( hRes );
#elif LINUX #elif LINUX
BYTE* pUtf8 = NULL;
LONG lLen = 0;
NSFile::CUtf8Converter::GetUtf8StringFromUnicode(strDirectory.c_str(), strDirectory.length(), pUtf8, lLen, false);
DIR *dp;
struct dirent *dirp;
if((dp = opendir((char*)pUtf8)) != NULL)
{
while ((dirp = readdir(dp)) != NULL)
{
if(DT_DIR == dirp->d_type)
{
if(dirp->d_name[0] != '.')
{
std::wstring sName = NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)dirp->d_name, strlen(dirp->d_name));
oArray.Add(strDirectory + L"/" + sName);
}
}
}
}
closedir(dp);
delete [] pUtf8;
#elif MAC #elif MAC
#endif #endif
return oArray; return oArray;
} }
static void CreateDirectory(const std::wstring& strDirectory) static bool CreateDirectory(const std::wstring& strDirectory)
{ {
#ifdef WIN32 #ifdef WIN32
::CreateDirectoryW(strDirectory.c_str(), NULL); return FALSE != ::CreateDirectoryW(strDirectory.c_str(), NULL);
#elif LINUX #elif LINUX
BYTE* pUtf8 = NULL; BYTE* pUtf8 = NULL;
LONG lLen = 0; LONG lLen = 0;
NSFile::CUtf8Converter::GetUtf8StringFromUnicode(strDirectory.c_str(), strDirectory.length(), pUtf8, lLen, false); NSFile::CUtf8Converter::GetUtf8StringFromUnicode(strDirectory.c_str(), strDirectory.length(), pUtf8, lLen, false);
struct stat st; struct stat st;
int nRes = 0;
if (stat((char*)pUtf8, &st) == -1) { if (stat((char*)pUtf8, &st) == -1) {
mkdir((char*)pUtf8, S_IRWXU | S_IRWXG | S_IRWXO); nRes = mkdir((char*)pUtf8, S_IRWXU | S_IRWXG | S_IRWXO);
}
delete [] pUtf8;
return 0 == nRes;
#elif MAC
return false;
#endif
}
static void DeleteDirectory(const std::wstring& strDirectory)
{
CArray<std::wstring> aFiles = GetFiles(strDirectory);
for(int i = 0; i < aFiles.GetCount(); ++i)
{
NSFile::CFileBinary::Remove(aFiles[i]);
}
CArray<std::wstring> aDirectories = GetDirectories(strDirectory);
for(int i = 0; i < aDirectories.GetCount(); ++i)
{
DeleteDirectory(aDirectories[i]);
} }
#ifdef WIN32
RemoveDirectoryW(strDirectory.c_str());
#elif LINUX
BYTE* pUtf8 = NULL;
LONG lLen = 0;
NSFile::CUtf8Converter::GetUtf8StringFromUnicode(strDirectory.c_str(), strDirectory.length(), pUtf8, lLen, false);
rmdir((char*)pUtf8);
delete [] pUtf8; delete [] pUtf8;
#elif MAC #elif MAC
#endif #endif
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "File.h" #include "File.h"
#ifdef WIN32 #ifdef WIN32
#include <wchar.h> #include <tchar.h>
#elif LINUX #elif LINUX
#include <libgen.h> #include <libgen.h>
#elif MAC #elif MAC
...@@ -76,7 +76,7 @@ namespace NSSystemPath ...@@ -76,7 +76,7 @@ namespace NSSystemPath
sRes = strLeft + strRight.substr(1); sRes = strLeft + strRight.substr(1);
} }
else if(!bLeftSlash && !bRightSlash) else if(!bLeftSlash && !bRightSlash)
sRes = strLeft + _T("/") + strRight; sRes = strLeft + L"/" + strRight;
else else
sRes = strLeft + strRight; sRes = strLeft + strRight;
return sRes; return sRes;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment