#include
#include "htmlfile2.h"
#include "../ASCOfficeDocxFile2/BinReader/FileWriter.h"
#include "../Common/DocxFormat/Source/DocxFormat/App.h"
#include "../Common/DocxFormat/Source/DocxFormat/Core.h"
#include "../DesktopEditor/common/SystemUtils.h"
class CHtmlFile2_Private
{
public:
public:
CHtmlFile2_Private()
{
}
~CHtmlFile2_Private()
{
}
void CreateDocxEmpty(const std::wstring& sDst, Writers::FileWriter* pDocxWriter)
{
// Создаем пустые папки
std::wstring strDirectory = sDst;
// rels
OOX::CPath pathRels = strDirectory + FILE_SEPARATOR_STR + L"_rels";
NSDirectory::CreateDirectory(pathRels.GetPath());
// docProps
OOX::CPath pathDocProps = strDirectory + FILE_SEPARATOR_STR + L"docProps";
NSDirectory::CreateDirectory(pathDocProps.GetPath());
// word
OOX::CPath pathWord = strDirectory + FILE_SEPARATOR_STR + L"word";
NSDirectory::CreateDirectory(pathWord.GetPath());
// documentRels
OOX::CPath pathWordRels = pathWord + FILE_SEPARATOR_STR + L"_rels";
NSDirectory::CreateDirectory(pathWordRels.GetPath());
// media
OOX::CPath pathMedia = pathWord + FILE_SEPARATOR_STR + L"media";
NSDirectory::CreateDirectory(pathMedia.GetPath());
// theme
OOX::CPath pathTheme = pathWord + FILE_SEPARATOR_STR + L"theme";
NSDirectory::CreateDirectory(pathTheme.GetPath());
// Пишем стандартные файлы
pathTheme = pathTheme + FILE_SEPARATOR_STR + L"theme1.xml";
pDocxWriter->m_oTheme.Write(pathTheme.GetPath());
OOX::CPath DocProps = L"docProps";
OOX::CContentTypes oContentTypes;
OOX::CApp* pApp = new OOX::CApp(NULL);
if (pApp)
{
std::wstring sApplication = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvApplicationName);
if (sApplication.empty())
sApplication = NSSystemUtils::gc_EnvApplicationNameDefault;
pApp->SetApplication(sApplication);
#if defined(INTVER)
pApp->SetAppVersion(VALUE2STR(INTVER));
#endif
pApp->SetDocSecurity(0);
pApp->SetScaleCrop(false);
pApp->SetLinksUpToDate(false);
pApp->SetSharedDoc(false);
pApp->SetHyperlinksChanged(false);
pApp->write(pathDocProps + FILE_SEPARATOR_STR + L"app.xml", DocProps, oContentTypes);
RELEASEOBJECT(pApp);
}
OOX::CCore* pCore = new OOX::CCore(NULL);
if (pCore)
{
pCore->SetCreator(L"");
pCore->SetLastModifiedBy(L"");
pCore->write(pathDocProps + FILE_SEPARATOR_STR + L"core.xml", DocProps, oContentTypes);
RELEASEOBJECT(pCore);
}
pDocxWriter->m_oTheme.Write(strDirectory);
pDocxWriter->m_oStylesWriter.Write();
pDocxWriter->m_oFontTableWriter.Write();
pDocxWriter->m_oSettingWriter.Write();
pDocxWriter->m_oWebSettingsWriter.Write();
pDocxWriter->m_oDocumentWriter.Write();
pDocxWriter->m_oDocumentRelsWriter.Write();
oContentTypes.Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", OOX::CPath(L"/word"), OOX::CPath(L"document.xml"));
oContentTypes.Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml", OOX::CPath(L"/word"), OOX::CPath(L"styles.xml"));
oContentTypes.Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml", OOX::CPath(L"/word"), OOX::CPath(L"settings.xml"));
oContentTypes.Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml", OOX::CPath(L"/word"), OOX::CPath(L"webSettings.xml"));
oContentTypes.Registration(L"application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml", OOX::CPath(L"/word"), OOX::CPath(L"fontTable.xml"));
oContentTypes.Registration(L"application/vnd.openxmlformats-officedocument.theme+xml", OOX::CPath(L"/word/theme"), OOX::CPath(L"theme1.xml"));
oContentTypes.Write(strDirectory);
}
};
CHtmlFile2::CHtmlFile2()
{
}
CHtmlFile2::~CHtmlFile2()
{
}
bool CHtmlFile2::IsHtmlFile(const std::wstring& sFile)
{
return false;
}
void CHtmlFile2::SetTmpDirectory(const std::wstring& sFolder)
{
}
HRESULT CHtmlFile2::Open(const std::wstring& sSrc, const std::wstring& sDst, CHtmlParams* oParams)
{
// FileWriter - Писатель docx
// sDst - место создания docx, L"" - директория fontTable для инициализации, true - директория fontTable не требуется,
// 1 - версия стилей, false - не сохранять диаграммы как изображения, NULL - кастомный конвертор связанный с pptx, L"" - пустая тема
Writers::FileWriter* pDocxWriter = new Writers::FileWriter(sDst, L"", true, 1, false, NULL, L"");
if (pDocxWriter == NULL)
return S_FALSE;
CreateDocxEmpty(sDst, pDocxWriter);
RELEASEOBJECT(pDocxWriter);
return S_FALSE;
}