(2.0.0.254): ASCOfficeDocxFile2

Переделаны старые формулы
Вместо картинки со старой формулой в бинарник пишется еще и формула в новом формате

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@60183 954022d7-b5bf-4e40-9824-e11837661b57
This commit is contained in:
Sergey.Tsarkov
2014-12-11 13:35:13 +00:00
committed by Alexander Trofimov
parent 84470c55af
commit 0fd13eb6d8
6 changed files with 77 additions and 49 deletions

View File

@ -5287,32 +5287,7 @@ public:
GetRunStringWriter().WriteString(oCDrawingProperty.Write());
}
else if(oCDrawingProperty.bDataPos && oCDrawingProperty.bDataLength)
{
CString sDrawingProperty = oCDrawingProperty.Write();
if(false == sDrawingProperty.IsEmpty())
{
VARIANT var;
var.vt = VT_I4;
var.lVal = m_oFileWriter.m_oChartWriter.getChartCount();
m_oFileWriter.m_pDrawingConverter->SetAdditionalParam(CString(_T("DocumentChartsCount")), var);
long nCurPos = m_oBufferedStream.GetPos();
CString* bstrDrawingXml = NULL;
m_oFileWriter.m_pDrawingConverter->SaveObjectEx(oCDrawingProperty.DataPos, oCDrawingProperty.DataLength, sDrawingProperty, XMLWRITER_DOC_TYPE_DOCX, &bstrDrawingXml);
m_oBufferedStream.Seek(nCurPos);
VARIANT vt;
m_oFileWriter.m_pDrawingConverter->GetAdditionalParam(CString(_T("DocumentChartsCount")), &vt);
if(VT_I4 == vt.vt)
m_oFileWriter.m_oChartWriter.setChartCount(vt.lVal);
if(NULL != bstrDrawingXml && false == bstrDrawingXml->IsEmpty())
{
GetRunStringWriter().WriteString(*bstrDrawingXml);
}
RELEASEOBJECT(bstrDrawingXml);
}
}
ReadDrawing(oCDrawingProperty);
}
else if(c_oSerRunType::table == type)
{
@ -5372,6 +5347,33 @@ public:
res = c_oSerConstants::ReadUnknown;
return res;
};
void ReadDrawing(CDrawingProperty &oCDrawingProperty)
{
CString sDrawingProperty = oCDrawingProperty.Write();
if(false == sDrawingProperty.IsEmpty())
{
VARIANT var;
var.vt = VT_I4;
var.lVal = m_oFileWriter.m_oChartWriter.getChartCount();
m_oFileWriter.m_pDrawingConverter->SetAdditionalParam(CString(_T("DocumentChartsCount")), var);
long nCurPos = m_oBufferedStream.GetPos();
CString* bstrDrawingXml = NULL;
m_oFileWriter.m_pDrawingConverter->SaveObjectEx(oCDrawingProperty.DataPos, oCDrawingProperty.DataLength, sDrawingProperty, XMLWRITER_DOC_TYPE_DOCX, &bstrDrawingXml);
m_oBufferedStream.Seek(nCurPos);
VARIANT vt;
m_oFileWriter.m_pDrawingConverter->GetAdditionalParam(CString(_T("DocumentChartsCount")), &vt);
if(VT_I4 == vt.vt)
m_oFileWriter.m_oChartWriter.setChartCount(vt.lVal);
if(NULL != bstrDrawingXml && false == bstrDrawingXml->IsEmpty())
{
GetRunStringWriter().WriteString(*bstrDrawingXml);
}
RELEASEOBJECT(bstrDrawingXml);
}
}
int ReadObject(BYTE type, long length, void* poResult)
{
int res = c_oSerConstants::ReadOk;
@ -5381,6 +5383,13 @@ public:
res = Read1(length, &Binary_DocumentTableReader::ReadMathArg, this, poResult);
GetRunStringWriter().WriteString(CString(_T("</m:oMath>")));
}
else if(c_oSerRunType::pptxDrawing == type)
{
CDrawingProperty oCDrawingProperty(m_oFileWriter.getNextDocPr());
res = Read2(length, &Binary_DocumentTableReader::ReadPptxDrawing, this, &oCDrawingProperty);
if(oCDrawingProperty.bDataPos && oCDrawingProperty.bDataLength)
ReadDrawing(oCDrawingProperty);
}
else
res = c_oSerConstants::ReadUnknown;
return res;

View File

@ -4666,29 +4666,49 @@ namespace BinDocxRW
WriteComment(OOX::et_w_commentReference, pCommentReference->m_oId);
break;
}
/*case OOX::et_w_object:
case OOX::et_w_object:
{
int nCurPos = m_oBcw.WriteItemStart(c_oSerRunType::object);
OOX::Logic::CObject* pObject = static_cast<OOX::Logic::CObject*>(item);
//write Picture
OOX::Rels::CRelationShip* oRels = NULL;
smart_ptr<OOX::File> pFile = m_oParamsDocumentWriter.m_pRels->Find( OOX::RId(pObject->m_oOleObject->m_oId.get().GetValue()));
if(m_nSkipFldChar > 0)
break;
CString* pXml = NULL;
CString sLink;
if (pFile.IsInit() && OOX::FileTypes::OleObject == pFile->type())
OOX::Logic::CPicture* pPicture = static_cast<OOX::Logic::CPicture*>(item);
pXml = pPicture->m_sXml.GetPointer();
int nCurPos1 = m_oBcw.WriteItemStart(c_oSerRunType::pptxDrawing);
WriteDrawing(pXml, NULL, NULL);
m_oBcw.WriteItemEnd(nCurPos1);
//write equation
/*OOX::Logic::CObject* pObject = static_cast<OOX::Logic::CObject*>(item);
if (pObject->m_oOleObject.IsInit())
{
OOX::HyperLink* pHyperlinkFile = static_cast<OOX::HyperLink*>(pFile.operator ->());
sLink = pHyperlinkFile->Uri().GetPath();
}
MathEquation::BinaryEquationWriter oBinEqWriter(m_oBcw.m_oStream);
CString sProgID = pObject->m_oOleObject->m_sProgId.get().GetString();
if ( _T("Equation.3") == sProgID)
{
OOX::Rels::CRelationShip* oRels = NULL;
smart_ptr<OOX::File> pFile = m_oParamsDocumentWriter.m_pRels->Find( OOX::RId(pObject->m_oOleObject->m_oId.get().GetValue()));
MathEquation::CEquationReader oReader(sLink);
oReader.SetOutputDev(&oBinEqWriter);
oReader.Parse();
CString sLink;
if (pFile.IsInit() && OOX::FileTypes::OleObject == pFile->type())
{
OOX::HyperLink* pHyperlinkFile = static_cast<OOX::HyperLink*>(pFile.operator ->());
sLink = pHyperlinkFile->Uri().GetPath();
}
MathEquation::BinaryEquationWriter oBinEqWriter(m_oBcw.m_oStream);
MathEquation::CEquationReader oReader(sLink);
oReader.SetOutputDev(&oBinEqWriter);
oReader.Parse();
}
}*/
m_oBcw.WriteItemEnd(nCurPos);
break;
}*/
}
}
}
}

View File

@ -2,7 +2,6 @@
//2
//0
//0
//253
#define INTVER 2,0,0,253
#define STRVER "2,0,0,253\0"
//254
#define INTVER 2,0,0,254
#define STRVER "2,0,0,254\0"

View File

@ -140,7 +140,7 @@ namespace OOX
else if ( _T("w:noBreakHyphen") == sName )
pItem = new CNoBreakHyphen( oItem );
else if ( _T("w:object") == sName )
pItem = new CPicture( oItem );
pItem = new CObject( oItem );
else if ( _T("w:pgNum") == sName )
pItem = new CPgNum( oItem );
else if ( _T("w:pict") == sName )
@ -235,7 +235,7 @@ namespace OOX
else if ( _T("w:noBreakHyphen") == sName )
pItem = new CNoBreakHyphen( oReader );
else if ( _T("w:object") == sName )
pItem = new CPicture( oReader );
pItem = new CObject( oReader );
else if ( _T("w:pgNum") == sName )
pItem = new CPgNum( oReader );
else if ( _T("w:pict") == sName )

View File

@ -210,12 +210,12 @@ int CEquationReader::HandleChar(uint8_t nTag)
if (nChar < 0x20)
return nRet;
pOutputDev->BeginChar(nChar, nTypeFace, IsSpecialChar(nChar));
if (xfEMBELL(nTag))
{
nRet = HandleRecords();
}
pOutputDev->BeginChar(nChar, nTypeFace, IsSpecialChar(nChar));
}
pOutputDev->EndChar();
return nRet;