Commit c880c3d1 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

RtfFormatWriter - fix styled tables

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@67841 954022d7-b5bf-4e40-9824-e11837661b57
parent 59c16015
......@@ -43,22 +43,11 @@ public:
if (m_ooxBorder)
{
if ((m_ooxBorder->m_oColor.IsInit()) && (m_ooxBorder->m_oColor->GetValue() == SimpleTypes::hexcolorRGB))
{
RtfColor oColor(m_ooxBorder->m_oColor->Get_R(), m_ooxBorder->m_oColor->Get_G(), m_ooxBorder->m_oColor->Get_B());
oOutputBorder.m_nColor = oParam.oRtf->m_oColorTable.AddItem( oColor );
}
if (m_ooxBorder->m_oSpace.IsInit())
{
oOutputBorder.m_nSpace = RtfUtility::pt2Twip(m_ooxBorder->m_oSpace->ToPoints());
}
if (m_ooxBorder->m_oSz.IsInit())
{
oOutputBorder.m_nWidth = RtfUtility::pt2Twip(m_ooxBorder->m_oSz->ToPoints());// = 5 * nSize / 2;//w:sz 1/8 twips (equivalent to 1/576th of an inch)
}
if (m_ooxBorder->m_oVal.IsInit())
{
if (m_ooxBorder->m_oVal->GetValue() == SimpleTypes::bordervalueNone ) return true;
// это отсутствие свойства а не бордера (Nil)
switch(m_ooxBorder->m_oVal->GetValue())
{
//case SimpleTypes::bordervalueApples : return _T("apples");
......@@ -252,12 +241,27 @@ public:
//case SimpleTypes::bordervalueWoodwork : return _T("woodwork");
//case SimpleTypes::bordervalueXIllusions : return _T("xIllusions");
//case SimpleTypes::bordervalueZanyTriangles : return _T("zanyTriangles");
}
//case SimpleTypes::bordervalueZigZag : return _T("zigZag");
//case SimpleTypes::SimpleTypes::bordervalueZigZagStitch : return _T("zigZagStitch");
//oOutputBorder.m_eType = RtfBorder::bt_brdrsh;
//oOutputBorder.m_eType = RtfBorder::bt_brdrhair;
}
}
if ((m_ooxBorder->m_oColor.IsInit()) && (m_ooxBorder->m_oColor->GetValue() == SimpleTypes::hexcolorRGB))
{
RtfColor oColor(m_ooxBorder->m_oColor->Get_R(), m_ooxBorder->m_oColor->Get_G(), m_ooxBorder->m_oColor->Get_B());
oOutputBorder.m_nColor = oParam.oRtf->m_oColorTable.AddItem( oColor );
}
if (m_ooxBorder->m_oSpace.IsInit())
{
oOutputBorder.m_nSpace = RtfUtility::pt2Twip(m_ooxBorder->m_oSpace->ToPoints());
}
if (m_ooxBorder->m_oSz.IsInit())
{
oOutputBorder.m_nWidth = RtfUtility::pt2Twip(m_ooxBorder->m_oSz->ToPoints());// = 5 * nSize / 2;//w:sz 1/8 twips (equivalent to 1/576th of an inch)
}
}
return true;
}
......
......@@ -135,7 +135,7 @@ public:
oNewSubStyle->m_sName = oNewStyle->m_sName;
if( true == oNewSubStyle->IsValid() && RtfStyle::stTable == oNewSubStyle->m_eType )
if( /*true == oNewSubStyle->IsValid() && */RtfStyle::stTable == oNewSubStyle->m_eType )
{
oNewSubStyle->m_nID = oParam.oRtf->m_oStyleTable.GetCount() + 1;
......@@ -233,7 +233,10 @@ public:
if (oox_tableStyle == NULL) return false;
if (oOutputStyle == NULL)
oOutputStyle = RtfStylePtr( new RtfTableStyle() );
{
oOutputStyle = RtfStylePtr( new RtfTableStyle() );
oOutputStyle->m_nID = oParam.oRtf->m_oStyleTable.GetCount() + 1;
}
RtfStyle::StyleType eStyleType = oOutputStyle->m_eType;//todooo проверить
if (oox_tableStyle->m_oRunPr.IsInit() &&
......
......@@ -11,7 +11,7 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
if(m_ooxTable->m_oTableProperties )
{
OOXtblPrReader otblPrReader(m_ooxTable->m_oTableProperties);
otblPrReader.Parse( oParam, oOutputTable.m_oProperty);
otblPrReader.Parse( oParam, oOutputTable.m_oProperty);
bExistTablPr = true;
}
......@@ -26,15 +26,18 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
if( RtfStyle::stTable == oResultStyle->m_eType )
{
poTableStyle = boost::static_pointer_cast<RtfTableStyle, RtfStyle>( oResultStyle );
poTableStyle->m_oTableProp = oOutputTable.m_oProperty; //TableProperty ставим как уже прочитали чтобы не терять порядок применения свойст
poTableStyle->m_oTableProp = oOutputTable.m_oProperty;
//TableProperty ставим как уже прочитали чтобы не терять порядок применения свойст
//например индент последовательно затирает друг друга в стилях, numbering, просто в свойствах
//затирает свойства и на First, Last .... todoooo
}
}
}
else if( true == bExistTablPr )
{
RtfTableStylePtr poTableStyle = RtfTableStylePtr( new RtfTableStyle() );
poTableStyle->m_oTableProp.Merge( oOutputTable.m_oProperty );
poTableStyle->m_oTableProp.Merge( oOutputTable.m_oProperty ); // будут использованы ниже
}
if( m_ooxTable->m_oTblGrid.IsInit() )
......@@ -46,13 +49,16 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
}
}
long nRowCount = m_ooxTable->m_nCountRow;
long nRowCount = m_ooxTable->m_nCountRow, nCurRow = 0;
for( int i = 0; i < m_ooxTable->m_arrItems.size(); i++ )
{
if (m_ooxTable->m_arrItems[i] == NULL) continue;
if (m_ooxTable->m_arrItems[i]->getType() != OOX::et_w_tr) continue;
ReaderParameter newParam = oParam;
newParam.poTableStyle = poTableStyle;
RtfTableRowPtr oNewRow( new RtfTableRow() );
//применяем свойства таблицы к каждому row
//т.к. в RTF нет свойств таблиц и все свойства записываются в свойства row
......@@ -61,7 +67,7 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
OOX::Logic::CTr *ooxRow = dynamic_cast<OOX::Logic::CTr *>(m_ooxTable->m_arrItems[i]);
OOXTableRowReader oRowReader(ooxRow);
oRowReader.Parse( oParam, *oNewRow, i, nRowCount );
oRowReader.Parse( newParam, *oNewRow, nCurRow++, nRowCount );
oOutputTable.AddItem( oNewRow );
}
oOutputTable.CalculateCellx( *oParam.oRtf );
......
......@@ -28,26 +28,26 @@ public:
otrPrReader.Parse( oParam, oOutputRow.m_oProperty, oConditionStyle);// может поменяться на любой condition(first row)
}
int nCellCount = m_ooxRowTable->m_nCountCell;
int nCellCount = m_ooxRowTable->m_nCountCell, nCurCell = 0;
for( int nCurCell = 0; nCurCell < nCellCount; nCurCell++)
for( int i = 0; i < m_ooxRowTable->m_arrItems.size(); i++)
{
if (m_ooxRowTable->m_arrItems[i] == NULL) continue;
if (m_ooxRowTable->m_arrItems[i]->getType() != OOX::et_w_tc)continue;//todooo bookmarks
RtfTableCellPtr oNewCell( new RtfTableCell() );
OOX::Logic::CTc *ooxCell = NULL;
if (nCurCell < m_ooxRowTable->m_arrItems.size())
ooxCell = dynamic_cast<OOX::Logic::CTc *>(m_ooxRowTable->m_arrItems[nCurCell]);
if (ooxCell)
{
OOXTableCellReader oCellReader(ooxCell);
oCellReader.Parse( oParam, *oNewCell, oConditionStyle, nCurCell, nCurRow, nCellCount, nRowCount );
//добавляем cell
oOutputRow.AddItem(oNewCell);
//свойства cell в row
oOutputRow.m_oProperty.AddItem( oNewCell->m_oProperty );
}
ooxCell = dynamic_cast<OOX::Logic::CTc *>(m_ooxRowTable->m_arrItems[i]);
OOXTableCellReader oCellReader(ooxCell);
oCellReader.Parse( oParam, *oNewCell, oConditionStyle, nCurCell++, nCurRow, nCellCount, nRowCount );
//добавляем cell
oOutputRow.AddItem(oNewCell);
//свойства cell в row
oOutputRow.m_oProperty.AddItem( oNewCell->m_oProperty );
}
return true;
}
......
......@@ -246,7 +246,7 @@ private:
oOutputProperty.m_oBorderLeft.Merge( oInputStyle->m_oTableProp.m_oBorderLeft );
if( nBoundRight == nCurX )
oOutputProperty.m_oBorderRight.Merge( oInputStyle->m_oTableProp.m_oBorderRight );
else
else if (oInputStyle->m_oTableProp.m_bAutoNoColBand != 1)
oOutputProperty.m_oBorderRight.Merge( oInputStyle->m_oTableProp.m_oBorderVert );
}
else if( nBoundRight == nCurX )
......@@ -265,7 +265,7 @@ private:
oOutputProperty.m_oBorderTop.Merge( oInputStyle->m_oTableProp.m_oBorderTop );
if( nBoundBottom == nCurY )
oOutputProperty.m_oBorderBottom.Merge( oInputStyle->m_oTableProp.m_oBorderBottom );
else
else if (oInputStyle->m_oTableProp.m_bAutoNoRowBand != 1)
oOutputProperty.m_oBorderBottom.Merge( oInputStyle->m_oTableProp.m_oBorderHor );
}
else if( nBoundBottom == nCurY )
......
......@@ -2,32 +2,32 @@
#include "RtfDocument.h"
CString RtfFontTable::RenderToRtf(RenderParameter oRenderParameter)
{
////записывает default charset и codepage
//RtfDocument* poDocument = static_cast<RtfDocument*>( oRenderParameter.poDocument );
//if( PROP_DEF != poDocument->m_oProperty.m_nAnsiCodePage )
//{
// int nCodepage = poDocument->m_oProperty.m_nAnsiCodePage;
// int nCharset = RtfUtility::CodepageToCharset( nCodepage );
// for( int i = 0; i < (int)m_aArray.size(); i++ )
// {
// m_aArray[i].m_nCharset = nCharset;
// m_aArray[i].m_nCodePage = nCodepage;
// }
//}
CString sResult;
if( m_aArray.size() > 0 )
{
sResult.Append(_T("{\\fonttbl"));
RenderParameter oNewParameter = oRenderParameter;
oNewParameter.nType = RENDER_TO_RTF_PARAM_FONT_TBL;
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.AppendFormat(_T("%ls"),m_aArray[i].RenderToRtf( oNewParameter ).GetBuffer());
sResult.Append(_T("}"));
}
return sResult;
}
{
////записывает default charset и codepage
//RtfDocument* poDocument = static_cast<RtfDocument*>( oRenderParameter.poDocument );
//if( PROP_DEF != poDocument->m_oProperty.m_nAnsiCodePage )
//{
// int nCodepage = poDocument->m_oProperty.m_nAnsiCodePage;
// int nCharset = RtfUtility::CodepageToCharset( nCodepage );
// for( int i = 0; i < (int)m_aArray.size(); i++ )
// {
// m_aArray[i].m_nCharset = nCharset;
// m_aArray[i].m_nCodePage = nCodepage;
// }
//}
CString sResult;
if( m_aArray.size() > 0 )
{
sResult.Append(_T("{\\fonttbl"));
RenderParameter oNewParameter = oRenderParameter;
oNewParameter.nType = RENDER_TO_RTF_PARAM_FONT_TBL;
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.AppendFormat(_T("%ls"),m_aArray[i].RenderToRtf( oNewParameter ).GetBuffer());
sResult.Append(_T("}"));
}
return sResult;
}
CString RtfListTable::RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult;
......
......@@ -154,28 +154,29 @@ public:
{
RtfStylePtr oResultStyle;
RtfStyle::StyleType eStyleType = RtfStyle::st_none;
int nStyleId = oInputStyle->m_nID;
int nLinked = PROP_DEF;
int nBaseOn = oInputStyle->m_nBasedOn;
if( RtfStyle::stCharacter == oInputStyle->m_eType )
{
if( RtfStyle::stCharacter == oInputStyle->m_eType )
{
eStyleType = RtfStyle::stCharacter;
oResultStyle = RtfCharStylePtr( new RtfCharStyle() );
}
else if( RtfStyle::stParagraph == oInputStyle->m_eType )
{
}
else if( RtfStyle::stParagraph == oInputStyle->m_eType )
{
eStyleType = RtfStyle::stParagraph;
oResultStyle = RtfParagraphStylePtr( new RtfParagraphStyle() );
nLinked = oInputStyle->m_nLink;//linked будем смотреть только у стилей параграфа, чтобы избежать рекурсии
}
else if( RtfStyle::stTable == oInputStyle->m_eType )
{
}
else if( RtfStyle::stTable == oInputStyle->m_eType )
{
eStyleType = RtfStyle::stTable;
oResultStyle = RtfTableStylePtr( new RtfTableStyle() );
}
else
return oInputStyle;
}
else
return oInputStyle; //ОПАСНО .. потом может другим затереться todooo
RtfStylePtr oLinkedStyle;
//if( PROP_DEF != nLinked && nStyleId != nLinked)
......@@ -191,21 +192,18 @@ public:
if( true == GetStyle( nBaseOn, oTemStyle) )
oBaseStyle = GetStyleResulting( oTemStyle );
}
if( NULL == oLinkedStyle && NULL == oBaseStyle )
return oInputStyle;
else
{
//Опытным путем установлено - Base старше Link
if( NULL != oLinkedStyle )
{
oResultStyle->Merge( oLinkedStyle );
}
if( NULL != oBaseStyle )
{
oResultStyle->Merge( oBaseStyle );
}
oResultStyle->Merge( oInputStyle );
}
//Опытным путем установлено - Base старше Link
if( NULL != oLinkedStyle )
{
oResultStyle->Merge( oLinkedStyle );
}
if( NULL != oBaseStyle )
{
oResultStyle->Merge( oBaseStyle );
}
oResultStyle->Merge( oInputStyle );
return oResultStyle;
}
CString RenderToRtf(RenderParameter oRenderParameter)
......
......@@ -128,73 +128,4 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter)
//sResult.AppendFormat( _T("<v:imagedata r:id=\"%ls\""), srId );
return srId;
}
//bool RtfPicture::LoadPicture( IUnknown** piImage, CString sPath )
//{
// ImageStudio::IImageTransformsPtr piTransform = NULL;
// HRESULT hRes = piTransform.CreateInstance( ImageStudio::CLSID_ImageTransforms );
// if( FAILED(hRes) || NULL == piTransform )
// return false;
//
// VARIANT vImage;
// CString sTransformation = _T("<ImageFile-LoadImage sourcepath='") + sPath + _T("'/>");
// BSTR bstrLoad = sTransformation.AllocSysString();
// if( piTransform->SetXml(bstrLoad) )
// if(piTransform->Transform())
// piTransform->GetResult( 0, &vImage );
// (*piImage) = vImage.punkVal;
// SysFreeString( bstrLoad );
// if( NULL == (*piImage) )
// return false;
//
// //ImageFile::IImageFile3* piImageFile = NULL;
// //CoCreateInstance( __uuidof(ImageFile::ImageFile3) , NULL, CLSCTX_INPROC, __uuidof(ImageFile::IImageFile3), (void**)(&piImageFile));
// //BSTR bstrFilePath = sTempFile.AllocSysString();
// //piImageFile->SaveImage2( &m_piPicture, IMAGEFORMAT_PNG, bstrFilePath);
// //SysFreeString( bstrFilePath );
// return true;
//}
//bool RtfPicture::SavePicture( IUnknown* piImage, CString sPath, long nFormat )
//{
// if( NULL == piImage )
// return false;
// ImageStudio::IImageTransformsPtr piTransform = NULL;
// HRESULT hRes = piTransform.CreateInstance( ImageStudio::CLSID_ImageTransforms );
// if( FAILED(hRes) || NULL == piTransform )
// return false;
// CString sFormat = _T("");
// switch( nFormat )
// {
// case IMAGEFORMAT_WMF: sFormat = _T("Wmf");break;
// case IMAGEFORMAT_PNG: sFormat = _T("Png");break;
// case IMAGEFORMAT_JPE: sFormat = _T("Jpg");break;
// }
// if( _T("") == sFormat )
// return false;
//
// VARIANT vImage;
// vImage.vt = VT_UNKNOWN;
// vImage.punkVal = piImage;
// piTransform->SetSource( 0, vImage);
//
// CString sTransformation = _T("<ImageFile-SaveAs");
// sTransformation.Append( sFormat );
// sTransformation.Append( _T(" destinationpath=\"") );
// sTransformation.Append( sPath );
// sTransformation.Append( _T("\" format=\"8888\" />") );
//
// BSTR bstrLoad = sTransformation.AllocSysString();
//
// if( piTransform->SetXml(bstrLoad) )
// if(piTransform->Transform())
// piTransform->GetResult( 0, &vImage );
// RELEASEINTERFACE( vImage.punkVal );
// SysFreeString( bstrLoad );
//
// //ImageFile::IImageFile3* piImageFile = NULL;
// //CoCreateInstance( __uuidof(ImageFile::ImageFile3) , NULL, CLSCTX_INPROC, __uuidof(ImageFile::IImageFile3), (void**)(&piImageFile));
// //BSTR bstrFilePath = sTempFile.AllocSysString();
// //piImageFile->SaveImage2( &m_piPicture, IMAGEFORMAT_PNG, bstrFilePath);
// //SysFreeString( bstrFilePath );
// return true;
//}
}
\ No newline at end of file
......@@ -502,12 +502,12 @@ CString RtfBorder::RenderToRtf(RenderParameter oRenderParameter)
case bt_brdroutset: sResult = _T("\\brdroutset"); break;
case bt_brdrnone: sResult = _T("\\brdrnone"); break;
}
if( PROP_DEF != m_nWidth )
sResult.AppendFormat( _T("\\brdrw%d"),m_nWidth );
if( PROP_DEF != m_nSpace )
sResult.AppendFormat( _T("\\brsp%d"),m_nSpace );
if( PROP_DEF != m_nWidth && m_nWidth > 0)
sResult.AppendFormat( _T("\\brdrw%d"), m_nWidth );
if( PROP_DEF != m_nSpace && m_nSpace > 0)
sResult.AppendFormat( _T("\\brsp%d"), m_nSpace );
if( PROP_DEF != m_nColor )
sResult.AppendFormat( _T("\\brdrcf%d"),m_nColor );
sResult.AppendFormat( _T("\\brdrcf%d"), m_nColor );
return sResult;
}
CString RtfBorder::RenderToOOX(RenderParameter oRenderParameter)
......@@ -1624,36 +1624,41 @@ CString RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter)
if( true == m_oShading.IsValid() )
sResult.Append( m_oShading.RenderToRtf( oRenderParameter ) );
bool border_sides = false;
if( true == m_oBorderTop.IsValid() )
{
sResult.Append(_T("\\brdrt"));
sResult.Append( m_oBorderTop.RenderToRtf( oRenderParameter ) );
border_sides = true;
}
if( true == m_oBorderLeft.IsValid() )
{
sResult.Append(_T("\\brdrl"));
sResult.Append( m_oBorderLeft.RenderToRtf( oRenderParameter ) );
border_sides = true;
}
if( true == m_oBorderBottom.IsValid() )
{
sResult.Append(_T("\\brdrb"));
sResult.Append( m_oBorderBottom.RenderToRtf( oRenderParameter ) );
border_sides = true;
}
if( true == m_oBorderRight.IsValid() )
{
sResult.Append(_T("\\brdrr"));
sResult.Append( m_oBorderRight.RenderToRtf( oRenderParameter ) );
}
if( true == m_oBorderBox.IsValid() )
{
sResult.Append(_T("\\box"));
sResult.Append( m_oBorderBox.RenderToRtf( oRenderParameter ) );
border_sides = true;
}
if( true == m_oBorderBar.IsValid() )
{
sResult.Append(_T("\\brdrbar"));
sResult.Append( m_oBorderBar.RenderToRtf( oRenderParameter ) );
}
if( true == m_oBorderBox.IsValid() && !border_sides)
{
sResult.Append(_T("\\box"));
sResult.Append( m_oBorderBox.RenderToRtf( oRenderParameter ) );
}
if( true == m_oFrame.IsValid() )
sResult.Append( m_oFrame.RenderToRtf( oRenderParameter ) );
......@@ -1923,8 +1928,6 @@ CString RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter)
RENDER_RTF_BOOL( m_bHideMark, sResult, _T("clhidemark") )
if( true == m_oBorderDiagonalLR.IsValid() )
{
sResult.Append(_T("\\cldglu"));
......@@ -2236,12 +2239,12 @@ CString RtfTableProperty::RenderToRtf(RenderParameter oRenderParameter)
sResult.Append(_T("\\trbrdrb"));
sResult.Append(m_oBorderBottom.RenderToRtf( oRenderParameter ) );
}
if( m_oBorderVert.IsValid() == true )
if( m_oBorderVert.IsValid() == true && m_bAutoNoColBand != 1)
{
sResult.Append(_T("\\trbrdrv"));
sResult.Append(m_oBorderVert.RenderToRtf( oRenderParameter ) );
}
if( m_oBorderHor.IsValid() == true )
if( m_oBorderHor.IsValid() == true && m_bAutoNoRowBand != 1)
{
sResult.Append(_T("\\trbrdrh"));
sResult.Append(m_oBorderHor.RenderToRtf( oRenderParameter ) );
......@@ -2903,85 +2906,88 @@ else if( TYPE_RTF_PROPERTY_STYLE_TABLE == oStyle->GetType() )
}
void RtfTableStyle::Merge( RtfStylePtr oStyle )
{
RtfStyle::Merge( oStyle );
if( TYPE_RTF_PROPERTY_STYLE_CHAR == oStyle->GetType() )
{
RtfCharStylePtr oCharStyle = boost::static_pointer_cast<RtfCharStyle, RtfStyle>( oStyle );
m_oCharProp.Merge( oCharStyle->m_oCharProp );
}
else if( TYPE_RTF_PROPERTY_STYLE_PARAGRAPH == oStyle->GetType() )
{
RtfParagraphStylePtr oParagraphStyle = boost::static_pointer_cast<RtfParagraphStyle, RtfStyle>( oStyle );
m_oParProp.Merge( oParagraphStyle->m_oParProp );
m_oCharProp.Merge( oParagraphStyle->m_oCharProp );
}
if( TYPE_RTF_PROPERTY_STYLE_TABLE == oStyle->GetType() )
{
RtfTableStylePtr oTableStyle = boost::static_pointer_cast<RtfTableStyle, RtfStyle>( oStyle );
m_oTableProp.Merge( oTableStyle->m_oTableProp );
m_oRowProp.Merge( oTableStyle->m_oRowProp );
m_oCellProp.Merge( oTableStyle->m_oCellProp );
m_oParProp.Merge( oTableStyle->m_oParProp );
m_oCharProp.Merge( oTableStyle->m_oCharProp );
if( NULL != oTableStyle->m_oFirstRow )
{
m_oFirstRow = RtfTableStylePtr( new RtfTableStyle() );
m_oFirstRow->Merge( oTableStyle->m_oFirstRow );
}
if( NULL != oTableStyle->m_oLastRow )
{
m_oLastRow = RtfTableStylePtr( new RtfTableStyle() );
m_oLastRow->Merge( oTableStyle->m_oLastRow );
}
if( NULL != oTableStyle->m_oFirstCol )
{
m_oFirstCol = RtfTableStylePtr( new RtfTableStyle() );
m_oFirstCol->Merge( oTableStyle->m_oFirstCol );
}
if( NULL != oTableStyle->m_oLastCol )
{
m_oLastCol = RtfTableStylePtr( new RtfTableStyle() );
m_oLastCol->Merge( oTableStyle->m_oLastCol );
}
if( NULL != oTableStyle->m_oBandHorEven )
{
m_oBandHorEven = RtfTableStylePtr( new RtfTableStyle() );
m_oBandHorEven->Merge( oTableStyle->m_oBandHorEven );
}
if( NULL != oTableStyle->m_oBandVerEven )
{
m_oBandVerEven = RtfTableStylePtr( new RtfTableStyle() );
m_oBandVerEven->Merge( oTableStyle->m_oBandVerEven );
}
if( NULL != oTableStyle->m_oBandHorOdd )
{
m_oBandHorOdd = RtfTableStylePtr( new RtfTableStyle() );
m_oBandHorOdd->Merge( oTableStyle->m_oBandHorOdd );
}
if( NULL != oTableStyle->m_oBandVerOdd )
{
m_oBandVerOdd = RtfTableStylePtr( new RtfTableStyle() );
m_oBandVerOdd->Merge( oTableStyle->m_oBandVerOdd );
}
if( NULL != oTableStyle->m_oNWCell )
{
m_oNWCell = RtfTableStylePtr( new RtfTableStyle() );
m_oNWCell->Merge( oTableStyle->m_oNWCell );
}
if( NULL != oTableStyle->m_oNECell )
RtfStyle::Merge( oStyle );
if( TYPE_RTF_PROPERTY_STYLE_CHAR == oStyle->GetType() )
{
m_oNECell = RtfTableStylePtr( new RtfTableStyle() );
m_oNECell->Merge( oTableStyle->m_oNECell );
RtfCharStylePtr oCharStyle = boost::static_pointer_cast<RtfCharStyle, RtfStyle>( oStyle );
m_oCharProp.Merge( oCharStyle->m_oCharProp );
}
if( NULL != oTableStyle->m_oSWCell )
else if( TYPE_RTF_PROPERTY_STYLE_PARAGRAPH == oStyle->GetType() )
{
m_oSWCell = RtfTableStylePtr( new RtfTableStyle() );
m_oSWCell->Merge( oTableStyle->m_oSWCell );
RtfParagraphStylePtr oParagraphStyle = boost::static_pointer_cast<RtfParagraphStyle, RtfStyle>( oStyle );
m_oParProp.Merge( oParagraphStyle->m_oParProp );
m_oCharProp.Merge( oParagraphStyle->m_oCharProp );
}
if( NULL != oTableStyle->m_oSECell )
if( TYPE_RTF_PROPERTY_STYLE_TABLE == oStyle->GetType() )
{
m_oSECell = RtfTableStylePtr( new RtfTableStyle() );
m_oSECell->Merge( oTableStyle->m_oSECell );
RtfTableStylePtr oTableStyle = boost::static_pointer_cast<RtfTableStyle, RtfStyle>( oStyle );
m_oTableProp.Merge( oTableStyle->m_oTableProp );
m_oRowProp.Merge( oTableStyle->m_oRowProp );
m_oCellProp.Merge( oTableStyle->m_oCellProp );
m_oParProp.Merge( oTableStyle->m_oParProp );
m_oCharProp.Merge( oTableStyle->m_oCharProp );
if( NULL != oTableStyle->m_oFirstRow )
{
m_oFirstRow = RtfTableStylePtr( new RtfTableStyle() );
m_oFirstRow->Merge( oTableStyle->m_oFirstRow );
}
if( NULL != oTableStyle->m_oLastRow )
{
m_oLastRow = RtfTableStylePtr( new RtfTableStyle() );
m_oLastRow->Merge( oTableStyle->m_oLastRow );
}
if( NULL != oTableStyle->m_oFirstCol )
{
m_oFirstCol = RtfTableStylePtr( new RtfTableStyle() );
m_oFirstCol->Merge( oTableStyle->m_oFirstCol );
}
if( NULL != oTableStyle->m_oLastCol )
{
m_oLastCol = RtfTableStylePtr( new RtfTableStyle() );
m_oLastCol->Merge( oTableStyle->m_oLastCol );
}
if( NULL != oTableStyle->m_oBandHorEven )
{
m_oBandHorEven = RtfTableStylePtr( new RtfTableStyle() );
m_oBandHorEven->Merge( oTableStyle->m_oBandHorEven );
}
if( NULL != oTableStyle->m_oBandVerEven )
{
m_oBandVerEven = RtfTableStylePtr( new RtfTableStyle() );
m_oBandVerEven->Merge( oTableStyle->m_oBandVerEven );
}
if( NULL != oTableStyle->m_oBandHorOdd )
{
m_oBandHorOdd = RtfTableStylePtr( new RtfTableStyle() );
m_oBandHorOdd->Merge( oTableStyle->m_oBandHorOdd );
}
if( NULL != oTableStyle->m_oBandVerOdd )
{
m_oBandVerOdd = RtfTableStylePtr( new RtfTableStyle() );
m_oBandVerOdd->Merge( oTableStyle->m_oBandVerOdd );
}
if( NULL != oTableStyle->m_oNWCell )
{
m_oNWCell = RtfTableStylePtr( new RtfTableStyle() );
m_oNWCell->Merge( oTableStyle->m_oNWCell );
}
if( NULL != oTableStyle->m_oNECell )
{
m_oNECell = RtfTableStylePtr( new RtfTableStyle() );
m_oNECell->Merge( oTableStyle->m_oNECell );
}
if( NULL != oTableStyle->m_oSWCell )
{
m_oSWCell = RtfTableStylePtr( new RtfTableStyle() );
m_oSWCell->Merge( oTableStyle->m_oSWCell );
}
if( NULL != oTableStyle->m_oSECell )
{
m_oSECell = RtfTableStylePtr( new RtfTableStyle() );
m_oSECell->Merge( oTableStyle->m_oSECell );
}
}
}
}
......@@ -2322,6 +2322,7 @@ public:
m_oBorderBottom.Merge( oCellPr.m_oBorderBottom );
m_oBorderInsideH.Merge( oCellPr.m_oBorderInsideH );
m_oBorderInsideV.Merge( oCellPr.m_oBorderInsideV );
m_oShading.Merge( oCellPr.m_oShading );
MERGE_PROPERTY_DEF( m_eAlign, oCellPr, ca_none )
......@@ -2908,102 +2909,43 @@ public:
SetDefault();
m_eType = stCharacter;
}
int GetType()
{
return TYPE_RTF_PROPERTY_STYLE_CHAR;
}
void Merge( RtfStylePtr oStyle );
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
int GetType()
{
return TYPE_RTF_PROPERTY_STYLE_CHAR;
}
void Merge( RtfStylePtr oStyle );
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
};
class RtfParagraphStyle: public RtfCharStyle
{
public: RtfParagraphProperty m_oParProp;
public:RtfParagraphStyle()
{
SetDefault();
m_eType = stParagraph;
}
int GetType()
{
return TYPE_RTF_PROPERTY_STYLE_PARAGRAPH;
}
void Merge( RtfStylePtr oStyle );
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
public:
RtfParagraphProperty m_oParProp;
RtfParagraphStyle()
{
SetDefault();
m_eType = stParagraph;
}
int GetType()
{
return TYPE_RTF_PROPERTY_STYLE_PARAGRAPH;
}
void Merge( RtfStylePtr oStyle );
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
};
//class RtfTableStyleProperty : public IRenderableProperty
//{
//public: typedef enum{ av_none,
// av_tsvertalt, //\tsvertalt Top vertical alignment of cell
// av_tsvertalc, //\tsvertalc Center vertical alignment of cell
// av_tsvertalb //\tsvertalb Bottom vertical alignment of cell
// }AlignVertical;
// int m_nPaddingLeft; //\tscellpaddlN Left padding value.
// int m_nIsPaddingLeft; //\tscellpaddflN Units for \tscellpaddlN
// int m_nPaddingRight; //\tscellpaddrN Right padding value
// int m_nIsPaddingRight; //\tscellpaddfrN Units for \tscellpaddrN
// int m_nPaddingTop; //\tscellpaddtN Top padding value.
// int m_nIsPaddingTop; //\tscellpaddftN Units for \tscellpaddtN
// int m_nPaddingBottom; //\tscellpaddbN Bottom padding value
// int m_nIsPaddingBottom; //\tscellpaddfbN Units for \tscellpaddbN
//
// AlignVertical m_eAlign;
// int m_bNoCellWrap;//\tsnowrap No cell wrapping
//
// RtfShadingTableStyle m_oShading;
//
//
// RtfBorder m_oCellTopBorder; //\tsbrdrt Top border for cell
// RtfBorder m_oCellBottomBorder; //\tsbrdrb Bottom border for cell
// RtfBorder m_oCellLeftBorder; //\tsbrdrl Left border for cell
// RtfBorder m_oCellRightBorder; //\tsbrdrr Right border for cell
// RtfBorder m_oCellHorBorder; //\tsbrdrh Horizontal (inside) border for cell
// RtfBorder m_oCellVerBorder; //\tsbrdrv Vertical (inside) border for cell
// int m_nRowBandNumber; //\tscbandshN Count of rows in a row band
// int m_nCellBandNumber; //\tscbandsvN Count of cells in a cell band
//
// RtfTableStyleProperty()
// {
// SetDefault();
// }
// void SetDefault()
// {
// DEFAULT_PROPERTY( m_nPaddingLeft )
// DEFAULT_PROPERTY( m_nIsPaddingLeft )
// DEFAULT_PROPERTY( m_nPaddingRight )
// DEFAULT_PROPERTY( m_nIsPaddingRight )
// DEFAULT_PROPERTY( m_nPaddingTop )
// DEFAULT_PROPERTY( m_nIsPaddingTop )
// DEFAULT_PROPERTY( m_nPaddingBottom )
// DEFAULT_PROPERTY( m_nIsPaddingBottom )
// m_eAlign = av_none;
// DEFAULT_PROPERTY( m_bNoCellWrap )
// DEFAULT_PROPERTY( m_nRowBandNumber )
// DEFAULT_PROPERTY( m_nCellBandNumber )
//
// m_oShading.SetDefault();
// m_oCellTopBorder.SetDefault();
// m_oCellBottomBorder.SetDefault();
// m_oCellLeftBorder.SetDefault();
// m_oCellRightBorder.SetDefault();
// m_oCellHorBorder.SetDefault();
// m_oCellVerBorder.SetDefault();
// }
// CString RenderToRtf(RenderParameter oRenderParameter);
// CString RenderToOOX(RenderParameter oRenderParameter);
//};
class RtfTableStyle;
typedef boost::shared_ptr<RtfTableStyle> RtfTableStylePtr;
class RtfTableStyle: public RtfParagraphStyle
{
public:
RtfTableProperty m_oTableProp;
RtfRowProperty m_oRowProp;
RtfCellProperty m_oCellProp;
RtfTableProperty m_oTableProp;
RtfRowProperty m_oRowProp;
RtfCellProperty m_oCellProp;
// RtfTableStyleProperty m_oTableStyleProperty;
RtfTableStylePtr m_oFirstRow;
RtfTableStylePtr m_oLastRow;
......@@ -3043,6 +2985,7 @@ public:
return TYPE_RTF_PROPERTY_STYLE_TABLE;
}
void Merge( RtfStylePtr oStyle );
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
};
......
......@@ -3,707 +3,707 @@
#include "RtfOle.h"
CString RtfShape::RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
if( PROP_DEF != m_nShapeType && 0 != m_nShapeType )
{
//запоминаем координаты и если нужно поворачиваем
int nLeft = m_nLeft;
int nTop = m_nTop;
int nRight = m_nRight;
int nBottom = m_nBottom;
int nRotate = m_nRotation;
int nRelLeft = m_nRelLeft;
int nRelTop = m_nRelTop;
int nRelRight = m_nRelRight;
int nRelBottom = m_nRelBottom;
int nRelRotate = m_nRelRotation;
{
CString sResult;
if( PROP_DEF != m_nShapeType && 0 != m_nShapeType )
{
//запоминаем координаты и если нужно поворачиваем
int nLeft = m_nLeft;
int nTop = m_nTop;
int nRight = m_nRight;
int nBottom = m_nBottom;
int nRotate = m_nRotation;
if( PROP_DEF != m_nRotation && PROP_DEF != m_nLeft && PROP_DEF != m_nTop &&
PROP_DEF != m_nRight && PROP_DEF != m_nBottom )
ToRtfRotation( m_nRotation, m_nLeft, m_nTop, m_nRight, m_nBottom );
int nRelLeft = m_nRelLeft;
int nRelTop = m_nRelTop;
int nRelRight = m_nRelRight;
int nRelBottom = m_nRelBottom;
int nRelRotate = m_nRelRotation;
if( PROP_DEF != m_nRelRotation && PROP_DEF != m_nRelLeft && PROP_DEF != m_nRelTop &&
PROP_DEF != m_nRelRight && PROP_DEF != m_nRelBottom )
ToRtfRotation( m_nRelRotation, m_nRelLeft, m_nRelTop, m_nRelRight, m_nRelBottom );
if( PROP_DEF != m_nRotation && PROP_DEF != m_nLeft && PROP_DEF != m_nTop &&
PROP_DEF != m_nRight && PROP_DEF != m_nBottom )
ToRtfRotation( m_nRotation, m_nLeft, m_nTop, m_nRight, m_nBottom );
if( st_inline == m_eShapeType )
{
if( NULL != m_oPicture )
{
if( RtfPicture::dt_wmf == m_oPicture->eDataType )
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
else
{
sResult.Append( _T("{\\*\\shppict") );
//CString sPictProp = RenderToRtfShapeProperty( oRenderParameter );
//if( false == sPictProp.IsEmpty() )
// sResult.AppendFormat( _T("{\\*\\picprop %ls}"), sPictProp );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}") );
sResult.Append( _T("{\\nonshppict") );
sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
if( PROP_DEF != m_nRelRotation && PROP_DEF != m_nRelLeft && PROP_DEF != m_nRelTop &&
PROP_DEF != m_nRelRight && PROP_DEF != m_nRelBottom )
ToRtfRotation( m_nRelRotation, m_nRelLeft, m_nRelTop, m_nRelRight, m_nRelBottom );
sResult.Append( _T("}") );
}
}
}
if( st_inline == m_eShapeType )
{
if( NULL != m_oPicture )
{
if( RtfPicture::dt_wmf == m_oPicture->eDataType )
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
else
{
sResult.Append(_T("{\\shp{\\*\\shpinst"));
RENDER_RTF_INT( m_nLeft, sResult, _T("shpleft") );
RENDER_RTF_INT( m_nTop, sResult, _T("shptop") );
RENDER_RTF_INT( m_nBottom, sResult, _T("shpbottom") );
RENDER_RTF_INT( m_nRight, sResult, _T("shpright") );
RENDER_RTF_INT( m_nID, sResult, _T("shplid") );
RENDER_RTF_INT( m_nZOrder, sResult, _T("shpz") );
RENDER_RTF_INT( m_nHeader, sResult, _T("shpfhdr") );
RENDER_RTF_INT( m_nWrapType, sResult, _T("shpwr") );
RENDER_RTF_INT( m_nWrapSideType, sResult, _T("shpwrk") );
RENDER_RTF_BOOL( m_bLockAnchor, sResult, _T("shplockanchor") );
sResult.Append( _T("{\\*\\shppict") );
//CString sPictProp = RenderToRtfShapeProperty( oRenderParameter );
//if( false == sPictProp.IsEmpty() )
// sResult.AppendFormat( _T("{\\*\\picprop %ls}"), sPictProp );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}") );
sResult.Append( _T("{\\nonshppict") );
sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
switch(m_eXAnchor)
{
case ax_page: sResult.Append( _T("\\shpbxpage") );break;
case ax_margin: sResult.Append( _T("\\shpbxmargin") );break;
case ax_column: sResult.Append( _T("\\shpbxcolumn") );break;
}
sResult.Append( _T("\\shpbxignore") );
switch(m_eYAnchor)
{
case ay_page: sResult.Append( _T("\\shpbypage") );break;
case ay_margin: sResult.Append( _T("\\shpbymargin") );break;
case ay_Para: sResult.Append( _T("\\shpbypara") );break;
}
sResult.Append( _T("\\shpbyignore") );
RENDER_RTF_INT( m_nZOrderRelative, sResult, _T("shpfblwtxt") );
sResult.Append( RenderToRtfShapeProperty( oRenderParameter ) );
//picture
if( 0 != m_oPicture )
{
sResult.Append( _T("{\\sp{\\sn pib}{\\sv ") );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}}") );
}
//textbox
if( 0 != m_aTextItems )
{
sResult.Append( _T("{\\shptxt ") );
sResult.Append( m_aTextItems->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}") );
}
sResult.Append(_T("}"));
if( 0 != m_oPicture )
{
sResult.Append(_T("{\\shprslt\\par\\plain"));
sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
sResult.Append(_T("\\par}"));
}
sResult.Append(_T("}"));
sResult.Append( _T("}") );
}
//восстанавливаем координаты и если нужно поворачиваем
m_nLeft = nLeft;
m_nTop = nTop;
m_nRight = nRight;
m_nBottom = nBottom;
m_nRotation = nRotate;
}
}
else
{
sResult.Append(_T("{\\shp{\\*\\shpinst"));
RENDER_RTF_INT( m_nLeft, sResult, _T("shpleft") );
RENDER_RTF_INT( m_nTop, sResult, _T("shptop") );
RENDER_RTF_INT( m_nBottom, sResult, _T("shpbottom") );
RENDER_RTF_INT( m_nRight, sResult, _T("shpright") );
RENDER_RTF_INT( m_nID, sResult, _T("shplid") );
RENDER_RTF_INT( m_nZOrder, sResult, _T("shpz") );
RENDER_RTF_INT( m_nHeader, sResult, _T("shpfhdr") );
RENDER_RTF_INT( m_nWrapType, sResult, _T("shpwr") );
RENDER_RTF_INT( m_nWrapSideType, sResult, _T("shpwrk") );
RENDER_RTF_BOOL( m_bLockAnchor, sResult, _T("shplockanchor") );
m_nRelLeft = nRelLeft;
m_nRelTop = nRelTop;
m_nRelRight = nRelRight;
m_nRelBottom = nRelBottom;
m_nRelRotation = nRelRotate;
switch(m_eXAnchor)
{
case ax_page: sResult.Append( _T("\\shpbxpage") );break;
case ax_margin: sResult.Append( _T("\\shpbxmargin") );break;
case ax_column: sResult.Append( _T("\\shpbxcolumn") );break;
}
sResult.Append( _T("\\shpbxignore") );
switch(m_eYAnchor)
{
case ay_page: sResult.Append( _T("\\shpbypage") );break;
case ay_margin: sResult.Append( _T("\\shpbymargin") );break;
case ay_Para: sResult.Append( _T("\\shpbypara") );break;
}
sResult.Append( _T("\\shpbyignore") );
RENDER_RTF_INT( m_nZOrderRelative, sResult, _T("shpfblwtxt") );
sResult.Append( RenderToRtfShapeProperty( oRenderParameter ) );
//picture
if( 0 != m_oPicture )
{
sResult.Append( _T("{\\sp{\\sn pib}{\\sv ") );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}}") );
}
//textbox
if( 0 != m_aTextItems )
{
sResult.Append( _T("{\\shptxt ") );
sResult.Append( m_aTextItems->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}") );
}
return sResult;
sResult.Append(_T("}"));
if( 0 != m_oPicture )
{
sResult.Append(_T("{\\shprslt\\par\\plain"));
sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
sResult.Append(_T("\\par}"));
}
sResult.Append(_T("}"));
}
//восстанавливаем координаты и если нужно поворачиваем
m_nLeft = nLeft;
m_nTop = nTop;
m_nRight = nRight;
m_nBottom = nBottom;
m_nRotation = nRotate;
m_nRelLeft = nRelLeft;
m_nRelTop = nRelTop;
m_nRelRight = nRelRight;
m_nRelBottom = nRelBottom;
m_nRelRotation = nRelRotate;
}
return sResult;
}
CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
{
CString sResult;
{
CString sResult;
//Position absolute
if( PROP_DEF != m_nPositionH )
sResult.AppendFormat( _T("{\\sp{\\sn posh}{\\sv %d}}"),m_nPositionH);
if( PROP_DEF != m_nPositionHRelative )
sResult.AppendFormat( _T("{\\sp{\\sn posrelh}{\\sv %d}}"),m_nPositionHRelative);
if( PROP_DEF != m_nPositionV )
sResult.AppendFormat( _T("{\\sp{\\sn posv}{\\sv %d}}"),m_nPositionV);
if( PROP_DEF != m_nPositionVRelative )
sResult.AppendFormat( _T("{\\sp{\\sn posrelv}{\\sv %d}}"),m_nPositionVRelative);
if( PROP_DEF != m_bLayoutInCell )
sResult.AppendFormat( _T("{\\sp{\\sn fLayoutInCell}{\\sv %d}}"),m_bLayoutInCell);
if( PROP_DEF != m_bAllowOverlap )
sResult.AppendFormat( _T("{\\sp{\\sn fAllowOverlap}{\\sv %d}}"),m_bAllowOverlap);
//Position absolute
if( PROP_DEF != m_nPositionH )
sResult.AppendFormat( _T("{\\sp{\\sn posh}{\\sv %d}}"),m_nPositionH);
if( PROP_DEF != m_nPositionHRelative )
sResult.AppendFormat( _T("{\\sp{\\sn posrelh}{\\sv %d}}"),m_nPositionHRelative);
if( PROP_DEF != m_nPositionV )
sResult.AppendFormat( _T("{\\sp{\\sn posv}{\\sv %d}}"),m_nPositionV);
if( PROP_DEF != m_nPositionVRelative )
sResult.AppendFormat( _T("{\\sp{\\sn posrelv}{\\sv %d}}"),m_nPositionVRelative);
if( PROP_DEF != m_bLayoutInCell )
sResult.AppendFormat( _T("{\\sp{\\sn fLayoutInCell}{\\sv %d}}"),m_bLayoutInCell);
if( PROP_DEF != m_bAllowOverlap )
sResult.AppendFormat( _T("{\\sp{\\sn fAllowOverlap}{\\sv %d}}"),m_bAllowOverlap);
//Position relative
if( PROP_DEF != m_nPositionHPct )
sResult.AppendFormat( _T("{\\sp{\\sn pctHorizPos}{\\sv %d}}"),m_nPositionHPct);
if( PROP_DEF != m_nPositionVPct )
sResult.AppendFormat( _T("{\\sp{\\sn pctVertPos}{\\sv %d}}"),m_nPositionVPct);
if( PROP_DEF != m_nPctWidth )
sResult.AppendFormat( _T("{\\sp{\\sn pctHoriz}{\\sv %d}}"),m_nPctWidth);
if( PROP_DEF != m_nPctHeight )
sResult.AppendFormat( _T("{\\sp{\\sn pctVert}{\\sv %d}}"),m_nPctHeight);
if( PROP_DEF != m_nPctWidthRelative )
sResult.AppendFormat( _T("{\\sp{\\sn sizerelh}{\\sv %d}}"),m_nPctWidthRelative);
if( PROP_DEF != m_nPctHeightRelative )
sResult.AppendFormat( _T("{\\sp{\\sn sizerelv}{\\sv %d}}"),m_nPctHeightRelative);
if( PROP_DEF != m_nColStart )
sResult.AppendFormat( _T("{\\sp{\\sn colStart}{\\sv %d}}"),m_nColStart);
if( PROP_DEF != m_nColSpan )
sResult.AppendFormat( _T("{\\sp{\\sn colSpan}{\\sv %d}}"),m_nColSpan);
//Rehydration
if( _T("") != m_sMetroBlob )
sResult.AppendFormat( _T("{\\sp{\\sn metroBlob}{\\sv %d}}"),m_sMetroBlob.GetBuffer());
//Position relative
if( PROP_DEF != m_nPositionHPct )
sResult.AppendFormat( _T("{\\sp{\\sn pctHorizPos}{\\sv %d}}"),m_nPositionHPct);
if( PROP_DEF != m_nPositionVPct )
sResult.AppendFormat( _T("{\\sp{\\sn pctVertPos}{\\sv %d}}"),m_nPositionVPct);
if( PROP_DEF != m_nPctWidth )
sResult.AppendFormat( _T("{\\sp{\\sn pctHoriz}{\\sv %d}}"),m_nPctWidth);
if( PROP_DEF != m_nPctHeight )
sResult.AppendFormat( _T("{\\sp{\\sn pctVert}{\\sv %d}}"),m_nPctHeight);
if( PROP_DEF != m_nPctWidthRelative )
sResult.AppendFormat( _T("{\\sp{\\sn sizerelh}{\\sv %d}}"),m_nPctWidthRelative);
if( PROP_DEF != m_nPctHeightRelative )
sResult.AppendFormat( _T("{\\sp{\\sn sizerelv}{\\sv %d}}"),m_nPctHeightRelative);
if( PROP_DEF != m_nColStart )
sResult.AppendFormat( _T("{\\sp{\\sn colStart}{\\sv %d}}"),m_nColStart);
if( PROP_DEF != m_nColSpan )
sResult.AppendFormat( _T("{\\sp{\\sn colSpan}{\\sv %d}}"),m_nColSpan);
//Rehydration
if( _T("") != m_sMetroBlob )
sResult.AppendFormat( _T("{\\sp{\\sn metroBlob}{\\sv %d}}"),m_sMetroBlob.GetBuffer());
//Object Type
if( PROP_DEF != m_bIsBullet )
sResult.AppendFormat( _T("{\\sp{\\sn fIsBullet}{\\sv %d}}"),m_bIsBullet);
if( PROP_DEF != m_nRotation )
sResult.AppendFormat( _T("{\\sp{\\sn rotation}{\\sv %d}}"),m_nRotation);
if( PROP_DEF != m_bFlipV )
sResult.AppendFormat( _T("{\\sp{\\sn fFlipV}{\\sv %d}}"),m_bFlipV);
if( PROP_DEF != m_bFlipH )
sResult.AppendFormat( _T("{\\sp{\\sn fFlipH}{\\sv %d}}"),m_bFlipH);
if( PROP_DEF != m_nShapeType )
sResult.AppendFormat( _T("{\\sp{\\sn shapeType}{\\sv %d}}"),m_nShapeType);
if( PROP_DEF != m_nWrapDistLeft )
sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistLeft}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistLeft ));
if( PROP_DEF != m_nWrapDistTop )
sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistTop}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistTop ));
if( PROP_DEF != m_nWrapDistRight )
sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistRight}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistRight ));
if( PROP_DEF != m_nWrapDistBottom )
sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistBottom}{\\sv %d}}"),RtfUtility::Twips2Emu( m_nWrapDistBottom ));
if( PROP_DEF != m_nZOrderRelative )
sResult.AppendFormat( _T("{\\sp{\\sn fBehindDocument}{\\sv %d}}"),m_nZOrderRelative);
if( PROP_DEF != m_bHidden )
sResult.AppendFormat( _T("{\\sp{\\sn fHidden}{\\sv %d}}"),m_bHidden);
//Geometry
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjustValue}{\\sv %d}}"),m_nAdjustValue );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust2Value}{\\sv %d}}"),m_nAdjustValue2 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust3Value}{\\sv %d}}"),m_nAdjustValue3 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust4Value}{\\sv %d}}"),m_nAdjustValue4 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust5Value}{\\sv %d}}"),m_nAdjustValue5 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust6Value}{\\sv %d}}"),m_nAdjustValue6 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust7Value}{\\sv %d}}"),m_nAdjustValue7 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust8Value}{\\sv %d}}"),m_nAdjustValue8 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust9Value}{\\sv %d}}"),m_nAdjustValue9 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust10Value}{\\sv %d}}"),m_nAdjustValue10 );
//Connectors
if( PROP_DEF != m_nConnectionType )
sResult.AppendFormat( _T("{\\sp{\\sn cxk}{\\sv %d}}"),m_nConnectionType );
if( PROP_DEF != m_nConnectorStyle )
sResult.AppendFormat( _T("{\\sp{\\sn cxstyle}{\\sv %d}}"),m_nConnectorStyle );
//WordArt Effects
if( PROP_DEF != m_nCropFromTop )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromTop}{\\sv %d}}"),m_nCropFromTop );
if( PROP_DEF != m_nCropFromBottom )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromBottom}{\\sv %d}}"),m_nCropFromBottom );
if( PROP_DEF != m_nCropFromLeft )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromLeft}{\\sv %d}}"),m_nCropFromLeft );
if( PROP_DEF != m_nCropFromRight )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromRight}{\\sv %d}}"),m_nCropFromRight );
//Object Type
if( PROP_DEF != m_bIsBullet )
sResult.AppendFormat( _T("{\\sp{\\sn fIsBullet}{\\sv %d}}"),m_bIsBullet);
if( PROP_DEF != m_nRotation )
sResult.AppendFormat( _T("{\\sp{\\sn rotation}{\\sv %d}}"),m_nRotation);
if( PROP_DEF != m_bFlipV )
sResult.AppendFormat( _T("{\\sp{\\sn fFlipV}{\\sv %d}}"),m_bFlipV);
if( PROP_DEF != m_bFlipH )
sResult.AppendFormat( _T("{\\sp{\\sn fFlipH}{\\sv %d}}"),m_bFlipH);
if( PROP_DEF != m_nShapeType )
sResult.AppendFormat( _T("{\\sp{\\sn shapeType}{\\sv %d}}"),m_nShapeType);
if( PROP_DEF != m_nWrapDistLeft )
sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistLeft}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistLeft ));
if( PROP_DEF != m_nWrapDistTop )
sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistTop}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistTop ));
if( PROP_DEF != m_nWrapDistRight )
sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistRight}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistRight ));
if( PROP_DEF != m_nWrapDistBottom )
sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistBottom}{\\sv %d}}"),RtfUtility::Twips2Emu( m_nWrapDistBottom ));
if( PROP_DEF != m_nZOrderRelative )
sResult.AppendFormat( _T("{\\sp{\\sn fBehindDocument}{\\sv %d}}"),m_nZOrderRelative);
if( PROP_DEF != m_bHidden )
sResult.AppendFormat( _T("{\\sp{\\sn fHidden}{\\sv %d}}"),m_bHidden);
//Geometry
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjustValue}{\\sv %d}}"),m_nAdjustValue );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust2Value}{\\sv %d}}"),m_nAdjustValue2 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust3Value}{\\sv %d}}"),m_nAdjustValue3 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust4Value}{\\sv %d}}"),m_nAdjustValue4 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust5Value}{\\sv %d}}"),m_nAdjustValue5 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust6Value}{\\sv %d}}"),m_nAdjustValue6 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust7Value}{\\sv %d}}"),m_nAdjustValue7 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust8Value}{\\sv %d}}"),m_nAdjustValue8 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust9Value}{\\sv %d}}"),m_nAdjustValue9 );
if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust10Value}{\\sv %d}}"),m_nAdjustValue10 );
//Connectors
if( PROP_DEF != m_nConnectionType )
sResult.AppendFormat( _T("{\\sp{\\sn cxk}{\\sv %d}}"),m_nConnectionType );
if( PROP_DEF != m_nConnectorStyle )
sResult.AppendFormat( _T("{\\sp{\\sn cxstyle}{\\sv %d}}"),m_nConnectorStyle );
//WordArt Effects
if( PROP_DEF != m_nCropFromTop )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromTop}{\\sv %d}}"),m_nCropFromTop );
if( PROP_DEF != m_nCropFromBottom )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromBottom}{\\sv %d}}"),m_nCropFromBottom );
if( PROP_DEF != m_nCropFromLeft )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromLeft}{\\sv %d}}"),m_nCropFromLeft );
if( PROP_DEF != m_nCropFromRight )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromRight}{\\sv %d}}"),m_nCropFromRight );
//Grouped Shapes
if( PROP_DEF != m_nGroupBottom )
sResult.AppendFormat( _T("{\\sp{\\sn groupBottom}{\\sv %d}}"),m_nCropFromRight );
if( PROP_DEF != m_nGroupLeft )
sResult.AppendFormat( _T("{\\sp{\\sn groupLeft}{\\sv %d}}"),m_nGroupLeft );
if( PROP_DEF != m_nGroupRight )
sResult.AppendFormat( _T("{\\sp{\\sn groupRight}{\\sv %d}}"),m_nGroupRight );
if( PROP_DEF != m_nGroupTop )
sResult.AppendFormat( _T("{\\sp{\\sn groupTop}{\\sv %d}}"),m_nGroupTop );
if( PROP_DEF != m_nRelBottom )
sResult.AppendFormat( _T("{\\sp{\\sn relBottom}{\\sv %d}}"),m_nRelBottom );
if( PROP_DEF != m_nRelLeft )
sResult.AppendFormat( _T("{\\sp{\\sn relLeft}{\\sv %d}}"),m_nRelLeft );
if( PROP_DEF != m_nRelRight )
sResult.AppendFormat( _T("{\\sp{\\sn relRight}{\\sv %d}}"),m_nRelRight );
if( PROP_DEF != m_nRelTop )
sResult.AppendFormat( _T("{\\sp{\\sn relTop}{\\sv %d}}"),m_nRelTop );
if( PROP_DEF != m_nRelRotation )
sResult.AppendFormat( _T("{\\sp{\\sn relRotation}{\\sv %d}}"),m_nRelRotation );
if( PROP_DEF != m_nRelZOrder )
sResult.AppendFormat( _T("{\\sp{\\sn dhgt}{\\sv %d}}"),m_nRelZOrder );
//Grouped Shapes
if( PROP_DEF != m_nGroupBottom )
sResult.AppendFormat( _T("{\\sp{\\sn groupBottom}{\\sv %d}}"),m_nCropFromRight );
if( PROP_DEF != m_nGroupLeft )
sResult.AppendFormat( _T("{\\sp{\\sn groupLeft}{\\sv %d}}"),m_nGroupLeft );
if( PROP_DEF != m_nGroupRight )
sResult.AppendFormat( _T("{\\sp{\\sn groupRight}{\\sv %d}}"),m_nGroupRight );
if( PROP_DEF != m_nGroupTop )
sResult.AppendFormat( _T("{\\sp{\\sn groupTop}{\\sv %d}}"),m_nGroupTop );
if( PROP_DEF != m_nRelBottom )
sResult.AppendFormat( _T("{\\sp{\\sn relBottom}{\\sv %d}}"),m_nRelBottom );
if( PROP_DEF != m_nRelLeft )
sResult.AppendFormat( _T("{\\sp{\\sn relLeft}{\\sv %d}}"),m_nRelLeft );
if( PROP_DEF != m_nRelRight )
sResult.AppendFormat( _T("{\\sp{\\sn relRight}{\\sv %d}}"),m_nRelRight );
if( PROP_DEF != m_nRelTop )
sResult.AppendFormat( _T("{\\sp{\\sn relTop}{\\sv %d}}"),m_nRelTop );
if( PROP_DEF != m_nRelRotation )
sResult.AppendFormat( _T("{\\sp{\\sn relRotation}{\\sv %d}}"),m_nRelRotation );
if( PROP_DEF != m_nRelZOrder )
sResult.AppendFormat( _T("{\\sp{\\sn dhgt}{\\sv %d}}"),m_nRelZOrder );
//Line
if( PROP_DEF != m_nLineStartArrow )
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowhead}{\\sv %d}}"),m_nLineStartArrow );
if( PROP_DEF != m_nLineEndArrow )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowhead}{\\sv %d}}"),m_nLineEndArrow );
if( PROP_DEF != m_nLineStartArrowWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowWidth}{\\sv %d}}"),m_nLineStartArrowWidth );
if( PROP_DEF != m_nLineStartArrowLength )
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowLength}{\\sv %d}}"),m_nLineStartArrowLength );
if( PROP_DEF != m_nLineEndArrowWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowWidth}{\\sv %d}}"),m_nLineEndArrowWidth );
if( PROP_DEF != m_nLineEndArrowLength )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowLength}{\\sv %d}}"),m_nLineEndArrowLength );
if( PROP_DEF != m_nLineWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineWidth}{\\sv %d}}"),m_nLineWidth );
//Line
if( PROP_DEF != m_nLineStartArrow )
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowhead}{\\sv %d}}"),m_nLineStartArrow );
if( PROP_DEF != m_nLineEndArrow )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowhead}{\\sv %d}}"),m_nLineEndArrow );
if( PROP_DEF != m_nLineStartArrowWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowWidth}{\\sv %d}}"),m_nLineStartArrowWidth );
if( PROP_DEF != m_nLineStartArrowLength )
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowLength}{\\sv %d}}"),m_nLineStartArrowLength );
if( PROP_DEF != m_nLineEndArrowWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowWidth}{\\sv %d}}"),m_nLineEndArrowWidth );
if( PROP_DEF != m_nLineEndArrowLength )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowLength}{\\sv %d}}"),m_nLineEndArrowLength );
if( PROP_DEF != m_nLineWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineWidth}{\\sv %d}}"),m_nLineWidth );
//pWrapPolygonVertices Points of the text wrap polygon.
int nWrapPointCount = (int)m_aWrapPoints.size();
if( nWrapPointCount > 0 )
{
sResult.AppendFormat( _T("{\\sp{\\sn pWrapPolygonVertices}{\\sv 8;%d"), nWrapPointCount / 2 );
for( int i = 0; i < nWrapPointCount - 1; i += 2 )
sResult.AppendFormat( _T(";(%d,%d)"), m_aWrapPoints[i], m_aWrapPoints[ i + 1 ] );
sResult.Append( _T("}}") );
}
//pWrapPolygonVertices Points of the text wrap polygon.
int nWrapPointCount = (int)m_aWrapPoints.size();
if( nWrapPointCount > 0 )
{
sResult.AppendFormat( _T("{\\sp{\\sn pWrapPolygonVertices}{\\sv 8;%d"), nWrapPointCount / 2 );
for( int i = 0; i < nWrapPointCount - 1; i += 2 )
sResult.AppendFormat( _T(";(%d,%d)"), m_aWrapPoints[i], m_aWrapPoints[ i + 1 ] );
sResult.Append( _T("}}") );
}
return sResult;
}
return sResult;
}
CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult;
RtfDocument* poDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
if( PROP_DEF != m_nShapeType && 0 != m_nShapeType )
{
if( false && RENDER_TO_OOX_PARAM_SHAPE_WSHAPE != oRenderParameter.nType && NULL != m_oPicture ) //картинки пишем как drawing
{
CString sResult;
RtfDocument* poDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
if( PROP_DEF != m_nShapeType && 0 != m_nShapeType )
if( st_inline == m_eShapeType )
{
if( false && RENDER_TO_OOX_PARAM_SHAPE_WSHAPE != oRenderParameter.nType && NULL != m_oPicture ) //картинки пишем как drawing
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
if( st_inline == m_eShapeType )
{
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
sResult.Append( _T("<w:r><w:drawing><wp:inline") );
int nDistLeft = 0;
int nDistTop = 0;
int nDistRight = 0;
int nDistBottom = 0;
if( PROP_DEF != m_nWrapDistLeft )
nDistLeft = RtfUtility::Twips2Emu( m_nWrapDistLeft );
if( PROP_DEF != m_nWrapDistTop )
nDistTop = RtfUtility::Twips2Emu( m_nWrapDistTop );
if( PROP_DEF != m_nWrapDistRight )
nDistRight = RtfUtility::Twips2Emu( m_nWrapDistRight );
if( PROP_DEF != m_nWrapDistBottom )
nDistBottom = RtfUtility::Twips2Emu( m_nWrapDistBottom );
RENDER_OOX_INT_ATTRIBUTE( nDistLeft, sResult, _T("distL") )
RENDER_OOX_INT_ATTRIBUTE( nDistTop, sResult, _T("distT") )
RENDER_OOX_INT_ATTRIBUTE( nDistRight, sResult, _T("distR") )
RENDER_OOX_INT_ATTRIBUTE( nDistBottom, sResult, _T("distB") )
sResult.Append( _T(">") );
sResult.Append( _T("<w:r><w:drawing><wp:inline") );
int nDistLeft = 0;
int nDistTop = 0;
int nDistRight = 0;
int nDistBottom = 0;
if( PROP_DEF != m_nWrapDistLeft )
nDistLeft = RtfUtility::Twips2Emu( m_nWrapDistLeft );
if( PROP_DEF != m_nWrapDistTop )
nDistTop = RtfUtility::Twips2Emu( m_nWrapDistTop );
if( PROP_DEF != m_nWrapDistRight )
nDistRight = RtfUtility::Twips2Emu( m_nWrapDistRight );
if( PROP_DEF != m_nWrapDistBottom )
nDistBottom = RtfUtility::Twips2Emu( m_nWrapDistBottom );
RENDER_OOX_INT_ATTRIBUTE( nDistLeft, sResult, _T("distL") )
RENDER_OOX_INT_ATTRIBUTE( nDistTop, sResult, _T("distT") )
RENDER_OOX_INT_ATTRIBUTE( nDistRight, sResult, _T("distR") )
RENDER_OOX_INT_ATTRIBUTE( nDistBottom, sResult, _T("distB") )
sResult.Append( _T(">") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
sResult.AppendFormat( _T("<wp:extent cx=\"%d\" cy=\"%d\"/>"), RtfUtility::Twips2Emu( m_oPicture->m_nWidthGoal ), RtfUtility::Twips2Emu( m_oPicture->m_nHeightGoal ) );
int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId();
sResult.AppendFormat( _T("<wp:docPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), m_sName.GetBuffer(), nImageID );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
sResult.AppendFormat( _T("<wp:extent cx=\"%d\" cy=\"%d\"/>"), RtfUtility::Twips2Emu( m_oPicture->m_nWidthGoal ), RtfUtility::Twips2Emu( m_oPicture->m_nHeightGoal ) );
int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId();
sResult.AppendFormat( _T("<wp:docPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), m_sName.GetBuffer(), nImageID );
int nCropLeft = PROP_DEF;
int nCropTop = PROP_DEF;
int nCropRight = PROP_DEF;
int nCropBottom = PROP_DEF;
int nCropLeft = PROP_DEF;
int nCropTop = PROP_DEF;
int nCropRight = PROP_DEF;
int nCropBottom = PROP_DEF;
if( PROP_DEF != m_nCropFromLeft )
nCropLeft = (int)( 100000.0 * m_nCropFromLeft / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropL )
nCropLeft = (int)( 100000.0 * m_oPicture->m_nCropL / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromTop )
nCropTop = (int)( 100000.0 * m_nCropFromTop / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropT )
nCropTop = (int)( 100000.0 * m_oPicture->m_nCropT / m_oPicture->m_nHeightGoal );
if( PROP_DEF != m_nCropFromRight )
nCropRight = (int)( 100000.0 * m_nCropFromRight / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropR )
nCropRight = (int)( 100000.0 * m_oPicture->m_nCropR / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromBottom )
nCropBottom = (int)( 100000.0 * m_nCropFromBottom / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropB )
nCropBottom = (int)( 100000.0 * m_oPicture->m_nCropB / m_oPicture->m_nHeightGoal );
sResult.Append( _T("<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"));
sResult.Append( _T("<pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:cNvPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
if( 0 == m_bLockAnchor )
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"0\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
else
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
sResult.Append( _T("</pic:nvPicPr>") );
if( PROP_DEF != m_nCropFromLeft )
nCropLeft = (int)( 100000.0 * m_nCropFromLeft / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropL )
nCropLeft = (int)( 100000.0 * m_oPicture->m_nCropL / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromTop )
nCropTop = (int)( 100000.0 * m_nCropFromTop / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropT )
nCropTop = (int)( 100000.0 * m_oPicture->m_nCropT / m_oPicture->m_nHeightGoal );
if( PROP_DEF != m_nCropFromRight )
nCropRight = (int)( 100000.0 * m_nCropFromRight / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropR )
nCropRight = (int)( 100000.0 * m_oPicture->m_nCropR / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromBottom )
nCropBottom = (int)( 100000.0 * m_nCropFromBottom / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropB )
nCropBottom = (int)( 100000.0 * m_oPicture->m_nCropB / m_oPicture->m_nHeightGoal );
sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() );
CString sCrop;
if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
if( PROP_DEF != nCropTop )
sCrop.AppendFormat( _T(" t=\"%d\""), nCropTop );
if( PROP_DEF != nCropRight )
sCrop.AppendFormat( _T(" r=\"%d\""), nCropRight );
if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
if( false == sCrop.IsEmpty() )
sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") );
sResult.Append( _T("</pic:blipFill>") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
sResult.Append( _T("<pic:spPr bwMode=\"auto\">") );
sResult.Append( _T("<a:xfrm") );
int nRotation = PROP_DEF;
if( PROP_DEF != m_nRotation )
nRotation = m_nRotation;
else
nRotation = m_nRelRotation;
if( PROP_DEF != nRotation )
{
int nOOXRotation = (int)( 60000.0 * nRotation / 0x10000 );//Опытным путем 1 градус == 60000
sResult.AppendFormat( _T(" rot=\"%d\""), nOOXRotation );
}
sResult.Append( _T(">") );
sResult.AppendFormat( _T("<a:off x=\"0\" y=\"0\"/><a:ext cx=\"%d\" cy=\"%d\"/>"), m_oPicture->m_nWidthGoal, m_oPicture->m_nHeightGoal );
sResult.Append( _T("</a:xfrm>") );
sResult.Append( _T("<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>") );
sResult.Append( _T("</pic:spPr>") );
}
sResult.Append( _T("</pic:pic></a:graphicData></a:graphic>") );
sResult.Append( _T("<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"));
sResult.Append( _T("</wp:inline></w:drawing></w:r>") );
}
}
sResult.Append( _T("<pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:cNvPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
if( 0 == m_bLockAnchor )
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"0\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
else
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
sResult.Append( _T("</pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() );
CString sCrop;
if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
if( PROP_DEF != nCropTop )
sCrop.AppendFormat( _T(" t=\"%d\""), nCropTop );
if( PROP_DEF != nCropRight )
sCrop.AppendFormat( _T(" r=\"%d\""), nCropRight );
if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
if( false == sCrop.IsEmpty() )
sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") );
sResult.Append( _T("</pic:blipFill>") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
sResult.Append( _T("<pic:spPr bwMode=\"auto\">") );
sResult.Append( _T("<a:xfrm") );
int nRotation = PROP_DEF;
if( PROP_DEF != m_nRotation )
nRotation = m_nRotation;
else
nRotation = m_nRelRotation;
if( PROP_DEF != nRotation )
{
sResult.Append( _T("<w:r><w:drawing><wp:anchor") );
int nDistLeft = 0;//аттрибуты обязательные
int nDistTop = 0;
int nDistRight = 0;
int nDistBottom = 0;
int nOverlap = 1;
int nBehind = 0;
int nLayout = 1;
int nLocked = 0;
int nZIndex = 100;
int nOOXRotation = (int)( 60000.0 * nRotation / 0x10000 );//Опытным путем 1 градус == 60000
sResult.AppendFormat( _T(" rot=\"%d\""), nOOXRotation );
}
sResult.Append( _T(">") );
sResult.AppendFormat( _T("<a:off x=\"0\" y=\"0\"/><a:ext cx=\"%d\" cy=\"%d\"/>"), m_oPicture->m_nWidthGoal, m_oPicture->m_nHeightGoal );
sResult.Append( _T("</a:xfrm>") );
sResult.Append( _T("<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>") );
sResult.Append( _T("</pic:spPr>") );
}
sResult.Append( _T("</pic:pic></a:graphicData></a:graphic>") );
sResult.Append( _T("</wp:inline></w:drawing></w:r>") );
}
}
else
{
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
sResult.Append( _T("<w:r><w:drawing><wp:anchor") );
int nDistLeft = 0;//аттрибуты обязательные
int nDistTop = 0;
int nDistRight = 0;
int nDistBottom = 0;
int nOverlap = 1;
int nBehind = 0;
int nLayout = 1;
int nLocked = 0;
int nZIndex = 100;
if( PROP_DEF != m_nWrapDistLeft )
nDistLeft = RtfUtility::Twips2Emu( m_nWrapDistLeft );
if( PROP_DEF != m_nWrapDistTop )
nDistTop = RtfUtility::Twips2Emu( m_nWrapDistTop );
if( PROP_DEF != m_nWrapDistRight )
nDistRight = RtfUtility::Twips2Emu( m_nWrapDistRight );
if( PROP_DEF != m_nWrapDistBottom )
nDistBottom = RtfUtility::Twips2Emu( m_nWrapDistBottom );
if( PROP_DEF != m_bAllowOverlap )
nOverlap = m_bAllowOverlap;
if( PROP_DEF != m_nZOrderRelative )
nBehind = m_nZOrderRelative;
if( PROP_DEF != m_bLayoutInCell )
nLayout = m_bLayoutInCell;
if( PROP_DEF != m_bLockAnchor )
nLocked = m_bLockAnchor;
if( PROP_DEF != m_nZOrder )
nZIndex = m_nZOrder;
RENDER_OOX_INT_ATTRIBUTE( nDistLeft, sResult, _T("distL") )
RENDER_OOX_INT_ATTRIBUTE( nDistTop, sResult, _T("distT") )
RENDER_OOX_INT_ATTRIBUTE( nDistRight, sResult, _T("distR") )
RENDER_OOX_INT_ATTRIBUTE( nDistBottom, sResult, _T("distB") )
RENDER_OOX_BOOL_ATTRIBUTE( nOverlap, sResult, _T("allowOverlap") )
RENDER_OOX_BOOL_ATTRIBUTE( nBehind, sResult, _T("behindDoc") )
RENDER_OOX_BOOL_ATTRIBUTE( m_bHidden, sResult, _T("hidden") )
RENDER_OOX_BOOL_ATTRIBUTE( nLayout, sResult, _T("layoutInCell") )
RENDER_OOX_BOOL_ATTRIBUTE( nLocked, sResult, _T("locked") )
RENDER_OOX_INT_ATTRIBUTE( nZIndex, sResult, _T("relativeHeight") )
RENDER_OOX_BOOL_ATTRIBUTE( 0, sResult, _T("simplePos") )
sResult.Append( _T(">") );
if( PROP_DEF != m_nWrapDistLeft )
nDistLeft = RtfUtility::Twips2Emu( m_nWrapDistLeft );
if( PROP_DEF != m_nWrapDistTop )
nDistTop = RtfUtility::Twips2Emu( m_nWrapDistTop );
if( PROP_DEF != m_nWrapDistRight )
nDistRight = RtfUtility::Twips2Emu( m_nWrapDistRight );
if( PROP_DEF != m_nWrapDistBottom )
nDistBottom = RtfUtility::Twips2Emu( m_nWrapDistBottom );
if( PROP_DEF != m_bAllowOverlap )
nOverlap = m_bAllowOverlap;
if( PROP_DEF != m_nZOrderRelative )
nBehind = m_nZOrderRelative;
if( PROP_DEF != m_bLayoutInCell )
nLayout = m_bLayoutInCell;
if( PROP_DEF != m_bLockAnchor )
nLocked = m_bLockAnchor;
if( PROP_DEF != m_nZOrder )
nZIndex = m_nZOrder;
if( PROP_DEF != m_nLeft && PROP_DEF != m_nTop )
sResult.AppendFormat( _T("<wp:simplePos x=\"%d\" y=\"%d\"/>"),RtfUtility::Twips2Emu(m_nLeft), RtfUtility::Twips2Emu(m_nTop) );
RENDER_OOX_INT_ATTRIBUTE( nDistLeft, sResult, _T("distL") )
RENDER_OOX_INT_ATTRIBUTE( nDistTop, sResult, _T("distT") )
RENDER_OOX_INT_ATTRIBUTE( nDistRight, sResult, _T("distR") )
RENDER_OOX_INT_ATTRIBUTE( nDistBottom, sResult, _T("distB") )
RENDER_OOX_BOOL_ATTRIBUTE( nOverlap, sResult, _T("allowOverlap") )
RENDER_OOX_BOOL_ATTRIBUTE( nBehind, sResult, _T("behindDoc") )
RENDER_OOX_BOOL_ATTRIBUTE( m_bHidden, sResult, _T("hidden") )
RENDER_OOX_BOOL_ATTRIBUTE( nLayout, sResult, _T("layoutInCell") )
RENDER_OOX_BOOL_ATTRIBUTE( nLocked, sResult, _T("locked") )
RENDER_OOX_INT_ATTRIBUTE( nZIndex, sResult, _T("relativeHeight") )
RENDER_OOX_BOOL_ATTRIBUTE( 0, sResult, _T("simplePos") )
sResult.Append( _T(">") );
if( ( PROP_DEF != m_nPositionHRelative || ax_none != m_eXAnchor ) && (PROP_DEF != m_nPositionH || PROP_DEF != m_nLeft ) )
if( PROP_DEF != m_nLeft && PROP_DEF != m_nTop )
sResult.AppendFormat( _T("<wp:simplePos x=\"%d\" y=\"%d\"/>"),RtfUtility::Twips2Emu(m_nLeft), RtfUtility::Twips2Emu(m_nTop) );
if( ( PROP_DEF != m_nPositionHRelative || ax_none != m_eXAnchor ) && (PROP_DEF != m_nPositionH || PROP_DEF != m_nLeft ) )
{
sResult.Append( _T("<wp:positionH") );
if( PROP_DEF != m_nPositionHRelative )
{
switch( m_nPositionHRelative )
{
sResult.Append( _T("<wp:positionH") );
if( PROP_DEF != m_nPositionHRelative )
{
switch( m_nPositionHRelative )
{
case 0: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case 1: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case 2: sResult.Append( _T(" relativeFrom=\"column\"") );break;
case 3: sResult.Append( _T(" relativeFrom=\"character\"") );break;
case 4: sResult.Append( _T(" relativeFrom=\"leftMargin\"") );break;
case 5: sResult.Append( _T(" relativeFrom=\"rightMargin\"") );break;
case 6: sResult.Append( _T(" relativeFrom=\"insideMargin\"") );break;
case 7: sResult.Append( _T(" relativeFrom=\"outsideMargin\"") );break;
}
}
else
{
switch( m_eXAnchor )
{
case ax_margin: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case ax_page: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case ax_column: sResult.Append( _T(" relativeFrom=\"column\"") );break;
}
}
sResult.Append( _T(">") );
if( PROP_DEF != m_nPositionH )
{
switch( m_nPositionH )
{
case 1: sResult.Append( _T("<wp:align>left</wp:align>") );break;
case 2: sResult.Append( _T("<wp:align>center</wp:align>") );break;
case 3: sResult.Append( _T("<wp:align>right</wp:align>") );break;
case 4: sResult.Append( _T("<wp:align>inside</wp:align>") );break;
case 5: sResult.Append( _T("<wp:align>outside</wp:align>") );break;
}
}
else
{
sResult.AppendFormat( _T("<wp:posOffset>%d</wp:posOffset>"), RtfUtility::Twips2Emu( m_nLeft ) );
}
sResult.Append( _T("</wp:positionH>") );
case 0: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case 1: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case 2: sResult.Append( _T(" relativeFrom=\"column\"") );break;
case 3: sResult.Append( _T(" relativeFrom=\"character\"") );break;
case 4: sResult.Append( _T(" relativeFrom=\"leftMargin\"") );break;
case 5: sResult.Append( _T(" relativeFrom=\"rightMargin\"") );break;
case 6: sResult.Append( _T(" relativeFrom=\"insideMargin\"") );break;
case 7: sResult.Append( _T(" relativeFrom=\"outsideMargin\"") );break;
}
if( ( PROP_DEF != m_nPositionVRelative || ax_none != m_eYAnchor ) && (PROP_DEF != m_nPositionV || PROP_DEF != m_nTop ) )
}
else
{
switch( m_eXAnchor )
{
sResult.Append( _T("<wp:positionV") );
if( PROP_DEF != m_nPositionVRelative )
{
switch( m_nPositionVRelative )
{
case 0: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case 1: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case 2: sResult.Append( _T(" relativeFrom=\"paragraph\"") );break;
case 3: sResult.Append( _T(" relativeFrom=\"line\"") );break;
case 4: sResult.Append( _T(" relativeFrom=\"topMargin\"") );break;
case 5: sResult.Append( _T(" relativeFrom=\"bottomMargin\"") );break;
case 6: sResult.Append( _T(" relativeFrom=\"insideMargin\"") );break;
case 7: sResult.Append( _T(" relativeFrom=\"outsideMargin\"") );break;
}
}
else
{
switch( m_eYAnchor )
{
case ay_margin: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case ay_page: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case ay_Para: sResult.Append( _T(" relativeFrom=\"paragraph\"") );break;
}
}
sResult.Append( _T(">") );
if( PROP_DEF != m_nPositionV )
{
switch( m_nPositionV )
{
case 1: sResult.Append( _T("<wp:align>top</wp:align>") );break;
case 2: sResult.Append( _T("<wp:align>center</wp:align>") );break;
case 3: sResult.Append( _T("<wp:align>bottom</wp:align>") );break;
case 4: sResult.Append( _T("<wp:align>inside</wp:align>") );break;
case 5: sResult.Append( _T("<wp:align>outside</wp:align>") );break;
}
}
else
{
sResult.AppendFormat( _T("<wp:posOffset>%d</wp:posOffset>"), RtfUtility::Twips2Emu( m_nTop ) );
}
sResult.Append( _T("</wp:positionV>") );
case ax_margin: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case ax_page: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case ax_column: sResult.Append( _T(" relativeFrom=\"column\"") );break;
}
int nWidth;
int nHeight;
if( PROP_DEF != m_nLeft && PROP_DEF != m_nRight && PROP_DEF != m_nTop && PROP_DEF != m_nBottom )
}
sResult.Append( _T(">") );
if( PROP_DEF != m_nPositionH )
{
switch( m_nPositionH )
{
nWidth = m_nRight - m_nLeft;
nHeight = m_nBottom - m_nTop;
case 1: sResult.Append( _T("<wp:align>left</wp:align>") );break;
case 2: sResult.Append( _T("<wp:align>center</wp:align>") );break;
case 3: sResult.Append( _T("<wp:align>right</wp:align>") );break;
case 4: sResult.Append( _T("<wp:align>inside</wp:align>") );break;
case 5: sResult.Append( _T("<wp:align>outside</wp:align>") );break;
}
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
}
else
{
sResult.AppendFormat( _T("<wp:posOffset>%d</wp:posOffset>"), RtfUtility::Twips2Emu( m_nLeft ) );
}
sResult.Append( _T("</wp:positionH>") );
}
if( ( PROP_DEF != m_nPositionVRelative || ax_none != m_eYAnchor ) && (PROP_DEF != m_nPositionV || PROP_DEF != m_nTop ) )
{
sResult.Append( _T("<wp:positionV") );
if( PROP_DEF != m_nPositionVRelative )
{
switch( m_nPositionVRelative )
{
nWidth = m_oPicture->m_nWidthGoal;
nHeight = m_oPicture->m_nHeightGoal;
case 0: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case 1: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case 2: sResult.Append( _T(" relativeFrom=\"paragraph\"") );break;
case 3: sResult.Append( _T(" relativeFrom=\"line\"") );break;
case 4: sResult.Append( _T(" relativeFrom=\"topMargin\"") );break;
case 5: sResult.Append( _T(" relativeFrom=\"bottomMargin\"") );break;
case 6: sResult.Append( _T(" relativeFrom=\"insideMargin\"") );break;
case 7: sResult.Append( _T(" relativeFrom=\"outsideMargin\"") );break;
}
if( PROP_DEF != nWidth && PROP_DEF != nHeight )
sResult.AppendFormat( _T("<wp:extent cx=\"%d\" cy=\"%d\"/>"), RtfUtility::Twips2Emu( nWidth ), RtfUtility::Twips2Emu( nHeight ) );
if( PROP_DEF != m_nWrapType && 3 != m_nWrapType)
}
else
{
switch( m_eYAnchor )
{
sResult.Append( _T("<") );
CString sTag;
switch( m_nWrapType )
{
case 1:sTag.Append( _T("wp:wrapTopAndBottom") );break;
case 2:sTag.Append( _T("wp:wrapSquare") );break;
case 3:sTag.Append( _T("wp:wrapNone") );break;
case 4:sTag.Append( _T("wp:wrapTight") );break;
case 5:sTag.Append( _T("wp:wrapThrough") );break;
}
sResult.Append( sTag );
switch( m_nWrapSideType )
{
case 0:sResult.Append( _T(" wrapText=\"bothSides\"") );break;
case 1:sResult.Append( _T(" wrapText=\"left\"") );break;
case 2:sResult.Append( _T(" wrapText=\"right\"") );break;
case 3:sResult.Append( _T(" wrapText=\"largest\"") );break;
}
if( m_aWrapPoints.size() == 0 )
sResult.Append( _T("/>") );
else
{
sResult.Append( _T(">") );
sResult.Append( _T("<wp:wrapPolygon>") );
if( m_aWrapPoints.size() > 1 )
sResult.AppendFormat( _T("<wp:start x=\"%d\" y=\"%d\" />"), m_aWrapPoints[0], m_aWrapPoints[1] );
for( int i = 2; i < (int)m_aWrapPoints.size() - 1; i+=2 )
sResult.AppendFormat( _T("<wp:lineTo x=\"%d\" y=\"%d\" />"), m_aWrapPoints[i], m_aWrapPoints[i+1] );
sResult.Append( _T("</wp:wrapPolygon>") );
sResult.AppendFormat( _T("</%ls>"), sTag.GetBuffer() );
}
case ay_margin: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case ay_page: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case ay_Para: sResult.Append( _T(" relativeFrom=\"paragraph\"") );break;
}
int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId();
sResult.AppendFormat( _T("<wp:docPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
}
sResult.Append( _T(">") );
if( PROP_DEF != m_nPositionV )
{
switch( m_nPositionV )
{
case 1: sResult.Append( _T("<wp:align>top</wp:align>") );break;
case 2: sResult.Append( _T("<wp:align>center</wp:align>") );break;
case 3: sResult.Append( _T("<wp:align>bottom</wp:align>") );break;
case 4: sResult.Append( _T("<wp:align>inside</wp:align>") );break;
case 5: sResult.Append( _T("<wp:align>outside</wp:align>") );break;
}
}
else
{
sResult.AppendFormat( _T("<wp:posOffset>%d</wp:posOffset>"), RtfUtility::Twips2Emu( m_nTop ) );
}
sResult.Append( _T("</wp:positionV>") );
}
int nCropLeft = PROP_DEF;
int nCropTop = PROP_DEF;
int nCropRight = PROP_DEF;
int nCropBottom = PROP_DEF;
int nWidth;
int nHeight;
if( PROP_DEF != m_nLeft && PROP_DEF != m_nRight && PROP_DEF != m_nTop && PROP_DEF != m_nBottom )
{
nWidth = m_nRight - m_nLeft;
nHeight = m_nBottom - m_nTop;
}
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
nWidth = m_oPicture->m_nWidthGoal;
nHeight = m_oPicture->m_nHeightGoal;
}
if( PROP_DEF != nWidth && PROP_DEF != nHeight )
sResult.AppendFormat( _T("<wp:extent cx=\"%d\" cy=\"%d\"/>"), RtfUtility::Twips2Emu( nWidth ), RtfUtility::Twips2Emu( nHeight ) );
if( PROP_DEF != m_nCropFromLeft )
nCropLeft = (int)( 100000.0 * m_nCropFromLeft / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropL )
nCropLeft = (int)( 100000.0 * m_oPicture->m_nCropL / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromTop )
nCropTop = (int)( 100000.0 * m_nCropFromTop / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropT )
nCropTop = (int)( 100000.0 * m_oPicture->m_nCropT / m_oPicture->m_nHeightGoal );
if( PROP_DEF != m_nCropFromRight )
nCropRight = (int)( 100000.0 * m_nCropFromRight / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropR )
nCropRight = (int)( 100000.0 * m_oPicture->m_nCropR / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromBottom )
nCropBottom = (int)( 100000.0 * m_nCropFromBottom / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropB )
nCropBottom = (int)( 100000.0 * m_oPicture->m_nCropB / m_oPicture->m_nHeightGoal );
if( PROP_DEF != m_nWrapType && 3 != m_nWrapType)
{
sResult.Append( _T("<") );
CString sTag;
switch( m_nWrapType )
{
case 1:sTag.Append( _T("wp:wrapTopAndBottom") );break;
case 2:sTag.Append( _T("wp:wrapSquare") );break;
case 3:sTag.Append( _T("wp:wrapNone") );break;
case 4:sTag.Append( _T("wp:wrapTight") );break;
case 5:sTag.Append( _T("wp:wrapThrough") );break;
}
sResult.Append( sTag );
switch( m_nWrapSideType )
{
case 0:sResult.Append( _T(" wrapText=\"bothSides\"") );break;
case 1:sResult.Append( _T(" wrapText=\"left\"") );break;
case 2:sResult.Append( _T(" wrapText=\"right\"") );break;
case 3:sResult.Append( _T(" wrapText=\"largest\"") );break;
}
sResult.Append( _T("<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"));
if( m_aWrapPoints.size() == 0 )
sResult.Append( _T("/>") );
else
{
sResult.Append( _T(">") );
sResult.Append( _T("<wp:wrapPolygon>") );
if( m_aWrapPoints.size() > 1 )
sResult.AppendFormat( _T("<wp:start x=\"%d\" y=\"%d\" />"), m_aWrapPoints[0], m_aWrapPoints[1] );
for( int i = 2; i < (int)m_aWrapPoints.size() - 1; i+=2 )
sResult.AppendFormat( _T("<wp:lineTo x=\"%d\" y=\"%d\" />"), m_aWrapPoints[i], m_aWrapPoints[i+1] );
sResult.Append( _T("</wp:wrapPolygon>") );
sResult.AppendFormat( _T("</%ls>"), sTag.GetBuffer() );
}
}
int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId();
sResult.AppendFormat( _T("<wp:docPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
sResult.Append( _T("<pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:cNvPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
if( 0 == m_bLockAnchor )
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"0\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
else
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
sResult.Append( _T("</pic:nvPicPr>") );
int nCropLeft = PROP_DEF;
int nCropTop = PROP_DEF;
int nCropRight = PROP_DEF;
int nCropBottom = PROP_DEF;
sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() );
CString sCrop;
if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
if( PROP_DEF != nCropTop )
sCrop.AppendFormat( _T(" t=\"%d\""), nCropTop );
if( PROP_DEF != nCropRight )
sCrop.AppendFormat( _T(" r=\"%d\""), nCropRight );
if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
if( false == sCrop.IsEmpty() )
sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") );
if( PROP_DEF != m_nCropFromLeft )
nCropLeft = (int)( 100000.0 * m_nCropFromLeft / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropL )
nCropLeft = (int)( 100000.0 * m_oPicture->m_nCropL / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromTop )
nCropTop = (int)( 100000.0 * m_nCropFromTop / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropT )
nCropTop = (int)( 100000.0 * m_oPicture->m_nCropT / m_oPicture->m_nHeightGoal );
if( PROP_DEF != m_nCropFromRight )
nCropRight = (int)( 100000.0 * m_nCropFromRight / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropR )
nCropRight = (int)( 100000.0 * m_oPicture->m_nCropR / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromBottom )
nCropBottom = (int)( 100000.0 * m_nCropFromBottom / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropB )
nCropBottom = (int)( 100000.0 * m_oPicture->m_nCropB / m_oPicture->m_nHeightGoal );
sResult.Append( _T("</pic:blipFill>") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
sResult.Append( _T("<pic:spPr bwMode=\"auto\">") );
sResult.Append( _T("<a:xfrm") );
int nRotation = PROP_DEF;
if( PROP_DEF != m_nRotation )
nRotation = m_nRotation;
else
nRotation = m_nRelRotation;
if( PROP_DEF != nRotation )
{
int nOOXRotation = (int)( 60000.0 * nRotation / 65536 );//Опытным путем 1 градус == 60000
sResult.AppendFormat( _T(" rot=\"%d\""), nOOXRotation );
}
sResult.Append( _T(">") );
sResult.AppendFormat( _T("<a:off x=\"0\" y=\"0\"/><a:ext cx=\"%d\" cy=\"%d\"/>"), m_oPicture->m_nWidthGoal, m_oPicture->m_nHeightGoal );
sResult.Append( _T("</a:xfrm>") );
sResult.Append( _T("<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>") );
sResult.Append( _T("</pic:spPr>") );
}
sResult.Append( _T("</pic:pic></a:graphicData></a:graphic>") );
sResult.Append( _T("<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"));
sResult.Append( _T("<pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:cNvPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
if( 0 == m_bLockAnchor )
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"0\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
else
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
sResult.Append( _T("</pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() );
CString sCrop;
if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
if( PROP_DEF != nCropTop )
sCrop.AppendFormat( _T(" t=\"%d\""), nCropTop );
if( PROP_DEF != nCropRight )
sCrop.AppendFormat( _T(" r=\"%d\""), nCropRight );
if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
if( false == sCrop.IsEmpty() )
sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") );
sResult.Append( _T("</wp:anchor></w:drawing></w:r>") );
sResult.Append( _T("</pic:blipFill>") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
sResult.Append( _T("<pic:spPr bwMode=\"auto\">") );
sResult.Append( _T("<a:xfrm") );
int nRotation = PROP_DEF;
if( PROP_DEF != m_nRotation )
nRotation = m_nRotation;
else
nRotation = m_nRelRotation;
if( PROP_DEF != nRotation )
{
int nOOXRotation = (int)( 60000.0 * nRotation / 65536 );//Опытным путем 1 градус == 60000
sResult.AppendFormat( _T(" rot=\"%d\""), nOOXRotation );
}
sResult.Append( _T(">") );
sResult.AppendFormat( _T("<a:off x=\"0\" y=\"0\"/><a:ext cx=\"%d\" cy=\"%d\"/>"), m_oPicture->m_nWidthGoal, m_oPicture->m_nHeightGoal );
sResult.Append( _T("</a:xfrm>") );
sResult.Append( _T("<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>") );
sResult.Append( _T("</pic:spPr>") );
}
}
sResult.Append( _T("</pic:pic></a:graphicData></a:graphic>") );
sResult.Append( _T("</wp:anchor></w:drawing></w:r>") );
}
else
{
TextItemContainerPtr aTempTextItems;
if( 75 == m_nShapeType && 0 != m_aTextItems )
{//Значит это Ole обьект с anchor, для него все также только TextBox надо делать по-другому
aTempTextItems = m_aTextItems;
m_aTextItems = TextItemContainerPtr();
m_bIsOle = true;
}
}
}
else
{
TextItemContainerPtr aTempTextItems;
if( 75 == m_nShapeType && 0 != m_aTextItems )
{//Значит это Ole обьект с anchor, для него все также только TextBox надо делать по-другому
aTempTextItems = m_aTextItems;
m_aTextItems = TextItemContainerPtr();
m_bIsOle = true;
}
sResult = RenderToOOXBegin(oRenderParameter);
if( _T("") != sResult )
sResult.Append( RenderToOOXEnd(oRenderParameter) );
sResult = RenderToOOXBegin(oRenderParameter);
if( _T("") != sResult )
sResult.Append( RenderToOOXEnd(oRenderParameter) );
CString sOle;
if( 0 != aTempTextItems )
{//пишем только Ole обьект
//ищем первый ole обьект
RtfOlePtr poFirstOle;
int nTempTextItemsCount = aTempTextItems->GetCount();
for( int i = 0; i < nTempTextItemsCount; i++ )
CString sOle;
if( 0 != aTempTextItems )
{//пишем только Ole обьект
//ищем первый ole обьект
RtfOlePtr poFirstOle;
int nTempTextItemsCount = aTempTextItems->GetCount();
for( int i = 0; i < nTempTextItemsCount; i++ )
{
ITextItemPtr piCurTextItem;
aTempTextItems->GetItem( piCurTextItem, i );
if( NULL != piCurTextItem && TYPE_RTF_PARAGRAPH == piCurTextItem->GetType() )
{
RtfParagraphPtr poCurParagraph = boost::static_pointer_cast< RtfParagraph, ITextItem >( piCurTextItem );
if( NULL != poCurParagraph )
{
ITextItemPtr piCurTextItem;
aTempTextItems->GetItem( piCurTextItem, i );
if( NULL != piCurTextItem && TYPE_RTF_PARAGRAPH == piCurTextItem->GetType() )
bool bBreak = false;
for( int j = 0; j < poCurParagraph->GetCount(); j++ )
{
RtfParagraphPtr poCurParagraph = boost::static_pointer_cast< RtfParagraph, ITextItem >( piCurTextItem );
if( NULL != poCurParagraph )
IDocumentElementPtr piCurIDocumentElement;
poCurParagraph->GetItem( piCurIDocumentElement, j );
if( NULL != piCurIDocumentElement && TYPE_RTF_OLE == piCurIDocumentElement->GetType() )
{
bool bBreak = false;
for( int j = 0; j < poCurParagraph->GetCount(); j++ )
{
IDocumentElementPtr piCurIDocumentElement;
poCurParagraph->GetItem( piCurIDocumentElement, j );
if( NULL != piCurIDocumentElement && TYPE_RTF_OLE == piCurIDocumentElement->GetType() )
{
//рендерим только Ole часть
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_OLE_ONLY;
oNewParam.nValue = m_nID;
//рендерим только Ole часть
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_OLE_ONLY;
oNewParam.nValue = m_nID;
RtfOlePtr poCurOle = boost::static_pointer_cast< RtfOle, IDocumentElement >( piCurIDocumentElement );
if( NULL != poCurOle )
{
sOle.Append( poCurOle->RenderToOOX( oNewParam ) );
bBreak = true;
break;
}
}
}
if( true == bBreak )
RtfOlePtr poCurOle = boost::static_pointer_cast< RtfOle, IDocumentElement >( piCurIDocumentElement );
if( NULL != poCurOle )
{
sOle.Append( poCurOle->RenderToOOX( oNewParam ) );
bBreak = true;
break;
}
}
}
if( true == bBreak )
break;
}
//возвращаем text box на место
m_aTextItems = aTempTextItems;
}
if( false == sOle.IsEmpty() )
sResult.Replace( _T("</w:pict>"), sOle + _T("</w:pict>") );
}
//возвращаем text box на место
m_aTextItems = aTempTextItems;
}
return sResult;
if( false == sOle.IsEmpty() )
sResult.Replace( _T("</w:pict>"), sOle + _T("</w:pict>") );
}
}
return sResult;
}
CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
{
if( false == IsValid() )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment