Пример #1
0
std::wstring RtfParagraph::RenderToOOX(RenderParameter oRenderParameter)
{
	RtfDocument*	poRtfDocument	= static_cast<RtfDocument*>	(oRenderParameter.poDocument);
	OOXWriter*		poOOXWriter		= static_cast<OOXWriter*>(oRenderParameter.poWriter);

	std::wstring sResult ;

	if( RENDER_TO_OOX_PARAM_PLAIN == oRenderParameter.nType )
	{
		for (size_t i = 0; i < m_aArray.size(); i++ )
		{
			sResult += m_aArray[i]->RenderToOOX(oRenderParameter);
		}
	}
	else if( RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType )
	{
		for (size_t i = 0; i < m_aArray.size(); i++ )
		{
			sResult += m_aArray[i]->RenderToOOX(oRenderParameter);
		}
	}
	else if( RENDER_TO_OOX_PARAM_MATH == oRenderParameter.nType )
	{
		if (m_aArray.size() < 1)
		{
			sResult += L"<w:rPr>";
			sResult += m_oProperty.m_oCharProperty.RenderToOOX(oRenderParameter);
			sResult += L"</w:rPr>";
		}
		else
		{
			for (size_t i = 0; i < m_aArray.size(); i++ )
			{
				sResult += m_aArray[i]->RenderToOOX(oRenderParameter);
			}
		}
	}
	else
	{		
		RenderParameter oNewParam = oRenderParameter;
		oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
		
		bool bCanConvertToNumbering = false;
		if( NULL != m_oOldList )
			bCanConvertToNumbering = m_oOldList->CanConvertToNumbering();

		std::wstring sParaId = XmlUtils::IntToString(++poOOXWriter->m_nextParaId, L"%08X");
		sResult += L"<w:p w14:paraId=\"" + sParaId + L"\" w14:textId=\"" + sParaId + L"\">";
		sResult += L"<w:pPr>";
		
		m_oProperty.m_bOldList = (NULL != m_oOldList);
		
		bool bRenderProps = false;
		if ( PROP_DEF != m_oProperty.m_nTableStyle && m_oProperty.m_bInTable > 0)
		{
			RtfStylePtr oCurStyle;
			if( true == poRtfDocument->m_oStyleTable.GetStyle( m_oProperty.m_nTableStyle, oCurStyle ) )
			{
				RtfParagraphStyle* oCurParaStyle = dynamic_cast<RtfParagraphStyle*>(oCurStyle.get());

				if (oCurParaStyle)
				{
					RtfParagraphProperty newProps;
					newProps.Merge(oCurParaStyle->m_oParProp);
					newProps.Merge(m_oProperty);
					
					sResult += newProps.RenderToOOX(oRenderParameter);
					bRenderProps = true;
				}
			}
		}
		if (false == bRenderProps)
			sResult += m_oProperty.RenderToOOX(oRenderParameter);

		if( NULL != m_oOldList )
		{
			//для OldList
			if( true == bCanConvertToNumbering )
				sResult += m_oOldList->RenderToOOX( oRenderParameter );
		}
		sResult += L"</w:pPr>";

		if( NULL != m_oOldList)
		{
			//для OldList
			if( false == bCanConvertToNumbering && NULL != m_oOldList->m_oText)
			{
				RtfCharProperty oCharProp = m_oProperty.m_oCharProperty;
				if( NULL != m_oOldList->m_oText )
					oCharProp.m_nFont = m_oOldList->m_oText->m_oProperty.m_oCharProperty.m_nFont;

				oNewParam = oRenderParameter;
				oNewParam.nType = RENDER_TO_OOX_PARAM_TEXT;

				for( int i = 0; i < m_oOldList->m_oText->GetCount(); i++ )
				{
					sResult += L"<w:r>";
						sResult += L"<w:rPr>";
							sResult += oCharProp.RenderToOOX(oRenderParameter);
						sResult += L"</w:rPr>";
					sResult += m_oOldList->m_oText->m_aArray[ i ]->RenderToOOX(oNewParam);
					sResult += L"</w:r>";
				}
			}
		}
		if (oRenderParameter.nType == RENDER_TO_OOX_PARAM_COMMENT)
		{
			sResult += L"<w:r>";
				sResult += L"<w:rPr>";
					sResult += m_oProperty.m_oCharProperty.RenderToOOX(oRenderParameter);
				sResult += L"</w:rPr>";
			sResult += L"<w:annotationRef/>";
			sResult += L"</w:r>";
		}
		oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
		
        std::wstring ParagraphContent;
		for (size_t i = 0; i < m_aArray.size(); i++)
		{
			ParagraphContent += m_aArray[i]->RenderToOOX(oNewParam);
		}

        if (!ParagraphContent.empty())
			sResult += ParagraphContent;

		sResult += L"</w:p>";
	}
	return sResult;
}
Пример #2
0
std::wstring RtfOle::RenderToOOX(RenderParameter oRenderParameter)
{
	if( false == IsValid() )	return L"";
	
    std::wstring sResult;

	RtfDocument*	poRtfDocument	= static_cast<RtfDocument*>	(oRenderParameter.poDocument);
	OOXWriter*		poOOXWriter		= static_cast<OOXWriter*>	(oRenderParameter.poWriter);
	
	if( RENDER_TO_OOX_PARAM_OLE_ONLY == oRenderParameter.nType )
	{
		sResult += RenderToOOXOnlyOle(oRenderParameter);
	}
	else
	{
		RtfCharProperty * pCharProps = &m_oCharProperty;
//------------------------------------------
// todooo общая часть с RtfChar
		bool bInsert = false;
		bool bDelete = false;

		if (pCharProps->m_nRevised != PROP_DEF)
		{
			bInsert = true;
			
            std::wstring sAuthor = poRtfDocument->m_oRevisionTable.GetAuthor(pCharProps->m_nRevauth);
            std::wstring sDate(RtfUtility::convertDateTime(pCharProps->m_nRevdttm).c_str());
			
			sResult += L"<w:ins w:date=\"" + sDate +  L"\" w:author=\"" + sAuthor + L"\" w:id=\"" + std::to_wstring(poOOXWriter->m_nCurTrackChangesId++).c_str() + L"\">";
			pCharProps->m_nRevised = PROP_DEF;
		}
		if (pCharProps->m_nDeleted != PROP_DEF)
		{
			bDelete = true;
			
            std::wstring sAuthor = poRtfDocument->m_oRevisionTable.GetAuthor(pCharProps->m_nRevauthDel);
            std::wstring sDate(RtfUtility::convertDateTime(pCharProps->m_nRevdttmDel).c_str());
			
			sResult += L"<w:del w:date=\"" + sDate +  L"\" w:author=\"" + sAuthor + L"\" w:id=\"" + std::to_wstring(poOOXWriter->m_nCurTrackChangesId++).c_str() + L"\">";
			pCharProps->m_nDeleted = PROP_DEF;
		}
//----------
		sResult += L"<w:r>";
		
        std::wstring sCharProp = pCharProps->RenderToOOX(oRenderParameter);

        if (!sCharProp .empty())
		{
			sResult += L"<w:rPr>";
				sResult += sCharProp;
			sResult += L"</w:rPr>";
		}
		
        sResult += L"<w:object w:dxaOrig=\"" + std::to_wstring(m_nWidth) +
                          L"\" w:dyaOrig=\"" + std::to_wstring(m_nHeight) + L"\">";
		
		RenderParameter oNewRenderParameter = oRenderParameter;
		oNewRenderParameter.nType = RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2;

		if (m_oResultShape)
		{
			m_oResultShape->m_bIsOle = true;

			sResult += m_oResultShape->RenderToOOX(oNewRenderParameter);

			oNewRenderParameter.nValue = m_oResultShape->m_nID;
		}
		sResult += RenderToOOXOnlyOle(oNewRenderParameter);

		sResult += L"</w:object>";
		sResult += L"</w:r>";
		
		if (bDelete)sResult += L"</w:del>";
		if (bInsert)sResult += L"</w:ins>";
	}
	return sResult;
}