diff --git a/EpubFile/CEpubFile.h b/EpubFile/CEpubFile.h index e830126ea9..0af95a561d 100644 --- a/EpubFile/CEpubFile.h +++ b/EpubFile/CEpubFile.h @@ -30,7 +30,7 @@ public: void SetTempDirectory(const std::wstring& stempDir); HRESULT Convert(const std::wstring& sInputFile, const std::wstring& sOutputFile, bool bIsOutCompress = true); void ShowMap(); - HRESULT FromHtml(const std::wstring& sSrc, const std::wstring& sDst); + HRESULT FromHtml(const std::wstring& sSrc, const std::wstring& sDstFile); }; #endif // CEPUBFILE_H diff --git a/EpubFile/src/CEpubFile.cpp b/EpubFile/src/CEpubFile.cpp index b55632dcb5..9da23dea06 100644 --- a/EpubFile/src/CEpubFile.cpp +++ b/EpubFile/src/CEpubFile.cpp @@ -185,27 +185,27 @@ void CEpubFile::ShowMap() std::wcout << oItem.m_sID << L" - " << m_mapRefs[oItem.m_sID].GetRef() << std::endl; } -HRESULT CEpubFile::FromHtml(const std::wstring& sSrc, const std::wstring& sDst) +HRESULT CEpubFile::FromHtml(const std::wstring& sSrc, const std::wstring& sDstFile) { - NSDirectory::CreateDirectory(sDst + L"/META-INF"); - NSDirectory::CreateDirectory(sDst + L"/OEBPS"); + NSDirectory::CreateDirectory(m_sTempDir + L"/META-INF"); + NSDirectory::CreateDirectory(m_sTempDir + L"/OEBPS"); NSFile::CFileBinary oMimeType; - if (oMimeType.CreateFileW(sDst + L"/mimetype")) + if (oMimeType.CreateFileW(m_sTempDir + L"/mimetype")) { oMimeType.WriteStringUTF8(L"application/epub+zip"); oMimeType.CloseFile(); } NSFile::CFileBinary oContainerXml; - if (oContainerXml.CreateFileW(sDst + L"/META-INF/container.xml")) + if (oContainerXml.CreateFileW(m_sTempDir + L"/META-INF/container.xml")) { oContainerXml.WriteStringUTF8(L""); oContainerXml.CloseFile(); } NSFile::CFileBinary oContentOpf; - if (oContentOpf.CreateFileW(sDst + L"/OEBPS/content.opf")) + if (oContentOpf.CreateFileW(m_sTempDir + L"/OEBPS/content.opf")) { oContentOpf.WriteStringUTF8(L""); // metadata @@ -217,12 +217,19 @@ HRESULT CEpubFile::FromHtml(const std::wstring& sSrc, const std::wstring& sDst) oCoreReader.ReadNextNode(); int nDeath = oCoreReader.GetDepth(); while (oCoreReader.ReadNextSiblingNode(nDeath)) + { if (oCoreReader.GetNamespacePrefix() == L"dc") - oContentOpf.WriteStringUTF8(oCoreReader.GetInnerXml()); + { + oContentOpf.WriteStringUTF8(oCoreReader.GetOuterXml()); + } + } } - - NSFile::CFileBinary::Copy(sSrc + L"/doct_unpacked/index.html", sDst + L"/OEBPS/index.html"); + // index.html + NSFile::CFileBinary::Copy(sSrc + L"/doct_unpacked/index.html", m_sTempDir + L"/OEBPS/index.html"); oContentOpf.WriteStringUTF8(L""); oContentOpf.CloseFile(); } + + COfficeUtils oOfficeUtils; + return oOfficeUtils.CompressFileOrDirectory(m_sTempDir, sDstFile); } diff --git a/EpubFile/test/main.cpp b/EpubFile/test/main.cpp index 932733f4dd..a862d259c3 100644 --- a/EpubFile/test/main.cpp +++ b/EpubFile/test/main.cpp @@ -10,12 +10,24 @@ int main() { - std::vector arFiles = NSDirectory::GetFiles(NSFile::GetProcessDirectory() + L"/../../../Files"); std::wstring sTmp = NSFile::GetProcessDirectory() + L"/tmp"; std::wstring sOutputDirectory = NSFile::GetProcessDirectory() + L"/OutputFiles"; NSDirectory::CreateDirectory(sOutputDirectory); NSDirectory::CreateDirectory(sTmp); + bool bFromHtml = false; + if (bFromHtml) + { + std::wstring sFile = NSFile::GetProcessDirectory() + L"/../../../FromHtmlTest/test3"; + CEpubFile oEpub; + oEpub.SetTempDirectory(sTmp); + oEpub.FromHtml(sFile, sOutputDirectory + L"/res.epub"); + NSDirectory::DeleteDirectory(sTmp); + return 0; + } + + std::vector arFiles = NSDirectory::GetFiles(NSFile::GetProcessDirectory() + L"/../../../Files"); + clock_t tTime1 = clock(); //Русские символы в консоль не выводятся for (const std::wstring& sFileName : arFiles)