Improve txt file writer

This commit is contained in:
ONLYOFFICE3033\nctde
2025-10-23 17:48:08 +03:00
parent 47e0a0c9e7
commit 9ccbb25acd
2 changed files with 54 additions and 13 deletions

View File

@ -153,17 +153,58 @@ namespace Txt2Docx
{
return converter_->m_inputFile.read(path);
}
void Converter::write(NSStringUtils::CStringBuilder &stringWriter)
{
const wchar_t* fontName = L"Courier New";
const wchar_t* defaultSpacing = L"<w:spacing w:after=\"0\" w:line=\"240\" w:lineRule=\"auto\"/>";
for (const std::wstring &lineRaw : converter_->m_inputFile.m_listContent)
{
std::wstring line = lineRaw;
line.erase(std::remove(line.begin(), line.end(), L'\x08'), line.end());
stringWriter.WriteString(L"<w:p><w:pPr>");
stringWriter.WriteString(defaultSpacing);
stringWriter.WriteString(L"<w:rPr><w:rFonts w:ascii=\"");
stringWriter.WriteString(fontName);
stringWriter.WriteString(L"\" w:hAnsi=\"");
stringWriter.WriteString(fontName);
stringWriter.WriteString(L"\" w:cs=\"");
stringWriter.WriteString(fontName);
stringWriter.WriteString(L"\"/></w:rPr></w:pPr>");
size_t start = 0;
while (true)
{
size_t pos = line.find(L'\x09', start);
std::wstring segment = (pos == std::wstring::npos) ? line.substr(start) : line.substr(start, pos - start);
if (!segment.empty())
{
stringWriter.WriteString(L"<w:r><w:rPr><w:rFonts w:ascii=\"");
stringWriter.WriteString(fontName);
stringWriter.WriteString(L"\" w:hAnsi=\"");
stringWriter.WriteString(fontName);
stringWriter.WriteString(L"\" w:cs=\"");
stringWriter.WriteString(fontName);
stringWriter.WriteString(L"\"/></w:rPr><w:t xml:space=\"preserve\">");
stringWriter.WriteString(segment.c_str());
stringWriter.WriteString(L"</w:t></w:r>");
}
if (pos == std::wstring::npos)
break;
stringWriter.WriteString(L"<w:tab/>");
start = pos + 1;
}
stringWriter.WriteString(L"</w:p>");
}
}
void Converter::write(/*const std::wstring& path*/NSStringUtils::CStringBuilder & stringWriter)
{
for (size_t i = 0; i < converter_->m_outputFile.m_arrItems.size(); ++i)
{
if ( converter_->m_outputFile.m_arrItems[i] )
stringWriter.WriteString(converter_->m_outputFile.m_arrItems[i]->toXML());
}
//BOOL res = converter_->m_outputFile.Write(std_string2string(path.string()));
return;
}
Converter_Impl::Converter_Impl(int encoding) : m_outputFile(NULL)
{

View File

@ -102,9 +102,9 @@ _UINT32 CTxtXmlFile::txt_LoadFromFile(const std::wstring & sSrcFileName, const s
Txt2Docx::Converter converter( encoding);
converter.read(sSrcFileName);
converter.convert();
converter.write(pDocxWriter->get_document_writer().m_oContent);
}
// converter.convert();
converter.write(pDocxWriter->get_document_writer().m_oContent);
}
catch(...)
{
return AVS_FILEUTILS_ERROR_CONVERT;