mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
RtfFormatReader/Writer
This commit is contained in:
@ -364,6 +364,10 @@
|
||||
<Filter
|
||||
Name="Drawing"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\source\Reader\OOXDrawingGraphicReader.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\source\Reader\OOXPictureAnchorReader.h"
|
||||
>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -302,7 +302,8 @@ public:
|
||||
if( m_ooxAnchor->m_oGraphic.IsInit() )
|
||||
{
|
||||
OOXPictureGraphicReader oGraphicReader(m_ooxAnchor->m_oGraphic.GetPointer());
|
||||
oGraphicReader.Parse( oParam, *oOutput.m_oPicture );
|
||||
|
||||
oGraphicReader.Parse( oParam, oOutput );
|
||||
}
|
||||
//изменяем scale в соответсявии с выходным размером
|
||||
if( PROP_DEF != nWidth && PROP_DEF != oOutput.m_oPicture->m_nWidthGoal )
|
||||
|
||||
@ -51,54 +51,7 @@ public:
|
||||
{
|
||||
m_ooxGraphic = ooxGraphic;
|
||||
}
|
||||
bool Parse( ReaderParameter oParam , RtfPicture& oOutput)
|
||||
{
|
||||
if (m_ooxGraphic == NULL) return false;
|
||||
|
||||
switch(m_ooxGraphic->m_eGraphicType)
|
||||
{
|
||||
case OOX::Drawing::graphictypePicture:
|
||||
//собственно тока этот объект пока и есть (
|
||||
break;
|
||||
case OOX::Drawing::graphictypeLockedCanvas:
|
||||
case OOX::Drawing::graphictypeChart:
|
||||
case OOX::Drawing::graphictypeDiagram:
|
||||
case OOX::Drawing::graphictypeShape:
|
||||
case OOX::Drawing::graphictypeGroupShape:
|
||||
///todooo воткнуть конвертацию pptx->ppt->vml !!!
|
||||
break;
|
||||
}
|
||||
|
||||
for (long i=0; i < m_ooxGraphic->m_arrItems.size(); i++)
|
||||
{
|
||||
if (m_ooxGraphic->m_arrItems[i] == NULL) continue;
|
||||
|
||||
if (m_ooxGraphic->m_arrItems[i]->getType() == OOX::et_pic_pic)
|
||||
{
|
||||
OOX::Drawing::CPicture *picture = dynamic_cast<OOX::Drawing::CPicture *>(m_ooxGraphic->m_arrItems[i]);
|
||||
if ( (picture) && (picture->m_oBlipFill.m_oBlip.IsInit()))
|
||||
{
|
||||
CString sImageId = picture->m_oBlipFill.m_oBlip->m_oEmbed.GetValue();
|
||||
|
||||
if (oParam.oReader->m_currentContainer)
|
||||
{
|
||||
smart_ptr<OOX::File> oFile = oParam.oReader->m_currentContainer->Find(sImageId);
|
||||
|
||||
if ( oFile.IsInit() && (OOX::FileTypes::Image == oFile->type()))
|
||||
{
|
||||
OOX::Image* pImage = (OOX::Image*)oFile.operator->();
|
||||
|
||||
CString sImagePath = pImage->filename().GetPath();
|
||||
WriteDataToPicture( sImagePath, oOutput, _T("") );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
bool Parse( ReaderParameter oParam , RtfShape& oOutput);
|
||||
static bool WriteDataToPicture( CString sPath, RtfPicture& oOutput, CString sTempPath )
|
||||
{
|
||||
OOX::CPath ooxPath = sPath; //для target
|
||||
|
||||
@ -83,7 +83,7 @@ public:
|
||||
if(m_ooxInline->m_oGraphic.IsInit())
|
||||
{
|
||||
OOXPictureGraphicReader oGraphicReader(m_ooxInline->m_oGraphic.GetPointer());
|
||||
oGraphicReader.Parse( oParam, *oOutput.m_oPicture );
|
||||
oGraphicReader.Parse( oParam, oOutput);
|
||||
}
|
||||
//изменяем scale в соответсявии с выходным размером
|
||||
if( PROP_DEF != nWidth && PROP_DEF != oOutput.m_oPicture->m_nWidthGoal )
|
||||
|
||||
@ -460,6 +460,13 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
|
||||
case SimpleTypes::Vml::cssptMsoPositionHorizontalRelative :
|
||||
{
|
||||
oShape.m_nPositionHRelative = prop->get_Value().eMsoPosHorRel;
|
||||
switch(prop->get_Value().eMsoPosHorRel)
|
||||
{
|
||||
case SimpleTypes::Vml::cssmsoposhorrelMargin: oShape.m_eXAnchor = RtfShape::ax_margin; break;
|
||||
case SimpleTypes::Vml::cssmsoposhorrelPage: oShape.m_eXAnchor = RtfShape::ax_page; break;
|
||||
case SimpleTypes::Vml::cssmsoposhorrelText:
|
||||
case SimpleTypes::Vml::cssmsoposhorrelChar: break;//inline
|
||||
}
|
||||
}break;
|
||||
case SimpleTypes::Vml::cssptMsoPositionVertical:
|
||||
{
|
||||
@ -468,6 +475,13 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
|
||||
case SimpleTypes::Vml::cssptMsoPositionVerticalRelative :
|
||||
{
|
||||
oShape.m_nPositionVRelative = prop->get_Value().eMsoPosVerRel;
|
||||
switch(prop->get_Value().eMsoPosVerRel)
|
||||
{
|
||||
case SimpleTypes::Vml::cssmsoposverrelMargin: oShape.m_eYAnchor = RtfShape::ay_margin; break;
|
||||
case SimpleTypes::Vml::cssmsoposverrelPage: oShape.m_eYAnchor = RtfShape::ay_page; break;
|
||||
case SimpleTypes::Vml::cssmsoposverrelText:
|
||||
case SimpleTypes::Vml::cssmsoposverrelLine: break;//inline
|
||||
}
|
||||
}break;
|
||||
case SimpleTypes::Vml::cssptMsoWrapDistanceBottom:
|
||||
{
|
||||
@ -518,7 +532,19 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
|
||||
{
|
||||
oShape.m_nGtextSize = prop->get_Value().oValue.dValue;
|
||||
}break;
|
||||
|
||||
case SimpleTypes::Vml::cssptVTextAnchor:
|
||||
{
|
||||
oShape.m_nAnchorText = prop->get_Value().eVTextAnchor;//совпдает
|
||||
oShape.m_bFitShapeToText = 0;
|
||||
}break;
|
||||
case SimpleTypes::Vml::csspctMsoWidthPercent:
|
||||
{
|
||||
oShape.m_nPctWidth = prop->get_Value().oValue.dValue;
|
||||
}break;
|
||||
case SimpleTypes::Vml::csspctMsoHeightPercent:
|
||||
{
|
||||
oShape.m_nPctHeight = prop->get_Value().oValue.dValue;
|
||||
}break;
|
||||
case SimpleTypes::Vml::cssptDirection : break;
|
||||
case SimpleTypes::Vml::cssptLayoutFlow : break;
|
||||
case SimpleTypes::Vml::cssptMsoDirectionAlt : break;
|
||||
@ -528,7 +554,6 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
|
||||
case SimpleTypes::Vml::cssptMsoNextTextbox : break;
|
||||
case SimpleTypes::Vml::cssptMsoRotate : break;
|
||||
case SimpleTypes::Vml::cssptMsoTextScale : break;
|
||||
case SimpleTypes::Vml::cssptVTextAnchor : break;
|
||||
case SimpleTypes::Vml::cssptFont : break;
|
||||
case SimpleTypes::Vml::cssptFontStyle : break;
|
||||
case SimpleTypes::Vml::cssptFontVariant : break;
|
||||
@ -544,60 +569,6 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
|
||||
case SimpleTypes::Vml::cssptVTextSpacing : break;
|
||||
}
|
||||
|
||||
//else if( _T("mso-left-percent") == sProperty )
|
||||
// oShape.m_nPositionHPct = Strings::ToInteger( sValue );
|
||||
//else if( _T("mso-position-horizontal-relative") == sProperty )
|
||||
//{
|
||||
// if( _T("page") == sValue )
|
||||
// oShape.m_eXAnchor = RtfShape::ax_page;
|
||||
// else if( _T("margin") == sValue )
|
||||
// oShape.m_eXAnchor = RtfShape::ax_margin;
|
||||
// else if( _T("text") == sValue )
|
||||
// oShape.m_eXAnchor = RtfShape::ax_column;
|
||||
//}
|
||||
//else if( _T("mso-top-percent") == sProperty )
|
||||
// oShape.m_nPositionVPct = Strings::ToInteger( sValue );
|
||||
//else if( _T("mso-position-vertical-relative") == sProperty )
|
||||
//{
|
||||
// if( _T("page") == sValue )
|
||||
// oShape.m_eYAnchor = RtfShape::ay_page;
|
||||
// else if( _T("margin") == sValue )
|
||||
// oShape.m_eYAnchor = RtfShape::ay_margin;
|
||||
// else if( _T("text") == sValue )
|
||||
// oShape.m_eYAnchor = RtfShape::ay_margin;
|
||||
//}
|
||||
//else if( _T("mso-width-relative") == sProperty )
|
||||
//{
|
||||
// if( _T("margin") == sValue )
|
||||
// oShape.m_nPctWidthRelative = 0;
|
||||
// else if( _T("page") == sValue )
|
||||
// oShape.m_nPctWidthRelative = 1;
|
||||
// else if( _T("left-margin-area") == sValue )
|
||||
// oShape.m_nPctWidthRelative = 2;
|
||||
// else if( _T("right-margin-area") == sValue )
|
||||
// oShape.m_nPctWidthRelative = 3;
|
||||
// else if( _T("inner-margin-area") == sValue )
|
||||
// oShape.m_nPctWidthRelative = 4;
|
||||
// else if( _T("outer-margin-area") == sValue )
|
||||
// oShape.m_nPctWidthRelative = 5;
|
||||
|
||||
//}
|
||||
//else if( _T("mso-height-relative") == sProperty )
|
||||
//{
|
||||
// if( _T("margin") == sValue )
|
||||
// oShape.m_nPctHeightRelative = 0;
|
||||
// else if( _T("page") == sValue )
|
||||
// oShape.m_nPctHeightRelative = 1;
|
||||
// else if( _T("top-margin-area") == sValue )
|
||||
// oShape.m_nPctHeightRelative = 2;
|
||||
// else if( _T("bottom-margin-area") == sValue )
|
||||
// oShape.m_nPctHeightRelative = 3;
|
||||
// else if( _T("inner-margin-area") == sValue )
|
||||
// oShape.m_nPctHeightRelative = 4;
|
||||
// else if( _T("outer-margin-area") == sValue )
|
||||
// oShape.m_nPctHeightRelative = 5;
|
||||
//}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -227,41 +227,41 @@ public:
|
||||
CString sResult;
|
||||
switch( m_eType )
|
||||
{
|
||||
case rsc_chdate: sResult.Append( _T("") );break;
|
||||
case rsc_chdpl: sResult.Append( _T("") );break;
|
||||
case rsc_chdpa: sResult.Append( _T("") );break;
|
||||
case rsc_chtime: sResult.Append( _T("") );break;
|
||||
case rsc_chpgn: sResult.Append( _T("<w:pgNum />") );break;
|
||||
case rsc_sectnum: sResult.Append( _T("") );break;
|
||||
case rsc_chftn: sResult.Append( _T("<w:footnoteRef/>") );break;
|
||||
case rsc_chftnEnd: sResult.Append( _T("<w:endnoteRef/>") );break;
|
||||
case rsc_chatn: sResult.Append( _T("<w:annotationRef />") );break;
|
||||
case rsc_chftnsep: sResult.Append( _T("<w:separator />") );break;
|
||||
case rsc_chftnsepc: sResult.Append( _T("<w:continuationSeparator/>") );break;
|
||||
case rsc_page: sResult.Append( _T("<w:br w:type=\"page\"/>") );break;
|
||||
case rsc_column: sResult.Append( _T("<w:br w:type=\"column\"/>") );break;
|
||||
case rsc_chdate: sResult.Append( _T("") ); break;
|
||||
case rsc_chdpl: sResult.Append( _T("") ); break;
|
||||
case rsc_chdpa: sResult.Append( _T("") ); break;
|
||||
case rsc_chtime: sResult.Append( _T("") ); break;
|
||||
case rsc_chpgn: sResult.Append( _T("<w:pgNum />") ); break;
|
||||
case rsc_sectnum: sResult.Append( _T("") ); break;
|
||||
case rsc_chftn: sResult.Append( _T("<w:footnoteRef/>") ); break;
|
||||
case rsc_chftnEnd: sResult.Append( _T("<w:endnoteRef/>") ); break;
|
||||
case rsc_chatn: sResult.Append( _T("<w:annotationRef />") ); break;
|
||||
case rsc_chftnsep: sResult.Append( _T("<w:separator />") ); break;
|
||||
case rsc_chftnsepc: sResult.Append( _T("<w:continuationSeparator/>") ); break;
|
||||
case rsc_page: sResult.Append( _T("<w:br w:type=\"page\"/>") ); break;
|
||||
case rsc_column: sResult.Append( _T("<w:br w:type=\"column\"/>") ); break;
|
||||
case rsc_line: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"none\"/>") );break;
|
||||
case rsc_softpage: sResult.Append( _T("") );break;
|
||||
case rsc_softcol: sResult.Append( _T("") );break;
|
||||
case rsc_softline: sResult.Append( _T("") );break;
|
||||
case rsc_tab: sResult.Append( _T("<w:tab/>") );break;
|
||||
case rsc_emspace: sResult.Append( _T("") );break;
|
||||
case rsc_qmspace: sResult.Append( _T("") );break;
|
||||
case rsc_Formula: sResult.Append( _T("") );break;
|
||||
case rsc_softpage: sResult.Append( _T("") ); break;
|
||||
case rsc_softcol: sResult.Append( _T("") ); break;
|
||||
case rsc_softline: sResult.Append( _T("") ); break;
|
||||
case rsc_tab: sResult.Append( _T("<w:tab/>") ); break;
|
||||
case rsc_emspace: sResult.Append( _T("") ); break;
|
||||
case rsc_qmspace: sResult.Append( _T("") ); break;
|
||||
case rsc_Formula: sResult.Append( _T("") ); break;
|
||||
case rsc_OptHyphen: sResult.Append( _T("<w:t xml:space=\"preserve\">-</w:t>") );break;//<w:softHyphen/>
|
||||
case rsc_NonBrHyphen: sResult.Append( _T("<w:t xml:space=\"preserve\">-</w:t>") );break;//<w:nonBreakHyphen/>
|
||||
case rsc_NonBrSpace: sResult.Append( _T("<w:t xml:space=\"preserve\"> </w:t>") );break;
|
||||
case rsc_zwbo: sResult.Append( _T("") );break;
|
||||
case rsc_zwnbo: sResult.Append( _T("") );break;
|
||||
case rsc_zwj: sResult.Append( _T("") );break;
|
||||
case rsc_zwnj: sResult.Append( _T("") );break;
|
||||
case rsc_zwbo: sResult.Append( _T("") ); break;
|
||||
case rsc_zwnbo: sResult.Append( _T("") ); break;
|
||||
case rsc_zwj: sResult.Append( _T("") ); break;
|
||||
case rsc_zwnj: sResult.Append( _T("") ); break;
|
||||
}
|
||||
switch ( m_nTextWrapBreak )
|
||||
{
|
||||
case 0: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"none\"/>") );break;
|
||||
case 1: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"left\"/>") );break;
|
||||
case 2: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"right\"/>") );break;
|
||||
case 3: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"all\"/>") );break;
|
||||
case 0: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"none\"/>") ); break;
|
||||
case 1: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"left\"/>") ); break;
|
||||
case 2: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"right\"/>") ); break;
|
||||
case 3: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"all\"/>") ); break;
|
||||
}
|
||||
return sResult;
|
||||
}
|
||||
|
||||
@ -55,22 +55,22 @@ public:
|
||||
CString RenderToRtf(RenderParameter oRenderParameter)
|
||||
{
|
||||
CString sResult;
|
||||
sResult.Append(_T("{\\field "));
|
||||
sResult += _T("{\\field ");
|
||||
RENDER_RTF_BOOL( m_bDirty, sResult, _T("flddirty") )
|
||||
RENDER_RTF_BOOL( m_bLock, sResult, _T("fldlock") )
|
||||
sResult.Append(_T("{\\*\\fldinst"));
|
||||
sResult.Append( m_oCharProp.RenderToRtf(oRenderParameter) );
|
||||
sResult += _T("{\\*\\fldinst");
|
||||
sResult += m_oCharProp.RenderToRtf(oRenderParameter);
|
||||
return sResult;
|
||||
}
|
||||
CString RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
CString sResult;
|
||||
sResult.Append( _T("<w:r>") );
|
||||
sResult.Append( _T("<w:fldChar w:fldCharType=\"separate\"") );
|
||||
sResult += _T("<w:r>");
|
||||
sResult += _T("<w:fldChar w:fldCharType=\"separate\"");
|
||||
RENDER_OOX_INT_ATTRIBUTE( m_bDirty, sResult, _T("dirty") )
|
||||
RENDER_OOX_INT_ATTRIBUTE( m_bLock, sResult, _T("fldLock") )
|
||||
sResult.Append( _T("/>") );
|
||||
sResult.Append( _T("</w:r>") );
|
||||
sResult += _T("/>");
|
||||
sResult += _T("</w:r>");
|
||||
return sResult;
|
||||
}
|
||||
};
|
||||
@ -93,13 +93,16 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
|
||||
if( NULL != m_oText )
|
||||
{
|
||||
CString sResult;
|
||||
sResult.Append( _T("<w:r>") );
|
||||
sResult.Append( _T("<w:instrText>") );
|
||||
sResult += _T("<w:r>");
|
||||
sResult += _T("<w:instrText>");
|
||||
|
||||
oRenderParameter.nType = RENDER_TO_RTF_PARAM_CHAR;
|
||||
oRenderParameter.nValue = RENDER_TO_RTF_PARAM_NO_PAR;
|
||||
sResult.Append( m_oText->RenderToOOX( oRenderParameter ) );
|
||||
sResult.Append( _T("</w:instrText>") );
|
||||
sResult.Append( _T("</w:r>") );
|
||||
|
||||
sResult += m_oText->RenderToOOX( oRenderParameter );
|
||||
|
||||
sResult += _T("</w:instrText>");
|
||||
sResult += _T("</w:r>");
|
||||
return sResult;
|
||||
}
|
||||
else
|
||||
@ -191,31 +194,35 @@ public: void SetDefault()
|
||||
public: CString RenderToRtf(RenderParameter oRenderParameter)
|
||||
{
|
||||
CString sResult;
|
||||
sResult.Append(_T("{\\field "));
|
||||
sResult += _T("{\\field ");
|
||||
if( fm_none != m_eMode )
|
||||
{
|
||||
switch( m_eMode )
|
||||
{
|
||||
case fm_flddirty: sResult.Append(_T("{\\flddirty "));break;
|
||||
case fm_fldedit: sResult.Append(_T("{\\fldedit "));break;
|
||||
case fm_fldlock: sResult.Append(_T("{\\fldlock "));break;
|
||||
case fm_fldpriv: sResult.Append(_T("{\\fldpriv "));break;
|
||||
}
|
||||
case fm_flddirty: sResult += _T("{\\flddirty "); break;
|
||||
case fm_fldedit: sResult += _T("{\\fldedit "); break;
|
||||
case fm_fldlock: sResult += _T("{\\fldlock "); break;
|
||||
case fm_fldpriv: sResult += _T("{\\fldpriv "); break;
|
||||
}
|
||||
}
|
||||
sResult.Append(_T("{\\*\\fldinst "));
|
||||
sResult += _T("{\\*\\fldinst ");
|
||||
RenderParameter oNewParam = oRenderParameter;
|
||||
oNewParam.nType = RENDER_TO_RTF_PARAM_CHAR;
|
||||
oNewParam.nValue = RENDER_TO_RTF_PARAM_NO_PAR;
|
||||
sResult.Append( m_oInsert->RenderToRtf( oNewParam ) );
|
||||
|
||||
sResult += m_oInsert->RenderToRtf( oNewParam );
|
||||
|
||||
if( true == m_bReferenceToEndnote )
|
||||
sResult.Append( _T("\\fldalt") );
|
||||
sResult += _T("\\fldalt");
|
||||
|
||||
if( false == m_sData.IsEmpty() )
|
||||
sResult.AppendFormat( _T("{\\*\\datafield %ls}"), m_sData.GetBuffer());
|
||||
sResult.Append(_T("}"));
|
||||
|
||||
sResult += _T("}");
|
||||
|
||||
CString str = m_oResult->RenderToRtf( oRenderParameter ) ;
|
||||
sResult.AppendFormat(_T("{\\fldrslt %ls}"), str.GetBuffer());
|
||||
sResult.Append(_T("}"));
|
||||
sResult += _T("}");
|
||||
return sResult;
|
||||
}
|
||||
public: CString RenderToOOX(RenderParameter oRenderParameter)
|
||||
@ -225,7 +232,7 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
RenderParameter oNewParam = oRenderParameter;
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
|
||||
sResult.Append(m_oResult->RenderToOOX(oNewParam));
|
||||
sResult += m_oResult->RenderToOOX(oNewParam);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -257,8 +264,9 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
|
||||
//добавляем гиперссылку в документ
|
||||
sResult.AppendFormat( _T("<w:hyperlink r:id=\"%ls\" >"), sId.GetBuffer() );
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
|
||||
sResult.Append(m_oResult->RenderToOOX(oNewParam));
|
||||
sResult.Append( _T("</w:hyperlink>") );
|
||||
|
||||
sResult += m_oResult->RenderToOOX(oNewParam);
|
||||
sResult += _T("</w:hyperlink>");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -267,45 +275,51 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
RenderParameter oNewParametr = oRenderParameter;
|
||||
oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN;
|
||||
//sResult.Append(_T("<w:r>"));
|
||||
//sResult += _T("<w:r>"));
|
||||
|
||||
CString str = Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) ).Trim();
|
||||
sResult.AppendFormat(_T("<w:fldSimple w:instr=\"%ls\">"), str.GetBuffer() );
|
||||
|
||||
sResult += _T("<w:fldSimple w:instr=\"");
|
||||
sResult += str;
|
||||
sResult += _T("\">");
|
||||
|
||||
RenderParameter oNewParam = oRenderParameter;
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
|
||||
sResult.Append(m_oResult->RenderToOOX(oNewParam));
|
||||
sResult += m_oResult->RenderToOOX(oNewParam);
|
||||
sResult.AppendFormat(_T("</w:fldSimple>"));
|
||||
//sResult.Append(_T("</w:r>"));
|
||||
//sResult += _T("</w:r>"));
|
||||
}
|
||||
else
|
||||
{
|
||||
//так добавляются лишние параграфы
|
||||
RenderParameter oNewParametr = oRenderParameter;
|
||||
oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN;
|
||||
sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>"));
|
||||
sResult += _T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>");
|
||||
|
||||
CString str = Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) );
|
||||
|
||||
sResult.AppendFormat(_T("<w:r><w:instrText xml:space=\"preserve\">%ls</w:instrText></w:r>"), str.GetBuffer());
|
||||
sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>"));
|
||||
sResult += _T("<w:r><w:instrText xml:space=\"preserve\">");
|
||||
sResult += str;
|
||||
sResult += _T("</w:instrText></w:r>");
|
||||
sResult += _T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>");
|
||||
//заканчиваем этот параграф
|
||||
sResult.Append(_T("</w:p>"));
|
||||
sResult += _T("</w:p>");
|
||||
//пишем параграфы содержания
|
||||
oNewParametr.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||||
sResult.Append(m_oResult->RenderToOOX(oNewParametr));
|
||||
sResult += m_oResult->RenderToOOX(oNewParametr);
|
||||
//заканчиваем Field
|
||||
sResult.Append(_T("<w:p>"));
|
||||
sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>"));
|
||||
sResult += _T("<w:p>");
|
||||
sResult += _T("<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>");
|
||||
|
||||
////пишем параграфы содержания
|
||||
//RenderParameter oNewParametr = oRenderParameter;
|
||||
//oNewParametr.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||||
//sResult.Append(m_oResult->RenderToOOX(oNewParametr));
|
||||
//sResult += m_oResult->RenderToOOX(oNewParametr));
|
||||
|
||||
//CString sFieldBegin;
|
||||
//sFieldBegin.Append(_T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>"));
|
||||
//sFieldBegin += _T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>");
|
||||
//sFieldBegin.AppendFormat(_T("<w:r><w:instrText xml:space=\"preserve\">%ls</w:instrText></w:r>"), Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) ));
|
||||
//sFieldBegin.Append(_T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>"));
|
||||
//sFieldBegin += _T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>");
|
||||
////пишем после первого w:pPr
|
||||
//CString sFindStr = _T("</w:pPr>");
|
||||
//int nIndex = sResult.Find( sFindStr );
|
||||
@ -319,9 +333,9 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
|
||||
// sResult.Inset( sFieldBegin, nIndex + sFindStr.GetLength() );
|
||||
//}
|
||||
//CString sFieldEnd;
|
||||
//sFieldEnd.Append(_T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>"));
|
||||
//sFieldEnd += _T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>");
|
||||
//sFieldEnd.AppendFormat(_T("<w:r><w:instrText xml:space=\"preserve\">%ls</w:instrText></w:r>"), Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) ));
|
||||
//sFieldEnd.Append(_T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>"));
|
||||
//sFieldEnd += _T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>");
|
||||
////пишем после последнего w:pPr
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,6 +70,7 @@ class RtfParagraph : public ITextItem, public ItemContainer< IDocumentElementPtr
|
||||
public:
|
||||
RtfParagraphProperty m_oProperty;
|
||||
RtfOldListPtr m_oOldList;
|
||||
|
||||
int GetType( )
|
||||
{
|
||||
return TYPE_RTF_PARAGRAPH;
|
||||
@ -102,20 +103,27 @@ public:
|
||||
if( RENDER_TO_RTF_PARAM_CHAR == oRenderParameter.nType )
|
||||
{
|
||||
for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||||
sResult.Append( m_aArray[i]->RenderToRtf( oRenderParameter ) );
|
||||
{
|
||||
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sResult.Append(_T("\\pard\\plain"));
|
||||
sResult.Append( m_oProperty.RenderToRtf( oRenderParameter ) );
|
||||
sResult += _T("\\pard\\plain");
|
||||
sResult += m_oProperty.RenderToRtf( oRenderParameter ) ;
|
||||
|
||||
if( NULL != m_oOldList )
|
||||
sResult.Append( m_oOldList->RenderToRtf( oRenderParameter ) );
|
||||
sResult += m_oOldList->RenderToRtf( oRenderParameter ) ;
|
||||
|
||||
for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||||
sResult.Append( m_aArray[i]->RenderToRtf( oRenderParameter ) );
|
||||
sResult.Append( m_oProperty.m_oCharProperty.RenderToRtf( oRenderParameter ) );
|
||||
{
|
||||
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
|
||||
}
|
||||
|
||||
sResult += m_oProperty.m_oCharProperty.RenderToRtf( oRenderParameter );
|
||||
|
||||
//if( RENDER_TO_RTF_PARAM_NO_PAR != oRenderParameter.nValue )
|
||||
// sResult.Append(_T("\\par"));
|
||||
// sResult += T("\\par");
|
||||
}
|
||||
return sResult;
|
||||
}
|
||||
@ -126,25 +134,31 @@ public:
|
||||
if( RENDER_TO_OOX_PARAM_PLAIN == oRenderParameter.nType )
|
||||
{
|
||||
for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||||
sResult.Append( m_aArray[i]->RenderToOOX(oRenderParameter) );
|
||||
{
|
||||
sResult += m_aArray[i]->RenderToOOX(oRenderParameter);
|
||||
}
|
||||
}
|
||||
else if( RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType )
|
||||
{
|
||||
for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||||
sResult.Append( m_aArray[i]->RenderToOOX(oRenderParameter) );
|
||||
{
|
||||
sResult += m_aArray[i]->RenderToOOX(oRenderParameter);
|
||||
}
|
||||
}
|
||||
else if( RENDER_TO_OOX_PARAM_MATH == oRenderParameter.nType )
|
||||
{
|
||||
if (m_aArray.size() < 1)
|
||||
{
|
||||
sResult.Append( _T("<w:rPr>") );
|
||||
sResult.Append( m_oProperty.m_oCharProperty.RenderToOOX(oRenderParameter) );
|
||||
sResult.Append( _T("</w:rPr>") );
|
||||
sResult += _T("<w:rPr>");
|
||||
sResult += m_oProperty.m_oCharProperty.RenderToOOX(oRenderParameter);
|
||||
sResult += _T("</w:rPr>");
|
||||
}
|
||||
else
|
||||
{
|
||||
for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||||
sResult.Append( m_aArray[i]->RenderToOOX(oRenderParameter) );
|
||||
{
|
||||
sResult += m_aArray[i]->RenderToOOX(oRenderParameter);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -153,17 +167,17 @@ public:
|
||||
if( NULL != m_oOldList )
|
||||
bCanConvertToNumbering = m_oOldList->CanConvertToNumbering();
|
||||
|
||||
sResult.Append( _T("<w:p>") );
|
||||
sResult.Append( _T("<w:pPr>") );
|
||||
sResult.Append( m_oProperty.RenderToOOX(oRenderParameter) );
|
||||
sResult += _T("<w:p>");
|
||||
sResult += _T("<w:pPr>");
|
||||
sResult += m_oProperty.RenderToOOX(oRenderParameter);
|
||||
|
||||
if( NULL != m_oOldList )
|
||||
{
|
||||
//для OldList
|
||||
if( true == bCanConvertToNumbering )
|
||||
sResult.Append( m_oOldList->RenderToOOX( oRenderParameter ) );
|
||||
sResult += m_oOldList->RenderToOOX( oRenderParameter );
|
||||
}
|
||||
sResult.Append( _T("</w:pPr>") );
|
||||
sResult += _T("</w:pPr>");
|
||||
|
||||
if( NULL != m_oOldList )
|
||||
{
|
||||
@ -179,22 +193,25 @@ public:
|
||||
|
||||
for( int i = 0; i < m_oOldList->m_oText->GetCount(); i++ )
|
||||
{
|
||||
sResult.Append( _T("<w:r>") );
|
||||
sResult.Append( _T("<w:rPr>") );
|
||||
sResult.Append( oCharProp.RenderToOOX(oRenderParameter) );
|
||||
sResult.Append( _T("</w:rPr>") );
|
||||
sResult += _T("<w:r>");
|
||||
sResult += _T("<w:rPr>");
|
||||
sResult += oCharProp.RenderToOOX(oRenderParameter);
|
||||
sResult += _T("</w:rPr>");
|
||||
|
||||
sResult.Append( m_oOldList->m_oText->m_aArray[ i ]->RenderToOOX(oNewParam) );
|
||||
sResult.Append( _T("</w:r>") );
|
||||
sResult += m_oOldList->m_oText->m_aArray[ i ]->RenderToOOX(oNewParam);
|
||||
sResult += _T("</w:r>");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RenderParameter oNewParam = oRenderParameter;
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
|
||||
|
||||
for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||||
sResult.Append( m_aArray[i]->RenderToOOX(oNewParam) );
|
||||
sResult.Append( _T("</w:p>") );
|
||||
{
|
||||
sResult += m_aArray[i]->RenderToOOX(oNewParam);
|
||||
}
|
||||
sResult += _T("</w:p>");
|
||||
}
|
||||
return sResult;
|
||||
}
|
||||
|
||||
@ -29,10 +29,10 @@
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#include "RtfDocument.h"
|
||||
#include "RtfWriter.h"
|
||||
#include "Writer/OOXWriter.h"
|
||||
#include "RtfProperty.h"
|
||||
#include "RtfDocument.h"
|
||||
|
||||
#include "../../../Common/DocxFormat/Source/DocxFormat/FileTypes.h"
|
||||
#include "../../../Common/DocxFormat/Source/DocxFormat/App.h"
|
||||
@ -461,13 +461,13 @@ CString RtfShading::RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
RtfColor oForeColor;
|
||||
if( true == poRtfDocument->m_oColorTable.GetColor( m_nForeColor, oForeColor ) )
|
||||
sShading.AppendFormat( _T(" w:color=\"%ls\""), oForeColor.RenderToOOX(oNewParam).GetBuffer());
|
||||
sShading.Append( _T(" w:color=\"") + oForeColor.RenderToOOX(oNewParam) + _T("\""));
|
||||
}
|
||||
if( PROP_DEF != m_nBackColor )
|
||||
{
|
||||
RtfColor oBackColor;
|
||||
if( true == poRtfDocument->m_oColorTable.GetColor( m_nBackColor, oBackColor ) )
|
||||
sShading.AppendFormat( _T(" w:fill=\"%ls\""), oBackColor.RenderToOOX(oNewParam).GetBuffer());
|
||||
sShading.Append( _T(" w:fill=\"") + oBackColor.RenderToOOX(oNewParam) + _T("\""));
|
||||
}
|
||||
if( PROP_DEF != m_nValue )
|
||||
{
|
||||
@ -523,19 +523,19 @@ CString RtfShading::RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
switch( m_eType )
|
||||
{
|
||||
case st_clshdrawnil:sShading.Append( _T(" w:val=\"nil\"") );break;
|
||||
case st_chbghoriz:sShading.Append( _T(" w:val=\"thinHorzStripehorzStripe\"") );break;
|
||||
case st_chbgvert:sShading.Append( _T(" w:val=\"thinVertStripe\"") );break;
|
||||
case st_chbgfdiag:sShading.Append( _T(" w:val=\"thinReverseDiagStripe\"") );break;
|
||||
case st_chbgbdiag:sShading.Append( _T(" w:val=\"thinDiagStripe\"") );break;
|
||||
case st_chbgcross:sShading.Append( _T(" w:val=\"thinHorzCross\"") );break;
|
||||
case st_chbgdcross:sShading.Append( _T(" w:val=\"thinDiagCross\"") );break;
|
||||
case st_chbgdkhoriz:sShading.Append( _T(" w:val=\"horzStripe\"") );break;
|
||||
case st_chbgdkvert:sShading.Append( _T(" w:val=\"vertStripe\"") );break;
|
||||
case st_chbgdkfdiag:sShading.Append( _T(" w:val=\"reverseDiagStripe\"") );break;
|
||||
case st_chbgdkbdiag:sShading.Append( _T(" w:val=\"diagStripe\"") );break;
|
||||
case st_chbgdkcross:sShading.Append( _T(" w:val=\"horzCross\"") );break;
|
||||
case st_chbgdkdcross:sShading.Append( _T(" w:val=\"diagCross\"") );break;
|
||||
case st_clshdrawnil: sShading.Append( _T(" w:val=\"nil\"") ); break;
|
||||
case st_chbghoriz: sShading.Append( _T(" w:val=\"thinHorzStripehorzStripe\"") ); break;
|
||||
case st_chbgvert: sShading.Append( _T(" w:val=\"thinVertStripe\"") ); break;
|
||||
case st_chbgfdiag: sShading.Append( _T(" w:val=\"thinReverseDiagStripe\"") ); break;
|
||||
case st_chbgbdiag: sShading.Append( _T(" w:val=\"thinDiagStripe\"") ); break;
|
||||
case st_chbgcross: sShading.Append( _T(" w:val=\"thinHorzCross\"") ); break;
|
||||
case st_chbgdcross: sShading.Append( _T(" w:val=\"thinDiagCross\"") ); break;
|
||||
case st_chbgdkhoriz: sShading.Append( _T(" w:val=\"horzStripe\"") ); break;
|
||||
case st_chbgdkvert: sShading.Append( _T(" w:val=\"vertStripe\"") ); break;
|
||||
case st_chbgdkfdiag: sShading.Append( _T(" w:val=\"reverseDiagStripe\"") ); break;
|
||||
case st_chbgdkbdiag: sShading.Append( _T(" w:val=\"diagStripe\"") ); break;
|
||||
case st_chbgdkcross: sShading.Append( _T(" w:val=\"horzCross\"") ); break;
|
||||
case st_chbgdkdcross: sShading.Append( _T(" w:val=\"diagCross\"") ); break;
|
||||
}
|
||||
}
|
||||
if( false == sShading.IsEmpty() )
|
||||
@ -547,33 +547,33 @@ CString RtfBorder::RenderToRtf(RenderParameter oRenderParameter)
|
||||
CString sResult;
|
||||
switch( m_eType )
|
||||
{
|
||||
case bt_brdrs: sResult = _T("\\brdrs"); break;
|
||||
case bt_brdrth: sResult = _T("\\brdrth"); break;
|
||||
case bt_brdrsh: sResult = _T("\\brdrsh"); break;
|
||||
case bt_brdrdb: sResult = _T("\\brdrdb"); break;
|
||||
case bt_brdrdot: sResult = _T("\\brdrdot"); break;
|
||||
case bt_brdrdash: sResult = _T("\\brdrdash"); break;
|
||||
case bt_brdrhair: sResult = _T("\\brdrhair"); break;
|
||||
case bt_brdrinset: sResult = _T("\\brdrinset"); break;
|
||||
case bt_brdrdashsm: sResult = _T("\\brdrdashsm"); break;
|
||||
case bt_brdrdashd: sResult = _T("\\brdrdashd"); break;
|
||||
case bt_brdrdashdd: sResult = _T("\\brdrdashdd"); break;
|
||||
case bt_brdrdashdot: sResult = _T("\\brdrdashdot"); break;
|
||||
case bt_brdrtriple: sResult = _T("\\brdrtriple"); break;
|
||||
case bt_brdrtnthsg: sResult = _T("\\brdrtnthsg"); break;
|
||||
case bt_brdrthtnsg: sResult = _T("\\brdrthtnsg"); break;
|
||||
case bt_brdrtnthtnsg: sResult = _T("\\brdrtnthtnsg"); break;
|
||||
case bt_brdrtnthtnmg: sResult = _T("\\brdrtnthtnmg"); break;
|
||||
case bt_brdrtnthlg: sResult = _T("\\brdrtnthlg"); break;
|
||||
case bt_brdrthtnlg: sResult = _T("\\brdrthtnlg"); break;
|
||||
case bt_brdrtnthtnlg: sResult = _T("\\brdrtnthtnlg"); break;
|
||||
case bt_brdrwavy: sResult = _T("\\brdrwavy"); break;
|
||||
case bt_brdrwavydb: sResult = _T("\\brdrwavydb"); break;
|
||||
case bt_brdrs: sResult = _T("\\brdrs"); break;
|
||||
case bt_brdrth: sResult = _T("\\brdrth"); break;
|
||||
case bt_brdrsh: sResult = _T("\\brdrsh"); break;
|
||||
case bt_brdrdb: sResult = _T("\\brdrdb"); break;
|
||||
case bt_brdrdot: sResult = _T("\\brdrdot"); break;
|
||||
case bt_brdrdash: sResult = _T("\\brdrdash"); break;
|
||||
case bt_brdrhair: sResult = _T("\\brdrhair"); break;
|
||||
case bt_brdrinset: sResult = _T("\\brdrinset"); break;
|
||||
case bt_brdrdashsm: sResult = _T("\\brdrdashsm"); break;
|
||||
case bt_brdrdashd: sResult = _T("\\brdrdashd"); break;
|
||||
case bt_brdrdashdd: sResult = _T("\\brdrdashdd"); break;
|
||||
case bt_brdrdashdot: sResult = _T("\\brdrdashdot"); break;
|
||||
case bt_brdrtriple: sResult = _T("\\brdrtriple"); break;
|
||||
case bt_brdrtnthsg: sResult = _T("\\brdrtnthsg"); break;
|
||||
case bt_brdrthtnsg: sResult = _T("\\brdrthtnsg"); break;
|
||||
case bt_brdrtnthtnsg: sResult = _T("\\brdrtnthtnsg"); break;
|
||||
case bt_brdrtnthtnmg: sResult = _T("\\brdrtnthtnmg"); break;
|
||||
case bt_brdrtnthlg: sResult = _T("\\brdrtnthlg"); break;
|
||||
case bt_brdrthtnlg: sResult = _T("\\brdrthtnlg"); break;
|
||||
case bt_brdrtnthtnlg: sResult = _T("\\brdrtnthtnlg"); break;
|
||||
case bt_brdrwavy: sResult = _T("\\brdrwavy"); break;
|
||||
case bt_brdrwavydb: sResult = _T("\\brdrwavydb"); break;
|
||||
case bt_brdrdashdotstr: sResult = _T("\\brdrdashdotstr"); break;
|
||||
case bt_brdremboss: sResult = _T("\\brdremboss"); break;
|
||||
case bt_brdrengrave: sResult = _T("\\brdrengrave"); break;
|
||||
case bt_brdroutset: sResult = _T("\\brdroutset"); break;
|
||||
case bt_brdrnone: sResult = _T("\\brdrnone"); break;
|
||||
case bt_brdremboss: sResult = _T("\\brdremboss"); break;
|
||||
case bt_brdrengrave: sResult = _T("\\brdrengrave"); break;
|
||||
case bt_brdroutset: sResult = _T("\\brdroutset"); break;
|
||||
case bt_brdrnone: sResult = _T("\\brdrnone"); break;
|
||||
}
|
||||
if( PROP_DEF != m_nWidth && m_nWidth > 0)
|
||||
sResult.AppendFormat( _T("\\brdrw%d"), m_nWidth );
|
||||
@ -602,34 +602,34 @@ CString RtfBorder::RenderToOOX(RenderParameter oRenderParameter)
|
||||
|
||||
switch( m_eType )
|
||||
{
|
||||
case bt_brdrs: sResult.Append( _T(" w:val=\"single\"") ); break;
|
||||
case bt_brdrth: sResult.Append( _T(" w:val=\"thick\"") ); break;
|
||||
case bt_brdrsh: sResult.Append( _T(" w:val=\"\"thin") ); break;
|
||||
case bt_brdrdb: sResult.Append( _T(" w:val=\"double\"") ); break;
|
||||
case bt_brdrdot: sResult.Append( _T(" w:val=\"dotted\"") ); break;
|
||||
case bt_brdrdash: sResult.Append( _T(" w:val=\"dashed\"") ); break;
|
||||
case bt_brdrhair: sResult.Append( _T(" w:val=\"hair\"") ); break;
|
||||
case bt_brdrdashsm: sResult.Append( _T(" w:val=\"dashSmallGap\"") ); break;
|
||||
case bt_brdrdashd: sResult.Append( _T(" w:val=\"dotDash\"") ); break;
|
||||
case bt_brdrdashdd: sResult.Append( _T(" w:val=\"dotDotDash\"") ); break;
|
||||
case bt_brdrinset: sResult.Append( _T(" w:val=\"inset\"") ); break;
|
||||
case bt_brdrnone: sResult.Append( _T(" w:val=\"nil\"") ); break;
|
||||
case bt_brdroutset: sResult.Append( _T(" w:val=\"outset\"") ); break;
|
||||
case bt_brdrtriple: sResult.Append( _T(" w:val=\"triple\"") ); break;
|
||||
case bt_brdrtnthsg: sResult.Append( _T(" w:val=\"thinThickSmallGap\"") ); break;
|
||||
case bt_brdrthtnsg: sResult.Append( _T(" w:val=\"thickThinSmallGap\"") ); break;
|
||||
case bt_brdrtnthtnsg: sResult.Append( _T(" w:val=\"thinThickThinSmallGap\"") ); break;
|
||||
case bt_brdrtnthtnmg: sResult.Append( _T(" w:val=\"thinThickThinMediumGap\"") ); break;
|
||||
case bt_brdrtnthmg: sResult.Append( _T(" w:val=\"thinThickMediumGap\"") ); break;
|
||||
case bt_brdrthtnmg: sResult.Append( _T(" w:val=\"thickThinMediumGap\"") ); break;
|
||||
case bt_brdrtnthlg: sResult.Append( _T(" w:val=\"thinThickLargeGap\"") ); break;
|
||||
case bt_brdrthtnlg: sResult.Append( _T(" w:val=\"thickThinLargeGap\"") ); break;
|
||||
case bt_brdrtnthtnlg: sResult.Append( _T(" w:val=\"thinThickThinLargeGap\"") ); break;
|
||||
case bt_brdrwavy: sResult.Append( _T(" w:val=\"wave\"") ); break;
|
||||
case bt_brdrwavydb: sResult.Append( _T(" w:val=\"doubleWave\"") ); break;
|
||||
case bt_brdrdashdotstr: sResult.Append( _T(" w:val=\"dashDotStroked\"") ); break;
|
||||
case bt_brdremboss: sResult.Append( _T(" w:val=\"threeDEmboss\"") ); break;
|
||||
case bt_brdrengrave: sResult.Append( _T(" w:val=\"threeDEngrave\"") ); break;
|
||||
case bt_brdrs: sResult.Append( _T(" w:val=\"single\"") ); break;
|
||||
case bt_brdrth: sResult.Append( _T(" w:val=\"thick\"") ); break;
|
||||
case bt_brdrsh: sResult.Append( _T(" w:val=\"\"thin") ); break;
|
||||
case bt_brdrdb: sResult.Append( _T(" w:val=\"double\"") ); break;
|
||||
case bt_brdrdot: sResult.Append( _T(" w:val=\"dotted\"") ); break;
|
||||
case bt_brdrdash: sResult.Append( _T(" w:val=\"dashed\"") ); break;
|
||||
case bt_brdrhair: sResult.Append( _T(" w:val=\"hair\"") ); break;
|
||||
case bt_brdrdashsm: sResult.Append( _T(" w:val=\"dashSmallGap\"") ); break;
|
||||
case bt_brdrdashd: sResult.Append( _T(" w:val=\"dotDash\"") ); break;
|
||||
case bt_brdrdashdd: sResult.Append( _T(" w:val=\"dotDotDash\"") ); break;
|
||||
case bt_brdrinset: sResult.Append( _T(" w:val=\"inset\"") ); break;
|
||||
case bt_brdrnone: sResult.Append( _T(" w:val=\"nil\"") ); break;
|
||||
case bt_brdroutset: sResult.Append( _T(" w:val=\"outset\"") ); break;
|
||||
case bt_brdrtriple: sResult.Append( _T(" w:val=\"triple\"") ); break;
|
||||
case bt_brdrtnthsg: sResult.Append( _T(" w:val=\"thinThickSmallGap\"") ); break;
|
||||
case bt_brdrthtnsg: sResult.Append( _T(" w:val=\"thickThinSmallGap\"") ); break;
|
||||
case bt_brdrtnthtnsg: sResult.Append( _T(" w:val=\"thinThickThinSmallGap\"") ); break;
|
||||
case bt_brdrtnthtnmg: sResult.Append( _T(" w:val=\"thinThickThinMediumGap\"") ); break;
|
||||
case bt_brdrtnthmg: sResult.Append( _T(" w:val=\"thinThickMediumGap\"") ); break;
|
||||
case bt_brdrthtnmg: sResult.Append( _T(" w:val=\"thickThinMediumGap\"") ); break;
|
||||
case bt_brdrtnthlg: sResult.Append( _T(" w:val=\"thinThickLargeGap\"") ); break;
|
||||
case bt_brdrthtnlg: sResult.Append( _T(" w:val=\"thickThinLargeGap\"") ); break;
|
||||
case bt_brdrtnthtnlg: sResult.Append( _T(" w:val=\"thinThickThinLargeGap\"") ); break;
|
||||
case bt_brdrwavy: sResult.Append( _T(" w:val=\"wave\"") ); break;
|
||||
case bt_brdrwavydb: sResult.Append( _T(" w:val=\"doubleWave\"") ); break;
|
||||
case bt_brdrdashdotstr: sResult.Append( _T(" w:val=\"dashDotStroked\"") ); break;
|
||||
case bt_brdremboss: sResult.Append( _T(" w:val=\"threeDEmboss\"") ); break;
|
||||
case bt_brdrengrave: sResult.Append( _T(" w:val=\"threeDEngrave\"") ); break;
|
||||
}
|
||||
if( false == sResult.IsEmpty() )
|
||||
{
|
||||
@ -687,24 +687,24 @@ CString RtfCharProperty::RenderToRtf(RenderParameter oRenderParameter)
|
||||
RENDER_RTF_INT( m_nForeColor, sResult, _T("cf") )
|
||||
switch( m_eUnderStyle )
|
||||
{
|
||||
case uls_Single: sResult.Append( _T("\\ul") );break;
|
||||
case uls_Dotted: sResult.Append( _T("\\uld") );break;
|
||||
case uls_Dashed: sResult.Append( _T("\\uldash") );break;
|
||||
case uls_Dash_dotted: sResult.Append( _T("\\uldashd") );break;
|
||||
case uls_Dash_dot_dotted: sResult.Append( _T("\\uldashdd") );break;
|
||||
case uls_Double: sResult.Append( _T("\\uldb") );break;
|
||||
case uls_Heavy_wave: sResult.Append( _T("\\ulhwave") );break;
|
||||
case uls_Long_dashe: sResult.Append( _T("\\ulldash") );break;
|
||||
case uls_Stops_all: sResult.Append( _T("\\ulnone") );break;
|
||||
case uls_Thick: sResult.Append( _T("\\ulth") );break;
|
||||
case uls_Thick_dotted: sResult.Append( _T("\\ulthd") );break;
|
||||
case uls_Thick_dashed: sResult.Append( _T("\\ulthdash") );break;
|
||||
case uls_Thick_dash_dotted: sResult.Append( _T("\\ulthdashd") );break;
|
||||
case uls_Single: sResult.Append( _T("\\ul") );break;
|
||||
case uls_Dotted: sResult.Append( _T("\\uld") );break;
|
||||
case uls_Dashed: sResult.Append( _T("\\uldash") );break;
|
||||
case uls_Dash_dotted: sResult.Append( _T("\\uldashd") );break;
|
||||
case uls_Dash_dot_dotted: sResult.Append( _T("\\uldashdd") );break;
|
||||
case uls_Double: sResult.Append( _T("\\uldb") );break;
|
||||
case uls_Heavy_wave: sResult.Append( _T("\\ulhwave") );break;
|
||||
case uls_Long_dashe: sResult.Append( _T("\\ulldash") );break;
|
||||
case uls_Stops_all: sResult.Append( _T("\\ulnone") );break;
|
||||
case uls_Thick: sResult.Append( _T("\\ulth") );break;
|
||||
case uls_Thick_dotted: sResult.Append( _T("\\ulthd") );break;
|
||||
case uls_Thick_dashed: sResult.Append( _T("\\ulthdash") );break;
|
||||
case uls_Thick_dash_dotted: sResult.Append( _T("\\ulthdashd") );break;
|
||||
case uls_Thick_dash_dot_dotted: sResult.Append( _T("\\ulthdashdd") );break;
|
||||
case uls_Thick_long_dashed: sResult.Append( _T("\\ulthldash") );break;
|
||||
case uls_Double_wave: sResult.Append( _T("\\ululdbwave") );break;
|
||||
case uls_Word: sResult.Append( _T("\\ulw") );break;
|
||||
case uls_Wave: sResult.Append( _T("\\ulwave") );break;
|
||||
case uls_Thick_long_dashed: sResult.Append( _T("\\ulthldash") );break;
|
||||
case uls_Double_wave: sResult.Append( _T("\\ululdbwave") );break;
|
||||
case uls_Word: sResult.Append( _T("\\ulw") );break;
|
||||
case uls_Wave: sResult.Append( _T("\\ulwave") );break;
|
||||
}
|
||||
RENDER_RTF_INT( m_nUnderlineColor, sResult, _T("ulc") )
|
||||
RENDER_RTF_INT( m_nUp, sResult, _T("up") )
|
||||
@ -730,13 +730,13 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
|
||||
|
||||
switch( m_nAnimated )
|
||||
{
|
||||
case 0:sResult.Append(_T("<w:effect w:val=\"none\"/>"));break;
|
||||
case 1:sResult.Append(_T("<w:effect w:val=\"lights\"/>"));break;
|
||||
case 2:sResult.Append(_T("<w:effect w:val=\"blinkBackground\"/>"));break;
|
||||
case 3:sResult.Append(_T("<w:effect w:val=\"sparkle\"/>"));break;
|
||||
case 4:sResult.Append(_T("<w:effect w:val=\"antsBlack\"/>"));break;
|
||||
case 5:sResult.Append(_T("<w:effect w:val=\"antsRed\"/>"));break;
|
||||
case 6:sResult.Append(_T("<w:effect w:val=\"shimmer\"/>"));break;
|
||||
case 0: sResult.Append(_T("<w:effect w:val=\"none\"/>")); break;
|
||||
case 1: sResult.Append(_T("<w:effect w:val=\"lights\"/>")); break;
|
||||
case 2: sResult.Append(_T("<w:effect w:val=\"blinkBackground\"/>"));break;
|
||||
case 3: sResult.Append(_T("<w:effect w:val=\"sparkle\"/>")); break;
|
||||
case 4: sResult.Append(_T("<w:effect w:val=\"antsBlack\"/>")); break;
|
||||
case 5: sResult.Append(_T("<w:effect w:val=\"antsRed\"/>")); break;
|
||||
case 6: sResult.Append(_T("<w:effect w:val=\"shimmer\"/>")); break;
|
||||
}
|
||||
RENDER_OOX_BOOL( m_bBold, sResult, _T("w:b") )
|
||||
RENDER_OOX_BOOL( m_bCaps, sResult, _T("w:caps") )
|
||||
@ -1909,7 +1909,14 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
|
||||
sResult += _T("\"/>") ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
RtfSectionPtr oCurSection;
|
||||
if(true == poRtfDocument->GetItem( oCurSection ) )
|
||||
{
|
||||
sResult += oCurSection->RenderToOOX(oRenderParameter);
|
||||
oCurSection->m_bFinalize = false;
|
||||
}
|
||||
|
||||
if( 0 == m_bAutoHyphenation )
|
||||
sResult.Append( _T("<w:suppressAutoHyphens/>") );
|
||||
else if( 1 == m_bAutoHyphenation )
|
||||
@ -1950,8 +1957,8 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
|
||||
}
|
||||
RENDER_OOX_INT_ATTRIBUTE( m_nIndLeft, sIndent, _T("w:left") );
|
||||
RENDER_OOX_INT_ATTRIBUTE( m_nIndRight, sIndent, _T("w:right") );
|
||||
RENDER_OOX_INT_ATTRIBUTE( m_nIndStart, sIndent, _T("w:start") );
|
||||
RENDER_OOX_INT_ATTRIBUTE( m_nIndEnd, sIndent, _T("w:end") );
|
||||
//RENDER_OOX_INT_ATTRIBUTE( m_nIndStart, sIndent, _T("w:start") );
|
||||
//RENDER_OOX_INT_ATTRIBUTE( m_nIndEnd, sIndent, _T("w:end") );
|
||||
if( false == sIndent.IsEmpty() )
|
||||
{
|
||||
sResult += _T("<w:ind ");
|
||||
@ -2296,7 +2303,7 @@ CString RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
|
||||
|
||||
if( true == m_oShading.IsValid() )
|
||||
{
|
||||
if (PROP_DEF != m_nShadingPctFrom && PROP_DEF != m_oShading.m_nValue )
|
||||
if (PROP_DEF != m_nShadingPctFrom && PROP_DEF != m_oShading.m_nValue && m_oShading.m_nValue != 0)
|
||||
{
|
||||
// todooo тут цвет подложки подкладывается от ячейки, таблицы или еще какой хрени
|
||||
// пока берем второй цвет паттерна Romanization_Armenian.rtf
|
||||
|
||||
@ -120,6 +120,8 @@
|
||||
sResult.AppendFormat( _T("%d"), prop );\
|
||||
}
|
||||
|
||||
class RtfSection;
|
||||
typedef boost::shared_ptr<RtfSection> RtfSectionPtr;
|
||||
|
||||
class RtfFont : public IRenderableProperty
|
||||
{
|
||||
@ -260,14 +262,14 @@ public:
|
||||
return m_byteRed == oColor.m_byteRed && m_byteGreen == oColor.m_byteGreen && m_byteBlue == oColor.m_byteBlue &&
|
||||
m_byteTint == oColor.m_byteTint && m_byteShade == oColor.m_byteShade && m_eTheme == oColor.m_eTheme;
|
||||
}
|
||||
void SetHEX(int color)
|
||||
void SetHEX(int color)
|
||||
{
|
||||
SetDefault();
|
||||
m_byteRed= (color&0xFF0000) >>16;
|
||||
m_byteGreen = (color&0xFF00) >>4;
|
||||
m_byteBlue = (color&0xFF);
|
||||
m_byteRed = (color&0xFF0000) >> 16;
|
||||
m_byteGreen = (color&0xFF00) >> 8;
|
||||
m_byteBlue = (color&0xFF);
|
||||
}
|
||||
void SetRGB(BYTE red, BYTE green, BYTE blue)
|
||||
void SetRGB(BYTE red, BYTE green, BYTE blue)
|
||||
{
|
||||
SetDefault();
|
||||
m_byteRed = red;
|
||||
@ -361,7 +363,7 @@ public:
|
||||
else
|
||||
SetDefault();
|
||||
}
|
||||
CString ToHexColor()
|
||||
CString ToHexColor(bool bBGR = false)
|
||||
{
|
||||
BYTE byteRed = SetShade( m_byteRed );
|
||||
byteRed = SetTint( byteRed );
|
||||
@ -384,7 +386,9 @@ public:
|
||||
sBlue.AppendFormat( _T("0%x"), byteBlue );
|
||||
else
|
||||
sBlue.AppendFormat( _T("%x"), byteBlue );
|
||||
return sRed + sGreen + sBlue;
|
||||
|
||||
if (bBGR) return sBlue + sGreen + sRed ;
|
||||
else return sRed + sGreen + sBlue ;
|
||||
}
|
||||
|
||||
int ToInt()const
|
||||
@ -779,10 +783,10 @@ public:
|
||||
//свойство должно быть как единое целое, поэтому если oBorPr задано, то переписыватся целиком
|
||||
if( st_none != oParPr.m_eType || PROP_DEF != oParPr.m_nValue || PROP_DEF != oParPr.m_nForeColor || PROP_DEF != oParPr.m_nBackColor )
|
||||
{
|
||||
m_eType = oParPr.m_eType;
|
||||
m_nValue = oParPr.m_nValue;
|
||||
m_nForeColor = oParPr.m_nForeColor;
|
||||
m_nBackColor = oParPr.m_nBackColor;
|
||||
m_eType = oParPr.m_eType;
|
||||
m_nValue = oParPr.m_nValue;
|
||||
m_nForeColor = oParPr.m_nForeColor;
|
||||
m_nBackColor = oParPr.m_nBackColor;
|
||||
}
|
||||
}
|
||||
CString RenderToOOX(RenderParameter oRenderParameter);
|
||||
@ -2667,7 +2671,7 @@ public:
|
||||
int m_bStyleSWCell;//\tscswcell SW cell.
|
||||
int m_bStyleSECell;//\tscsecell SE cell.
|
||||
|
||||
RtfCharProperty m_oCharProperty;
|
||||
RtfCharProperty m_oCharProperty;
|
||||
|
||||
RtfParagraphProperty()
|
||||
{
|
||||
|
||||
@ -621,51 +621,52 @@ public:
|
||||
}
|
||||
CString RenderToRtf(RenderParameter oRenderParameter);
|
||||
CString RenderToOOX(RenderParameter oRenderParameter);
|
||||
private: CString SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader);
|
||||
private:
|
||||
CString SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader);
|
||||
};
|
||||
|
||||
typedef boost::shared_ptr<RtfSectionProperty> RtfSectionPropertyPtr;
|
||||
typedef boost::shared_ptr<RtfDocumentProperty> RtfDocumentPropertyPtr;
|
||||
class RtfSection :public TextItemContainer
|
||||
typedef boost::shared_ptr<RtfSectionProperty> RtfSectionPropertyPtr;
|
||||
typedef boost::shared_ptr<RtfDocumentProperty> RtfDocumentPropertyPtr;
|
||||
|
||||
class RtfSection : public TextItemContainer
|
||||
{
|
||||
public: RtfSectionProperty m_oProperty;
|
||||
public:
|
||||
RtfSectionProperty m_oProperty;
|
||||
|
||||
RtfSection()
|
||||
{
|
||||
}
|
||||
int GetType()
|
||||
{
|
||||
return TYPE_RTF_SECTION;
|
||||
}
|
||||
CString RenderToRtf(RenderParameter oRenderParameter)
|
||||
{
|
||||
CString sResult;
|
||||
sResult.Append( m_oProperty.RenderToRtf( oRenderParameter ) );
|
||||
bool m_bFinalize;
|
||||
|
||||
if( RENDER_TO_RTF_PARAM_NO_SECT != oRenderParameter.nType )
|
||||
sResult.Append(_T("\\sectd"));
|
||||
for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||||
sResult.Append( m_aArray[i]->RenderToRtf( oRenderParameter ) );
|
||||
return sResult;
|
||||
}
|
||||
CString RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
//CString sResult;
|
||||
// CString sSectProp;
|
||||
// RenderParameter oNewParam = oRenderParameter;
|
||||
// oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||||
// sSectProp.Append(m_oProperty.RenderToOOX(oNewParam));
|
||||
RtfSection()
|
||||
{
|
||||
m_bFinalize = false;
|
||||
}
|
||||
int GetType()
|
||||
{
|
||||
return TYPE_RTF_SECTION;
|
||||
}
|
||||
|
||||
// CString sParagraphs;
|
||||
// for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||||
// {
|
||||
// sParagraphs.Append( m_aArray[i]->RenderToOOX(oNewParam) );
|
||||
// }
|
||||
//if( oRenderParameter.nType == RENDER_TO_OOX_PARAM_LAST )
|
||||
// return sParagraphs + sSectProp;
|
||||
//else
|
||||
// return _T("<w:p><w:pPr>") + sSectProp + _T("</w:pPr></w:p>") + sParagraphs;
|
||||
return _T("");
|
||||
CString RenderToRtf(RenderParameter oRenderParameter)
|
||||
{
|
||||
CString sResult;
|
||||
sResult.Append( m_oProperty.RenderToRtf( oRenderParameter ) );
|
||||
|
||||
if( RENDER_TO_RTF_PARAM_NO_SECT != oRenderParameter.nType )
|
||||
sResult.Append(_T("\\sectd"));
|
||||
|
||||
for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||||
{
|
||||
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
|
||||
}
|
||||
return sResult;
|
||||
}
|
||||
CString RenderToOOX(RenderParameter oRenderParameter)
|
||||
{
|
||||
if (!m_bFinalize) return L"";
|
||||
m_bFinalize = false; // тут .. чтобы не повторилось при конвертации колонтитулов
|
||||
|
||||
RenderParameter oNewParam = oRenderParameter;
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||||
|
||||
return m_oProperty.RenderToOOX(oNewParam);
|
||||
}
|
||||
};
|
||||
typedef boost::shared_ptr<RtfSection> RtfSectionPtr;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -108,11 +108,16 @@ public:
|
||||
int m_bHidden; //Do not display or print (only set through Visual Basic for Applications). Boolean FALSE
|
||||
|
||||
//Text box
|
||||
int m_nAnchorText;
|
||||
int m_nTexpLeft; //dxTextLeft Left internal margin of the text box. EMU 91,440
|
||||
int m_nTexpTop; //
|
||||
int m_nTexpRight; //
|
||||
int m_nTexpBottom; //
|
||||
|
||||
int m_bFitShapeToText;
|
||||
int m_bFitTextToShape;
|
||||
int m_nCcol; //columns
|
||||
int m_nTxdir; //bidi
|
||||
int m_nWrapText;
|
||||
//Geometry
|
||||
int m_nAdjustValue; //adjustValue First adjust value from an adjust handle. The interpretation varies with the shape type. Adjust values alter the geometry of the shape in smart ways. Integer 0
|
||||
int m_nAdjustValue2;
|
||||
|
||||
@ -184,4 +184,122 @@ CString OOXDocumentWriter::CreateXmlEnd( )
|
||||
sResult.Append( _T("</w:document>") );
|
||||
|
||||
return sResult;
|
||||
}
|
||||
|
||||
bool OOXDocumentWriter::SaveByItemStart( CString sFolder )
|
||||
{
|
||||
CString pathWord = sFolder + FILE_SEPARATOR_STR + _T("word");
|
||||
FileSystem::Directory::CreateDirectory(pathWord) ;
|
||||
|
||||
try
|
||||
{
|
||||
CString sFilename = pathWord + FILE_SEPARATOR_STR + _T("document.xml");
|
||||
m_oFileWriter = new NFileWriter::CBufferedFileWriter( sFilename );
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_oWriter.m_oRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"), _T("word/document.xml") );
|
||||
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"), _T("/word/document.xml") );
|
||||
|
||||
CString sXml = CreateXmlStart( );
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
return true;
|
||||
}
|
||||
bool OOXDocumentWriter::SaveByItem()
|
||||
{
|
||||
if( true == m_bFirst )
|
||||
m_bFirst = false;
|
||||
else
|
||||
{
|
||||
RenderParameter oNewParam;
|
||||
oNewParam.poDocument = &m_oDocument;
|
||||
oNewParam.poWriter = &m_oWriter;
|
||||
oNewParam.poRels = &m_oWriter.m_oDocRels;
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||||
|
||||
if( m_oDocument.GetCount() > 1)//если что-то есть в следующей секции значит предудущая закончилась
|
||||
{
|
||||
if( m_oDocument[1]->GetCount() > 0 )
|
||||
{
|
||||
CString sSectPr = m_oDocument[0]->m_oProperty.RenderToOOX(oNewParam);
|
||||
CString sXml = m_oDocument[1]->operator[](0)->RenderToOOX(oNewParam);
|
||||
|
||||
int nIndexP = sXml.Find( _T("<w:p>") );
|
||||
|
||||
if (nIndexP == 0) //элемент параграф
|
||||
{
|
||||
int nIndexpPr = sXml.Find( _T("</w:pPr>") );
|
||||
if( -1 != nIndexpPr )
|
||||
{
|
||||
sXml.Insert( nIndexpPr, sSectPr );
|
||||
}
|
||||
else
|
||||
{
|
||||
sSectPr = _T("<w:pPr>") + sSectPr + _T("</w:pPr>");
|
||||
sXml.Insert( 5, sSectPr );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sXml = _T("<w:p><w:pPr>") + sSectPr + _T("</w:pPr></w:p>") + sXml;
|
||||
}
|
||||
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
|
||||
m_oDocument[1]->RemoveItem( 0 ); //удаляем первый параграф
|
||||
m_oDocument.RemoveItem( 0 ); //удаляем секцию
|
||||
}
|
||||
}
|
||||
else if( m_oDocument.GetCount() > 0 && m_oDocument[0]->GetCount() > 0 )//пишем параграф
|
||||
{
|
||||
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
if (m_oFileWriter)
|
||||
{
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
}
|
||||
else
|
||||
{
|
||||
//!!!!
|
||||
m_oFileWriter = NULL;
|
||||
}
|
||||
|
||||
m_oDocument[0]->RemoveItem( 0 );//удаляем первый параграф
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool OOXDocumentWriter::SaveByItemEnd()
|
||||
{
|
||||
RenderParameter oNewParam;
|
||||
oNewParam.poDocument = &m_oDocument;
|
||||
oNewParam.poWriter = &m_oWriter;
|
||||
oNewParam.poRels = &m_oWriter.m_oDocRels;
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||||
|
||||
if( m_oDocument.GetCount() > 0 && m_oDocument[0]->GetCount() > 0 )//дописываем последний параграф
|
||||
{
|
||||
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
|
||||
//удаляем первый параграф
|
||||
m_oDocument[0]->RemoveItem( 0 );
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
}
|
||||
CString sXml = CreateXmlEnd( );
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
if (m_oFileWriter)
|
||||
{
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
}
|
||||
RELEASEOBJECT( m_oFileWriter );
|
||||
return true;
|
||||
}
|
||||
@ -56,117 +56,10 @@ public:
|
||||
|
||||
CString CreateXmlEnd( );
|
||||
|
||||
bool SaveByItemStart( CString sFolder )
|
||||
{
|
||||
CString pathWord = sFolder + FILE_SEPARATOR_STR + _T("word");
|
||||
FileSystem::Directory::CreateDirectory(pathWord) ;
|
||||
|
||||
try
|
||||
{
|
||||
CString sFilename = pathWord + FILE_SEPARATOR_STR + _T("document.xml");
|
||||
m_oFileWriter = new NFileWriter::CBufferedFileWriter( sFilename );
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_oWriter.m_oRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"), _T("word/document.xml") );
|
||||
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"), _T("/word/document.xml") );
|
||||
bool SaveByItemStart( CString sFolder );
|
||||
bool SaveByItem ();
|
||||
bool SaveByItemEnd ();
|
||||
|
||||
CString sXml = CreateXmlStart( );
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
return true;
|
||||
}
|
||||
bool SaveByItem()
|
||||
{
|
||||
if( true == m_bFirst )
|
||||
m_bFirst = false;
|
||||
else
|
||||
{
|
||||
RenderParameter oNewParam;
|
||||
oNewParam.poDocument = &m_oDocument;
|
||||
oNewParam.poWriter = &m_oWriter;
|
||||
oNewParam.poRels = &m_oWriter.m_oDocRels;
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||||
|
||||
if( m_oDocument.GetCount() > 1 && m_oDocument[1]->GetCount() > 0 )//если что-то есть в следующей секции значит предудущая закончилась
|
||||
{
|
||||
if( m_oDocument[0]->GetCount() > 0 )
|
||||
{
|
||||
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
|
||||
//пишем вставляем свойства секции
|
||||
CString sSectPr = m_oDocument[0]->m_oProperty.RenderToOOX(oNewParam);
|
||||
CString sFindStr = _T("</w:pPr>");
|
||||
int nIndexpPr = sXml.Find( sFindStr );
|
||||
if( -1 != nIndexpPr )
|
||||
{
|
||||
sXml.Insert( nIndexpPr, sSectPr );
|
||||
}
|
||||
else
|
||||
{
|
||||
sFindStr = _T("<w:p>");
|
||||
int nIndexP = sXml.Find( _T("<w:p>") );
|
||||
if( -1 != nIndexP )
|
||||
sXml.Insert( nIndexP + sFindStr.GetLength(), _T("<w:pPr>") + sSectPr + _T("</w:pPr>") );
|
||||
}
|
||||
//удаляем первый параграф
|
||||
m_oDocument[0]->RemoveItem( 0 );
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
}
|
||||
//удаляем секцию
|
||||
m_oDocument.RemoveItem( 0 );
|
||||
}
|
||||
else if( m_oDocument.GetCount() > 0 && m_oDocument[0]->GetCount() > 0 )//пишем параграф
|
||||
{
|
||||
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
|
||||
//удаляем первый параграф
|
||||
m_oDocument[0]->RemoveItem( 0 );
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
if (m_oFileWriter)
|
||||
{
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
}
|
||||
else
|
||||
{
|
||||
//!!!!
|
||||
m_oFileWriter = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool SaveByItemEnd()
|
||||
{
|
||||
RenderParameter oNewParam;
|
||||
oNewParam.poDocument = &m_oDocument;
|
||||
oNewParam.poWriter = &m_oWriter;
|
||||
oNewParam.poRels = &m_oWriter.m_oDocRels;
|
||||
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||||
|
||||
if( m_oDocument.GetCount() > 0 && m_oDocument[0]->GetCount() > 0 )//дописываем последний параграф
|
||||
{
|
||||
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
|
||||
//удаляем первый параграф
|
||||
m_oDocument[0]->RemoveItem( 0 );
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
}
|
||||
CString sXml = CreateXmlEnd( );
|
||||
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
|
||||
|
||||
if (m_oFileWriter)
|
||||
{
|
||||
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
|
||||
}
|
||||
RELEASEOBJECT( m_oFileWriter );
|
||||
return true;
|
||||
}
|
||||
int GetCount()
|
||||
{
|
||||
int nCount = 0;
|
||||
|
||||
Reference in New Issue
Block a user