From ac6597599a0f02486206d23067588b79f63701b9 Mon Sep 17 00:00:00 2001 From: "Oleg.Korshul" Date: Wed, 9 Sep 2020 15:52:51 +0300 Subject: [PATCH] Insert html/mht/epub to conveter --- ASCOfficeDocxFile2/BinWriter/BinWriters.cpp | 30 +++--------------- EpubFile/CEpubFile.h | 2 +- EpubFile/src/CEpubFile.cpp | 34 +++++++++++++++------ X2tConverter/build/Qt/X2tConverter.pri | 2 +- X2tConverter/src/ASCConverters.cpp | 14 +++++++-- 5 files changed, 42 insertions(+), 40 deletions(-) diff --git a/ASCOfficeDocxFile2/BinWriter/BinWriters.cpp b/ASCOfficeDocxFile2/BinWriter/BinWriters.cpp index b88fc83f2d..70736c9fce 100644 --- a/ASCOfficeDocxFile2/BinWriter/BinWriters.cpp +++ b/ASCOfficeDocxFile2/BinWriter/BinWriters.cpp @@ -45,7 +45,7 @@ #ifndef _IOS #include "../../ASCOfficeDocFile/DocFormatLib/DocFormatLib.h" #endif -#include "../../HtmlFile/HtmlFile.h" +#include "../../HtmlFile2/HtmlFile2.h" #include "../../ASCOfficeRtfFile/RtfFormatLib/source/ConvertationManager.h" @@ -3351,32 +3351,10 @@ void BinaryDocumentTableWriter::WriteAltChunk(OOX::Media& oAltChunkFile) }break; case AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML: { - std::wstring sResultDoctDir = NSDirectory::CreateDirectoryWithUniqueName(oAltChunkFile.filename().GetDirectory()); - std::wstring sResultDoctFileEditor = sResultDoctDir + FILE_SEPARATOR_STR + _T("Editor.bin"); - - std::vector arFiles; - arFiles.push_back(file_name_inp); - try - { - CHtmlFile oHtmlFile; - if (0 == oHtmlFile.Convert(arFiles, sResultDoctDir)) - { - BinDocxRW::CDocxSerializer oCDocxSerializer; + CHtmlFile2 htmlConvert; + htmlConvert.SetTmpDirectory(sTempDir); - std::wstring sXmlOptions; - std::wstring sThemePath; // will be filled by 'CreateDocxFolders' method - std::wstring sMediaPath; // will be filled by 'CreateDocxFolders' method - std::wstring sEmbedPath; // will be filled by 'CreateDocxFolders' method - - oCDocxSerializer.CreateDocxFolders (sResultDocxDir, sThemePath, sMediaPath, sEmbedPath); - - result = oCDocxSerializer.loadFromFile (sResultDoctFileEditor, sResultDocxDir, sXmlOptions, sThemePath, sMediaPath, sEmbedPath); - } - } - catch(...) - { - } - NSDirectory::DeleteDirectory(sResultDoctDir); + result = (S_OK == htmlConvert.OpenHtml(file_name_inp, sResultDocxDir)); }break; #endif case AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX: diff --git a/EpubFile/CEpubFile.h b/EpubFile/CEpubFile.h index 6be445dcc9..d46d8d01e7 100644 --- a/EpubFile/CEpubFile.h +++ b/EpubFile/CEpubFile.h @@ -25,7 +25,7 @@ public: void Clear(); HRESULT IsEbubFile(const std::wstring& sfileName); void SetTempDirectory(const std::wstring& stempDir); - HRESULT Convert(const std::wstring& sInputFile, const std::wstring& sOutputFile); + HRESULT Convert(const std::wstring& sInputFile, const std::wstring& sOutputFile, const bool& bIsOutCompress = true); void ShowMap(); }; diff --git a/EpubFile/src/CEpubFile.cpp b/EpubFile/src/CEpubFile.cpp index 1e5bfb21a2..58164b8a53 100644 --- a/EpubFile/src/CEpubFile.cpp +++ b/EpubFile/src/CEpubFile.cpp @@ -40,7 +40,7 @@ void CEpubFile::SetTempDirectory(const std::wstring &sTempDir) this->m_sTempDir = sTempDir; } -HRESULT CEpubFile::Convert(const std::wstring& sInputFile, const std::wstring& sOutputFile) +HRESULT CEpubFile::Convert(const std::wstring& sInputFile, const std::wstring& sOutputFile, const bool& bIsOutCompress) { if (m_sTempDir.empty()) { @@ -109,6 +109,7 @@ HRESULT CEpubFile::Convert(const std::wstring& sInputFile, const std::wstring& s else return S_FALSE; + HRESULT hRes = S_FALSE; if (oXmlLiteReader.FromFile(m_sTempDir + L"/toc.ncx")) { oXmlLiteReader.ReadNextNode(); @@ -126,27 +127,42 @@ HRESULT CEpubFile::Convert(const std::wstring& sInputFile, const std::wstring& s oFileParams.SetDate(m_oBookInfo.GetDate()); oFileParams.SetDescription(m_oBookInfo.GetDescriptions()); - - const std::wstring& sDocxFileTempDir = m_sTempDir + L"/res"; + std::wstring sDocxFileTempDir = m_sTempDir + L"/tmp"; NSDirectory::CreateDirectory(sDocxFileTempDir); - oFile.SetTmpDirectory(sDocxFileTempDir); std::vector arFiles; - for (const CBookContentItem& oContent : m_arContents) arFiles.push_back(m_sTempDir + L"\\" + m_mapRefs[oContent.m_sID].GetRef()); +#ifdef _DEBUG std::wcout << L"---The conversion process from Epub to Docx...---" << std::endl; - if (oFile.OpenBatchHtml(arFiles, sDocxFileTempDir, &oFileParams) == S_OK) +#endif + + if (bIsOutCompress) + { + std::wstring sOutputDir = m_sTempDir + L"/res"; + NSDirectory::CreateDirectory(sOutputDir); + + hRes = oFile.OpenBatchHtml(arFiles, sOutputDir, &oFileParams); + + if (S_OK == hRes) + oOfficeUtils.CompressFileOrDirectory(sOutputDir, sOutputFile); + } + else + { + hRes = oFile.OpenBatchHtml(arFiles, sOutputFile, &oFileParams); + } + +#ifdef _DEBUG + if (S_OK == hRes) std::wcout << L"---Successful conversion of Epub to Docx---" << std::endl; else std::wcout << L"---Failed conversion of Epub to Docx---" << std::endl; - - oOfficeUtils.CompressFileOrDirectory(sDocxFileTempDir, sOutputFile); +#endif } - return S_OK; + return hRes; } void CEpubFile::Clear() diff --git a/X2tConverter/build/Qt/X2tConverter.pri b/X2tConverter/build/Qt/X2tConverter.pri index fcb7f1f659..1f38285f30 100755 --- a/X2tConverter/build/Qt/X2tConverter.pri +++ b/X2tConverter/build/Qt/X2tConverter.pri @@ -91,7 +91,7 @@ LIBS += -L$$CORE_BUILDS_LIBRARIES_PATH -lDocxFormatLib LIBS += -L$$CORE_BUILDS_LIBRARIES_PATH -lCryptoPPLib #All dynamic libs -ADD_DEPENDENCY(graphics, kernel, UnicodeConverter, PdfWriter, PdfReader, HtmlFile, XpsFile, DjVuFile, HtmlRenderer, doctrenderer, Fb2File) +ADD_DEPENDENCY(graphics, kernel, UnicodeConverter, PdfWriter, PdfReader, HtmlFile2, EpubFile, XpsFile, DjVuFile, HtmlRenderer, doctrenderer, Fb2File) ##################################################### # внешнее подключение сторонних библиотек diff --git a/X2tConverter/src/ASCConverters.cpp b/X2tConverter/src/ASCConverters.cpp index f651b06d0f..d728663df2 100644 --- a/X2tConverter/src/ASCConverters.cpp +++ b/X2tConverter/src/ASCConverters.cpp @@ -57,6 +57,8 @@ #include "../../XpsFile/XpsFile.h" #include "../../HtmlRenderer/include/HTMLRenderer3.h" #include "../../Fb2File/Fb2File.h" +#include "../../HtmlFile2/htmlfile2.h" +#include "../../EpubFile/CEpubFile.h" #include "../../ASCOfficeXlsFile2/source/XlsXlsxConverter/ConvertXls2Xlsx.h" #include "../../OfficeCryptReader/source/ECMACryptFile.h" @@ -2814,7 +2816,9 @@ namespace NExtractTools //html _UINT32 html_array2docx_dir (const std::vector &arFiles, const std::wstring &sTo, const std::wstring &sTemp, InputParams& params) { - return S_OK; + CHtmlFile2 oFile; + oFile.SetTmpDirectory(sTemp); + return (S_OK == oFile.OpenBatchHtml(arFiles, sTo)) ? 0 : AVS_FILEUTILS_ERROR_CONVERT; } _UINT32 html2docx_dir (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, InputParams& params) { @@ -2859,12 +2863,16 @@ namespace NExtractTools //mht _UINT32 mht2docx_dir (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, InputParams& params) { - return S_OK; + CHtmlFile2 oFile; + oFile.SetTmpDirectory(sTemp); + return (S_OK == oFile.OpenMht(sFrom, sTo)) ? 0 : AVS_FILEUTILS_ERROR_CONVERT; } //epub _UINT32 epub2docx_dir (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, InputParams& params) { - return S_OK; + CEpubFile oFile; + oFile.SetTempDirectory(sTemp); + return (S_OK == oFile.Convert(sFrom, sTo, false)) ? 0 : AVS_FILEUTILS_ERROR_CONVERT; } _UINT32 fb2docx_dir (const std::wstring &sFrom, const std::wstring &sTo, const std::wstring &sTemp, InputParams& params) {