Merge branch 'fix/rtfFormat' into release/v9.1.0

This commit is contained in:
Oleg Korshul
2025-09-11 14:25:39 +03:00
9 changed files with 93 additions and 44 deletions

View File

@ -61,6 +61,8 @@ RtfConvertationManager::RtfConvertationManager( )
m_poRtfWriter = NULL;
m_poRtfReader = NULL;
m_nDefaultFontSize = 0;
}
_UINT32 RtfConvertationManager::ConvertRtfToOOX( std::wstring sSrcFileName, std::wstring sDstPath )
{
@ -91,17 +93,21 @@ _UINT32 RtfConvertationManager::ConvertRtfToOOX( std::wstring sSrcFileName, std:
oWriter.m_sTempFolder = NSDirectory::CreateDirectoryWithUniqueName(NSDirectory::GetTempPath());
}
m_poRtfReader = &oReader;
m_poOOXWriter = &oWriter;
if (false == oReader.Load( )) return AVS_FILEUTILS_ERROR_CONVERT;
m_poRtfReader = &oReader;
m_poOOXWriter = &oWriter;
if (false == oReader.Load())
return AVS_FILEUTILS_ERROR_CONVERT;
if (!m_sDefaultFontName.empty())
oDocument.m_oProperty.m_sDefFontName = m_sDefaultFontName;
if (m_nDefaultFontSize > 0)
oDocument.m_oProperty.m_nDefFontSize = m_nDefaultFontSize;
oWriter.Save();
NSDirectory::DeleteDirectory(oReader.m_sTempFolder);
NSDirectory::DeleteDirectory(oWriter.m_sTempFolder);
NSDirectory::DeleteDirectory(oReader.m_sTempFolder);
NSDirectory::DeleteDirectory(oWriter.m_sTempFolder);
return S_OK;
return S_OK;
}
_UINT32 RtfConvertationManager::ConvertOOXToRtf( std::wstring sDstFileName, std::wstring sSrcPath )
{

View File

@ -44,26 +44,25 @@ namespace OOX { namespace Vml { class CShapeType; } }
class RtfConvertationManager
{
public:
std::wstring m_sTempFolder;
std::wstring m_sTempFolder;
int m_nUserLCID;
std::wstring m_sDefaultFontName;
int m_nDefaultFontSize;
RtfConvertationManager();
_UINT32 ConvertRtfToOOX( std::wstring sSrcFileName, std::wstring sDstPath);
_UINT32 ConvertRtfToOOX(std::wstring sSrcFileName, std::wstring sDstPath);
_UINT32 ConvertOOXToRtf( std::wstring sDstFileName, std::wstring sSrcPath);
_UINT32 ConvertOOXToRtf(std::wstring sDstFileName, std::wstring sSrcPath);
void OnCompleteItemRtf();
void OnCompleteItemOOX();
void OnCompleteItemRtf();
void OnCompleteItemOOX();
private:
OOXWriter* m_poOOXWriter;
OOXReader* m_poOOXReader;
RtfWriter* m_poRtfWriter;
RtfReader* m_poRtfReader;
bool m_bParseFirstItem;
OOXWriter* m_poOOXWriter;
OOXReader* m_poOOXReader;
RtfWriter* m_poRtfWriter;
RtfReader* m_poRtfReader;
bool m_bParseFirstItem;
};

View File

@ -2957,18 +2957,18 @@ void RtfShapeReader::ShapePropertyReader::ShapePropertyValueReader::PopState( Rt
int x = 0, y = 0;
try
{
if (PROP_DEF != m_oShape.m_nRelLeft)
x = XmlUtils::GetInteger(splitted[i].substr(0, pos)) - m_oShape.m_nRelLeft;
else
x = XmlUtils::GetInteger(splitted[i].substr(0, pos));
if (PROP_DEF != m_oShape.m_nRelLeft)
x = XmlUtils::GetInteger(splitted[i].substr(0, pos)) - m_oShape.m_nRelLeft;
else
x = XmlUtils::GetInteger(splitted[i].substr(0, pos));
}
catch(...){}
try
{
if (PROP_DEF != m_oShape.m_nRelTop)
y = XmlUtils::GetInteger(splitted[i].substr(pos + 1, splitted[i].length() - 1)) - m_oShape.m_nRelTop;
else
y = XmlUtils::GetInteger(splitted[i].substr(pos + 1, splitted[i].length() - 1));
if (PROP_DEF != m_oShape.m_nRelTop)
y = XmlUtils::GetInteger(splitted[i].substr(pos + 1, splitted[i].length() - 1)) - m_oShape.m_nRelTop;
else
y = XmlUtils::GetInteger(splitted[i].substr(pos + 1, splitted[i].length() - 1));
}
catch(...){}
@ -2992,10 +2992,10 @@ void RtfShapeReader::ShapePropertyReader::ShapePropertyValueReader::PopState( Rt
m_oShape.m_aPSegmentInfo.push_back( val );
}
}
else if (L"geoBottom" == m_sPropName) m_oShape.m_nGeoBottom = (PROP_DEF != m_oShape.m_nRelTop) ? nValue - m_oShape.m_nRelTop : nValue;
else if (L"geoLeft" == m_sPropName) m_oShape.m_nGeoLeft = (PROP_DEF != m_oShape.m_nRelLeft) ? nValue - m_oShape.m_nRelLeft : nValue;
else if (L"geoRight" == m_sPropName) m_oShape.m_nGeoRight = (PROP_DEF != m_oShape.m_nRelLeft) ? nValue - m_oShape.m_nRelLeft : nValue;
else if (L"geoTop" == m_sPropName) m_oShape.m_nGeoTop = (PROP_DEF != m_oShape.m_nRelTop) ? nValue - m_oShape.m_nRelTop : nValue;
else if (L"geoBottom" == m_sPropName) m_oShape.m_nGeoBottom = (PROP_DEF != m_oShape.m_nRelTop) ? nValue - m_oShape.m_nRelTop : nValue;
else if (L"geoLeft" == m_sPropName) m_oShape.m_nGeoLeft = (PROP_DEF != m_oShape.m_nRelLeft) ? nValue - m_oShape.m_nRelLeft : nValue;
else if (L"geoRight" == m_sPropName) m_oShape.m_nGeoRight = (PROP_DEF != m_oShape.m_nRelLeft) ? nValue - m_oShape.m_nRelLeft : nValue;
else if (L"geoTop" == m_sPropName) m_oShape.m_nGeoTop = (PROP_DEF != m_oShape.m_nRelTop) ? nValue - m_oShape.m_nRelTop : nValue;
//
else if ( L"dxWrapDistLeft" == m_sPropName ) m_oShape.m_nWrapDistLeft = RtfUtility::Emu2Twips( nValue );
else if ( L"dyWrapDistTop" == m_sPropName ) m_oShape.m_nWrapDistTop = RtfUtility::Emu2Twips( nValue );

View File

@ -143,12 +143,12 @@ std::wstring RtfFont::RenderToOOX(RenderParameter oRenderParameter)
{
if ( IsValid() == false) return L"";
std::wstring sResult;
RtfDocument* poRtfDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
std::wstring sFontName = m_sName;
std::wstring sResult;
if( sFontName.empty() )
RtfDocument* poRtfDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
std::wstring sFontName = m_sName;
if( sFontName.empty() )
{
if( PROP_DEF != poRtfDocument->m_oProperty.m_nDefFont )
{
@ -156,12 +156,14 @@ std::wstring RtfFont::RenderToOOX(RenderParameter oRenderParameter)
poRtfDocument->m_oFontTable.GetFont( poRtfDocument->m_oProperty.m_nDefFont, oDefFont );
sFontName = oDefFont.m_sName;
}
if( sFontName.empty())
sFontName = L"Arial";
if (sFontName.empty())
{
sFontName = poRtfDocument->m_oProperty.m_sDefFontName;
}
}
if( RENDER_TO_OOX_PARAM_MINOR_FONT == oRenderParameter.nType )
{
std::wstring sTag;
std::wstring sTag;
switch(m_eFontTheme)
{
case ft_flominor:
@ -1347,8 +1349,10 @@ void RtfCharProperty::SetDefaultRtf()
m_poShading.SetDefaultRtf();
m_poBorder.SetDefaultRtf();
if (false == m_bListLevel)
m_nFontSize = 24;
//if (false == m_bListLevel)
//{
//m_nFontSize = DefaultStyle::FontSize;
//}
}
void RtfCharProperty::SetDefaultOOX()
{
@ -1586,7 +1590,11 @@ std::wstring RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
bool bInsert = false;
bool bDelete = false;
if (m_nFontSize == PROP_DEF)
{
m_nFontSize = poRtfDocument->m_oProperty.m_nDefFontSize;
}
if( RENDER_TO_OOX_PARAM_MATH == oRenderParameter.nType)
{//w:rPr в m:ctrlPr
if (m_nRevised != PROP_DEF)

View File

@ -55,6 +55,9 @@ void RtfDocumentProperty::SetDefaultOOX()
}
void RtfDocumentProperty::SetDefault()
{
m_sDefFontName = L"Times New Roman";
m_nDefFontSize = 24;
m_eCodePage = cp_ansi;
m_nTabWidth = 720; //todo -1
m_nDefFont = PROP_DEF;

View File

@ -44,8 +44,10 @@ public:
cp_pc, // pc IBM PC code page 437
cp_pca, // pca IBM PC code page 850, used by IBM Personal System/2 (not implemented in version 1 of Microsoft Word for OS/2)
} m_eCodePage;
std::wstring m_sDefFontName;
int m_nDefFontSize;
int m_nAnsiCodePage;
int m_nAnsiCodePage;
int m_nDefFont;
int m_nDefMathFont;
int m_nDefLang;