mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
Конвертация ppt -> pptx . Убрана промежуточная конвертация в xml, + crop image, + text anchor, .... Также частично заменен CString на std. Bug 30205.
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64814 954022d7-b5bf-4e40-9824-e11837661b57
This commit is contained in:
committed by
Alexander Trofimov
parent
1349fbf887
commit
8e6ee145f7
@ -9,14 +9,14 @@
|
||||
#include "../Records/SoundCollectionContainer.h"
|
||||
#include "../Records/SoundContainer.h"
|
||||
|
||||
CPPTUserInfo::CPPTUserInfo() : CDocument(),
|
||||
m_oUser(),
|
||||
m_mapOffsetInPIDs(),
|
||||
m_oDocument(),
|
||||
m_mapMasters(),
|
||||
m_mapNotes(),
|
||||
m_mapSlides(),
|
||||
m_arEmptyPictures()
|
||||
CPPTUserInfo::CPPTUserInfo() : CDocument(),
|
||||
m_oUser(),
|
||||
m_mapOffsetInPIDs(),
|
||||
m_oDocument(),
|
||||
m_mapMasters(),
|
||||
m_mapNotes(),
|
||||
m_mapSlides(),
|
||||
m_arEmptyPictures()
|
||||
{
|
||||
m_pDocumentInfo = NULL;
|
||||
m_lIndexThisUser = -1;
|
||||
@ -235,7 +235,7 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
for (int nIndex = 0; nIndex < oArrayFonts.size(); ++nIndex)
|
||||
{
|
||||
CFont oFont;
|
||||
oFont.Name = (CString)oArrayFonts[nIndex]->m_strFaceName;
|
||||
oFont.Name = oArrayFonts[nIndex]->m_strFaceName;
|
||||
oFont.Charset = oArrayFonts[nIndex]->m_lfCharSet;
|
||||
|
||||
switch (oArrayFonts[nIndex]->m_lfPitchAndFamily / 0x10)
|
||||
@ -305,7 +305,6 @@ void CPPTUserInfo::FromDocument()
|
||||
|
||||
double DurationSlide = PPT_DEFAULT_SLIDE_DURATION;
|
||||
|
||||
//for (std::map<DWORD, CRecordSlide*>::iterator pPair = m_mapSlides.begin(); pPair != m_mapSlides.end(); ++pPair)
|
||||
for (int i=0; i< m_arrSlidesOrder.size(); i++)
|
||||
{
|
||||
std::map<DWORD, CRecordSlide*>::iterator pPair = m_mapSlides.find(m_arrSlidesOrder[i]);
|
||||
@ -537,7 +536,7 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
|
||||
|
||||
pRecordSlide->GetRecordsByType(&oArrayShapes, true);
|
||||
|
||||
pSlide->m_bShowMasterShapes = (TRUE == oArrayAtoms[0]->m_bMasterObjects);
|
||||
pSlide->m_bShowMasterShapes = oArrayAtoms[0]->m_bMasterObjects;
|
||||
pSlide->m_bIsBackground = false;
|
||||
|
||||
for (int nShape = 0; nShape < oArrayShapes.size(); ++nShape)
|
||||
@ -586,18 +585,18 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
|
||||
|
||||
if (m_mapMasters.end() == pPairMaster)
|
||||
return;
|
||||
std::vector<CRecordSlideAtom*> oArraySlideAtoms;
|
||||
|
||||
CRecordSlide* pMaster = pPairMaster->second;
|
||||
|
||||
if (pMaster == NULL)
|
||||
return; //todooo 20080720.ppt
|
||||
|
||||
std::vector<CRecordSlideAtom*> oArraySlideAtoms;
|
||||
pMaster->GetRecordsByType(&oArraySlideAtoms, true);
|
||||
if (0 == oArraySlideAtoms.size())
|
||||
return;
|
||||
|
||||
DWORD dwID = (DWORD)oArraySlideAtoms[0]->m_nMasterIDRef;
|
||||
|
||||
DWORD dwID = (DWORD)oArraySlideAtoms[0]->m_nMasterIDRef;
|
||||
if (0 != dwID)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><> main!!!
|
||||
@ -605,13 +604,6 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
|
||||
// title <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<CRecordTripOriginalMasterId12Atom*> oArrayOrigId;
|
||||
pMaster->GetRecordsByType(&oArrayOrigId, false, true);
|
||||
|
||||
if (0 != oArrayOrigId.size())
|
||||
m_mapMasterOriginalIds.insert(std::pair<DWORD, DWORD>(oArrayOrigId[0]->m_dwID, dwMasterID));
|
||||
|
||||
std::vector<CRecordTripCompositeMasterId12Atom*> oArrayCompId;
|
||||
pMaster->GetRecordsByType(&oArrayCompId, false, true);
|
||||
if (0 != oArrayCompId.size())
|
||||
@ -620,7 +612,18 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> main, <20> <20><><EFBFBD><EFBFBD><EFBFBD> - title
|
||||
// title <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
bool bMasterColorScheme = oArraySlideAtoms[0]->m_bMasterScheme;
|
||||
bool bMasterBackGround = oArraySlideAtoms[0]->m_bMasterBackground;
|
||||
bool bMasterObjects = oArraySlideAtoms[0]->m_bMasterObjects;
|
||||
|
||||
std::vector<CRecordTripOriginalMasterId12Atom*> oArrayOrigId;
|
||||
pMaster->GetRecordsByType(&oArrayOrigId, false, true);
|
||||
|
||||
if (0 != oArrayOrigId.size())
|
||||
m_mapMasterOriginalIds.insert(std::pair<DWORD, DWORD>(oArrayOrigId[0]->m_dwID, dwMasterID));
|
||||
|
||||
|
||||
LONG lIndexTheme = (LONG)m_arThemes.size();
|
||||
|
||||
@ -631,6 +634,16 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
|
||||
m_arThemes.push_back(theme);
|
||||
CTheme* pTheme = &m_arThemes[lIndexTheme];
|
||||
|
||||
std::vector<CRecordCString*> oArrayStrings;
|
||||
pMaster->GetRecordsByType(&oArrayStrings, false, false);
|
||||
for (int i=0; i < oArrayStrings.size(); i++)
|
||||
{
|
||||
if (oArrayStrings[i]->m_oHeader.RecType == 0x0fba)
|
||||
{
|
||||
pTheme->m_sThemeName = oArrayStrings[i]->m_strText;
|
||||
}
|
||||
}
|
||||
|
||||
CLayout layout;
|
||||
pTheme->m_arLayouts.push_back(layout);
|
||||
CLayout* pLayout = &pTheme->m_arLayouts.back();
|
||||
@ -654,14 +667,24 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
|
||||
int nColorCount = oArrayColors.size();
|
||||
for (int i = 0; i < nColorCount; ++i)
|
||||
{
|
||||
if (0x01 == oArrayColors[i]->m_oHeader.RecInstance)
|
||||
if (0x01 == oArrayColors[i]->m_oHeader.RecInstance && m_oSchemeColors.size() < 1)
|
||||
{
|
||||
oArrayColors[i]->ToArray(&pTheme->m_arColorScheme);
|
||||
oArrayColors[i]->ToArray(&m_oSchemeColors);
|
||||
}
|
||||
if (0x06 == oArrayColors[i]->m_oHeader.RecInstance)
|
||||
{
|
||||
std::vector<CColor> extra;
|
||||
oArrayColors[i]->ToArray(&extra);
|
||||
|
||||
CorrectColorScheme(extra);
|
||||
pTheme->m_arExtraColorScheme.push_back(extra);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
CorrectColorScheme(pTheme->m_arColorScheme);
|
||||
//CorrectColorScheme(m_oSchemeColors);//??
|
||||
|
||||
// ---------------------------------------------------------------------------------
|
||||
|
||||
@ -713,7 +736,6 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
|
||||
pTheme->m_pStyles[3].ApplyAfter(pMasterWrapper->m_pStyles[3].get());
|
||||
|
||||
// ---------------------------------------------------------------------------------
|
||||
|
||||
pLayout->m_lOriginalWidth = lOriginWidth;
|
||||
pLayout->m_lOriginalHeight = lOriginHeight;
|
||||
|
||||
@ -721,8 +743,8 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
|
||||
pLayout->m_lHeight = (LONG)(c_dMasterUnitsToMillimetreKoef * lOriginHeight);
|
||||
|
||||
pLayout->m_bUseThemeColorScheme = true;
|
||||
pLayout->m_bShowMasterShapes = true;
|
||||
pLayout->m_strLayoutType = ConvertLayoutType(oArraySlideAtoms[0]->m_oLayout.m_nGeom, oArraySlideAtoms[0]->m_oLayout.m_pPlaceHolderID);
|
||||
pLayout->m_bShowMasterShapes = bMasterObjects;
|
||||
pLayout->m_strLayoutType = ConvertLayoutType(oArraySlideAtoms[0]->m_oLayout.m_nGeom, oArraySlideAtoms[0]->m_oLayout.m_pPlaceHolderID);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...-----------------------------------------------------------
|
||||
std::vector<CRecordShapeContainer*> oArrayShapes;
|
||||
@ -739,32 +761,51 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
|
||||
{
|
||||
AddAnimation ( dwMasterID, lOriginWidth, lOriginHeight, pElem );
|
||||
|
||||
if (pElem->m_bIsBackground)
|
||||
{
|
||||
CShapeElement* pShape = dynamic_cast<CShapeElement*>(pElem);
|
||||
if (NULL != pShape)
|
||||
{
|
||||
pShape->SetupProperties(NULL, pTheme, pLayout);
|
||||
|
||||
pTheme->m_bIsBackground = true;
|
||||
pTheme->m_oBackground = pShape->m_oShape.m_oBrush;
|
||||
}
|
||||
|
||||
RELEASEINTERFACE(pElem);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (-1 == pElem->m_lPlaceholderType)
|
||||
{
|
||||
if (pElem->m_bIsBackground)
|
||||
{
|
||||
CShapeElement* pShape = dynamic_cast<CShapeElement*>(pElem);
|
||||
if (NULL != pShape)
|
||||
{
|
||||
pShape->SetupProperties(NULL, pTheme, pLayout);
|
||||
|
||||
pTheme->m_bIsBackground = true;
|
||||
pTheme->m_oBackground = pShape->m_oShape.m_oBrush;
|
||||
}
|
||||
|
||||
RELEASEINTERFACE(pElem);
|
||||
continue;
|
||||
}
|
||||
pTheme->m_arElements.push_back(pElem);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pElem->m_bIsBackground)
|
||||
{
|
||||
if (!bMasterBackGround)
|
||||
{
|
||||
CShapeElement* pShape = dynamic_cast<CShapeElement*>(pElem);
|
||||
|
||||
if (NULL != pShape)
|
||||
{
|
||||
pShape->SetupProperties(NULL, pTheme, pLayout);
|
||||
|
||||
pLayout->m_bIsBackground = true;
|
||||
pLayout->m_oBackground = pShape->m_oShape.m_oBrush;
|
||||
}
|
||||
}
|
||||
RELEASEINTERFACE(pElem);
|
||||
continue;
|
||||
}
|
||||
pLayout->m_arElements.push_back(pElem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CPPTUserInfo::LoadMasters(const LONG& lOriginWidth, const LONG& lOriginHeight)
|
||||
{
|
||||
//for (std::map<DWORD, CRecordSlide*>::iterator pPair = m_mapMasters.begin(); pPair != m_mapMasters.end(); ++pPair)
|
||||
for (long i=0; i< m_arrMastersOrder.size(); i++)
|
||||
{
|
||||
std::map<DWORD, CRecordSlide*>::iterator pPair = m_mapMasters.find(m_arrMastersOrder[i]);
|
||||
@ -773,7 +814,6 @@ void CPPTUserInfo::LoadMasters(const LONG& lOriginWidth, const LONG& lOriginHeig
|
||||
LoadMainMaster(pPair->first, lOriginWidth, lOriginHeight);
|
||||
}
|
||||
|
||||
//for (std::map<DWORD, CRecordSlide*>::iterator pPair = m_mapMasters.begin(); pPair != m_mapMasters.end(); ++pPair)
|
||||
for (long i=0; i< m_arrMastersOrder.size(); i++)
|
||||
{
|
||||
std::map<DWORD, CRecordSlide*>::iterator pPair = m_mapMasters.find(m_arrMastersOrder[i]);
|
||||
@ -857,8 +897,8 @@ void CPPTUserInfo::LoadNoMainMaster(DWORD dwMasterID, const LONG& lOriginWidth,
|
||||
pMasterWrapper->m_parEmptyPictures = &m_arEmptyPictures;
|
||||
|
||||
pLayout->m_bUseThemeColorScheme = true;
|
||||
pLayout->m_bShowMasterShapes = (bMasterObjects == TRUE) ? true : false;
|
||||
pLayout->m_strLayoutType = ConvertLayoutType(oArraySlideAtoms[0]->m_oLayout.m_nGeom, oArraySlideAtoms[0]->m_oLayout.m_pPlaceHolderID);
|
||||
pLayout->m_bShowMasterShapes = bMasterObjects;
|
||||
pLayout->m_strLayoutType = ConvertLayoutType(oArraySlideAtoms[0]->m_oLayout.m_nGeom, oArraySlideAtoms[0]->m_oLayout.m_pPlaceHolderID);
|
||||
|
||||
std::vector<NSPresentationEditor::CColor>* pArrayColorScheme = &pTheme->m_arColorScheme;
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> -----------------------------------------------------------
|
||||
@ -904,9 +944,6 @@ void CPPTUserInfo::LoadNoMainMaster(DWORD dwMasterID, const LONG& lOriginWidth,
|
||||
|
||||
pLayout->Clear();
|
||||
|
||||
//if (!bMasterObjects)
|
||||
// pTheme->m_arElements.clear();
|
||||
|
||||
// ---------------------------------------------------------------------------------
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||
@ -1163,7 +1200,7 @@ void CPPTUserInfo::LoadExternal(CRecordExObjListContainer* pExObjects)
|
||||
NSPresentationEditor::CExFilesInfo oInfo;
|
||||
|
||||
oInfo.m_strFilePath = m_oExMedia.m_strPresentationDirectory + FILE_SEPARATOR_STR + oArrayStrings[0]->m_strText + _T(".audio");
|
||||
oInfo.m_dwID = (DWORD)XmlUtils::GetInteger(oArrayStrings[2]->m_strText);
|
||||
oInfo.m_dwID = (DWORD)XmlUtils::GetInteger(oArrayStrings[2]->m_strText.c_str());
|
||||
|
||||
oArrayData[0]->SaveToFile(oInfo.m_strFilePath);
|
||||
|
||||
@ -1338,7 +1375,7 @@ void CPPTUserInfo::AddAnimation ( DWORD dwSlideID, double Width, double Height,
|
||||
}
|
||||
}
|
||||
|
||||
void CPPTUserInfo::AddAudioTransition (DWORD dwSlideID, CTransition* pTransition, const CString& strFilePath)
|
||||
void CPPTUserInfo::AddAudioTransition (DWORD dwSlideID, CTransition* pTransition, const std::wstring& strFilePath)
|
||||
{
|
||||
if (NULL==pTransition)
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user