Commit 3aaccc52 authored by Sergey.Konovalov's avatar Sergey.Konovalov Committed by Alexander Trofimov

изменены некоторые интерфейсы. между DocxFile2 и DrawingConverter передаются...

изменены некоторые интерфейсы. между DocxFile2 и DrawingConverter передаются StreamReaderWriter, а не byte*

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@58421 954022d7-b5bf-4e40-9824-e11837661b57
parent 0fa7cfaa
......@@ -17,7 +17,6 @@ namespace Writers
{
public:
NSBinPptxRW::CDrawingConverter* m_pDrawingConverter;
LPSAFEARRAY m_pArray;
CString m_sThemePath;
bool m_bSaveChartAsImg;
ContentTypesWriter m_oContentTypesWriter;
......@@ -32,8 +31,8 @@ namespace Writers
ChartWriter m_oChartWriter;
int m_nDocPrIndex;
public:
FileWriter(CString sDirOutput,CString sFontDir, int nVersion, bool bSaveChartAsImg, NSBinPptxRW::CDrawingConverter* pDrawingConverter, LPSAFEARRAY pArray, CString sThemePath):
m_pDrawingConverter(pDrawingConverter),m_pArray(pArray),m_sThemePath(sThemePath),m_bSaveChartAsImg(bSaveChartAsImg),
FileWriter(CString sDirOutput,CString sFontDir, int nVersion, bool bSaveChartAsImg, NSBinPptxRW::CDrawingConverter* pDrawingConverter, CString sThemePath):
m_pDrawingConverter(pDrawingConverter),m_sThemePath(sThemePath),m_bSaveChartAsImg(bSaveChartAsImg),
m_oContentTypesWriter(sDirOutput), m_oFontTableWriter(sDirOutput, sFontDir),
m_oHeaderFooterWriter(sDirOutput, m_oContentTypesWriter),
m_oMediaWriter(sDirOutput),
......
......@@ -2292,10 +2292,11 @@ public:
else if(c_oSerOtherTableTypes::DocxTheme == type)
{
// .
long nCurPos = m_oBufferedStream.GetPos();
BSTR bstrThemePath = m_oFileWriter.m_sThemePath.AllocSysString();
m_oFileWriter.m_pDrawingConverter->SaveThemeXml(m_oFileWriter.m_pArray, m_oBufferedStream.GetPos(), length, bstrThemePath);
m_oFileWriter.m_pDrawingConverter->SaveThemeXml(nCurPos, length, bstrThemePath);
SysFreeString(bstrThemePath);
res = c_oSerConstants::ReadUnknown;
m_oBufferedStream.Seek(nCurPos + length);
}
else
res = c_oSerConstants::ReadUnknown;
......@@ -5298,12 +5299,14 @@ public:
var.intVal = m_oFileWriter.m_oChartWriter.getChartCount();
m_oFileWriter.m_pDrawingConverter->SetAdditionalParam(_T("DocumentChartsCount"), var);
long nCurPos = m_oBufferedStream.GetPos();
BSTR bstrDrawingProperty = sDrawingProperty.AllocSysString();
BSTR bstrDrawingXml = NULL;
m_oFileWriter.m_pDrawingConverter->SaveObjectEx(m_oFileWriter.m_pArray, oCDrawingProperty.DataPos, oCDrawingProperty.DataLength, bstrDrawingProperty, XMLWRITER_DOC_TYPE_DOCX, &bstrDrawingXml);
m_oFileWriter.m_pDrawingConverter->SaveObjectEx(oCDrawingProperty.DataPos, oCDrawingProperty.DataLength, bstrDrawingProperty, XMLWRITER_DOC_TYPE_DOCX, &bstrDrawingXml);
SysFreeString(bstrDrawingProperty);
CString sDrawingXml(bstrDrawingXml);
m_oBufferedStream.Seek(nCurPos);
CString sDrawingXml(bstrDrawingXml);
VARIANT vt;
m_oFileWriter.m_pDrawingConverter->GetAdditionalParam(_T("DocumentChartsCount"), &vt);
if(VT_I4 == vt.vt)
......@@ -5581,7 +5584,7 @@ public:
if(-1 != nIndex)
sThemeDir = m_oFileWriter.m_sThemePath.Left(nIndex);
BinXlsxRW::SaveParams oSaveParams(sThemeDir);
BinXlsxRW::BinaryChartReader oBinaryChartReader(m_oBufferedStream, oSaveParams, m_oFileWriter.m_pArray, m_oFileWriter.m_pDrawingConverter);
BinXlsxRW::BinaryChartReader oBinaryChartReader(m_oBufferedStream, oSaveParams, m_oFileWriter.m_pDrawingConverter);
OOX::Spreadsheet::CChartSpace* pChartSpace = new OOX::Spreadsheet::CChartSpace();
oBinaryChartReader.ReadCT_ChartSpace(length, &pChartSpace->m_oChartSpace);
......
This diff is collapsed.
#include "DocxSerializer.h"
#ifdef _WIN32
#include <atlbase.h>
#include <atlstr.h>
#else
#include "../../Common/DocxFormat/Source/Base/ASCString.h"
#endif
#include "../../DesktopEditor/common/Directory.h"
#include "../../DesktopEditor/common/File.h"
#include "../BinWriter/BinWriters.h"
......@@ -25,29 +18,30 @@ BinDocxRW::CDocxSerializer::CDocxSerializer()
m_bIsNoBase64Save = false;
m_bSaveChartAsImg = false;
}
bool BinDocxRW::CDocxSerializer::saveToFile(std::wstring& sSrcFileName, std::wstring& sDstPath, std::wstring& sXMLOptions)
bool BinDocxRW::CDocxSerializer::saveToFile(CString& sSrcFileName, CString& sDstPath, CString& sXMLOptions)
{
//create mediadir
OOX::CPath path(std_string2string(sSrcFileName));
OOX::CPath path(sSrcFileName);
CString mediaDir = path.GetDirectory() + _T("media\\");
NSDirectory::CreateDirectory(string2std_string(mediaDir));
NSBinPptxRW::CBinaryFileWriter oBufferedStream;
NSBinPptxRW::CDrawingConverter oDrawingConverter;
NSBinPptxRW::CBinaryFileWriter& oBufferedStream = *oDrawingConverter.m_pBinaryWriter;
#ifdef _WIN32
DocWrapper::FontProcessor fp;
fp.setFontDir(std_string2string(m_sFontDir));
fp.setFontDir(m_sFontDir);
PPTXFile::IOfficeFontPicker* pFontPicker = NULL;
CoCreateInstance(__uuidof(PPTXFile::COfficeFontPicker), NULL, CLSCTX_ALL, __uuidof(PPTXFile::IOfficeFontPicker), (void**)(&pFontPicker));
BSTR bstrFontDir1 = std_string2string(m_sFontDir).AllocSysString();
BSTR bstrFontDir1 = m_sFontDir.AllocSysString();
pFontPicker->Init(bstrFontDir1);
SysFreeString(bstrFontDir1);
NSFontCutter::CEmbeddedFontsManager* pEmbeddedFontsManager = NULL;
if(false == std_string2string(m_sEmbeddedFontsDir).IsEmpty())
if(false == m_sEmbeddedFontsDir.IsEmpty())
{
NSDirectory::CreateDirectory(m_sEmbeddedFontsDir);
NSDirectory::CreateDirectory(string2std_string(m_sEmbeddedFontsDir));
BSTR bstrEmbeddedFontsDirectory = std_string2string(m_sEmbeddedFontsDir).AllocSysString();
BSTR bstrEmbeddedFontsDirectory = m_sEmbeddedFontsDir.AllocSysString();
pFontPicker->SetEmbeddedFontsDirectory(bstrEmbeddedFontsDirectory);
SysFreeString(bstrEmbeddedFontsDirectory);
......@@ -63,9 +57,8 @@ bool BinDocxRW::CDocxSerializer::saveToFile(std::wstring& sSrcFileName, std::wst
pEmbeddedFontsManager->CheckFont(_T("Arial"), fp.getFontManager());
//pEmbeddedFontsManager
}
NSBinPptxRW::CDrawingConverter oDrawingConverter;
BSTR bstrFontDir = std_string2string(m_sFontDir).AllocSysString();
BSTR bstrFontDir = m_sFontDir.AllocSysString();
oDrawingConverter.SetFontDir(bstrFontDir);
SysFreeString(bstrFontDir);
VARIANT vt;
......@@ -78,7 +71,7 @@ bool BinDocxRW::CDocxSerializer::saveToFile(std::wstring& sSrcFileName, std::wst
SysFreeString(bstrMediaDir);
ParamsWriter oParamsWriter(oBufferedStream, fp, &oDrawingConverter, pEmbeddedFontsManager);
m_oBinaryFileWriter = new BinaryFileWriter(oParamsWriter);
m_oBinaryFileWriter->intoBindoc(std_string2string(sDstPath));
m_oBinaryFileWriter->intoBindoc(sDstPath);
#endif
BYTE* pbBinBuffer = oBufferedStream.GetBuffer();
int nBinBufferLen = oBufferedStream.GetPosition();
......@@ -86,7 +79,7 @@ bool BinDocxRW::CDocxSerializer::saveToFile(std::wstring& sSrcFileName, std::wst
if (m_bIsNoBase64Save)
{
NSFile::CFileBinary oFile;
oFile.CreateFileW(sSrcFileName);
oFile.CreateFileW(string2std_string(sSrcFileName));
oFile.WriteFile(pbBinBuffer, nBinBufferLen);
oFile.CloseFile();
}
......@@ -97,7 +90,7 @@ bool BinDocxRW::CDocxSerializer::saveToFile(std::wstring& sSrcFileName, std::wst
if(TRUE == Base64::Base64Encode(pbBinBuffer, nBinBufferLen, (LPSTR)pbBase64Buffer, &nBase64BufferLen, Base64::B64_BASE64_FLAG_NOCRLF))
{
NSFile::CFileBinary oFile;
oFile.CreateFileW(sSrcFileName);
oFile.CreateFileW(string2std_string(sSrcFileName));
oFile.WriteStringUTF8(string2std_string(m_oBinaryFileWriter->WriteFileHeader(nBinBufferLen)));
oFile.WriteFile(pbBase64Buffer, nBase64BufferLen);
oFile.CloseFile();
......@@ -107,11 +100,11 @@ bool BinDocxRW::CDocxSerializer::saveToFile(std::wstring& sSrcFileName, std::wst
RELEASEINTERFACE(pFontPicker);
return true;
}
bool BinDocxRW::CDocxSerializer::loadFromFile(std::wstring& sSrcFileName, std::wstring& sDstPath, std::wstring& sXMLOptions, std::wstring& sThemePath, std::wstring& sMediaPath)
bool BinDocxRW::CDocxSerializer::loadFromFile(CString& sSrcFileName, CString& sDstPath, CString& sXMLOptions, CString& sThemePath, CString& sMediaPath)
{
bool bResultOk = false;
NSFile::CFileBinary oFile;
if(oFile.OpenFile(sSrcFileName))
if(oFile.OpenFile(string2std_string(sSrcFileName)))
{
DWORD nBase64DataSize = 0;
BYTE* pBase64Data = new BYTE[oFile.GetFileSize()];
......@@ -161,15 +154,12 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(std::wstring& sSrcFileName, std::w
dst_len.AppendChar(_c);
}
int nDataSize = atoi(dst_len);
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nDataSize;
LPSAFEARRAY pArray = SafeArrayCreate(VT_UI1, 1, rgsabound);
if(FALSE != Base64::Base64Decode((LPCSTR)(pBase64Data + nIndex), nBase64DataSize - nIndex, (BYTE*)pArray->pvData, &nDataSize))
BYTE* pData = new BYTE[nDataSize];
if(FALSE != Base64::Base64Decode((LPCSTR)(pBase64Data + nIndex), nBase64DataSize - nIndex, pData, &nDataSize))
{
NSBinPptxRW::CBinaryFileReader oBufferedStream;
oBufferedStream.Init((BYTE*)pArray->pvData, 0, nDataSize);
NSBinPptxRW::CDrawingConverter oDrawingConverter;
NSBinPptxRW::CBinaryFileReader& oBufferedStream = *oDrawingConverter.m_pReader;
oBufferedStream.Init(pData, 0, nDataSize);
int nVersion = g_nFormatVersion;
if(version.GetLength() > 0)
......@@ -181,17 +171,16 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(std::wstring& sSrcFileName, std::w
g_nCurFormatVersion = nVersion = nTempVersion;
}
}
NSBinPptxRW::CDrawingConverter oDrawingConverter;
oDrawingConverter.SetMainDocument(this);
BSTR bstrMediaPath = std_string2string(sMediaPath).AllocSysString();
BSTR bstrMediaPath = sMediaPath.AllocSysString();
oDrawingConverter.SetMediaDstPath(bstrMediaPath);
SysFreeString(bstrMediaPath);
m_pCurFileWriter = new Writers::FileWriter(std_string2string(sDstPath), std_string2string(m_sFontDir), nVersion, m_bSaveChartAsImg, &oDrawingConverter, pArray, std_string2string(sThemePath));
m_pCurFileWriter = new Writers::FileWriter(sDstPath, m_sFontDir, nVersion, m_bSaveChartAsImg, &oDrawingConverter, sThemePath);
//
TCHAR tFolder[256];
TCHAR tDrive[256];
_tsplitpath( sSrcFileName.c_str(), tDrive, tFolder, NULL, NULL );
_tsplitpath( sSrcFileName, tDrive, tFolder, NULL, NULL );
CString sFolder = CString(tFolder);
CString sDrive = CString(tDrive);
CString sFileInDir = sDrive + sFolder;
......@@ -230,19 +219,14 @@ bool BinDocxRW::CDocxSerializer::loadFromFile(std::wstring& sSrcFileName, std::w
bResultOk = true;
//}
}
RELEASEARRAY(pArray);
}
RELEASEARRAYOBJECTS(pBase64Data);
}
return bResultOk;
}
bool BinDocxRW::CDocxSerializer::getXmlContent(unsigned char* pBinaryObj, long lSize, long lStart, long lLength, std::wstring& sOutputXml)
bool BinDocxRW::CDocxSerializer::getXmlContent(NSBinPptxRW::CBinaryFileReader& oBufferedStream, long lLength, CString& sOutputXml)
{
NSBinPptxRW::CBinaryFileReader oBufferedStream;
oBufferedStream.Init(pBinaryObj, lStart, lSize);
long nLength = oBufferedStream.GetLong();
Writers::ContentWriter oTempContentWriter;
BinDocxRW::Binary_DocumentTableReader oBinary_DocumentTableReader(oBufferedStream, *m_pCurFileWriter, oTempContentWriter, NULL);
int res = oBinary_DocumentTableReader.Read1(nLength, &BinDocxRW::Binary_DocumentTableReader::ReadDocumentContent, &oBinary_DocumentTableReader, NULL);
......@@ -250,14 +234,14 @@ bool BinDocxRW::CDocxSerializer::getXmlContent(unsigned char* pBinaryObj, long l
sOutputXml = oTempContentWriter.m_oContent.GetData().GetString();
return true;
}
bool BinDocxRW::CDocxSerializer::getBinaryContent(std::wstring& bsTxContent, unsigned char** ppBinary, long &lDataSize)
bool BinDocxRW::CDocxSerializer::getBinaryContent(CString& bsTxContent, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize)
{
if(NULL == m_oBinaryFileWriter)
return false;
NSBinPptxRW::CBinaryFileWriter oBufferedStream;
long nStartPos = oBufferedStream.GetPosition();
XmlUtils::CXmlLiteReader oReader;
oReader.FromString(std_string2string(bsTxContent));
oReader.FromString(bsTxContent);
oReader.ReadNextNode();//v:textbox
CString sRootName = oReader.GetName();
if(_T("v:textbox") == sRootName)
......@@ -278,20 +262,15 @@ bool BinDocxRW::CDocxSerializer::getBinaryContent(std::wstring& bsTxContent, uns
oBinaryDocumentTableWriter.WriteDocumentContent(oSdtContent.m_arrItems);
oBinaryCommonWriter.WriteItemWithLengthEnd(nCurPos);
if (NULL != ppBinary)
{
lDataSize = oBufferedStream.GetPosition();
*ppBinary = new unsigned char[lDataSize];
BYTE* pDataS = oBufferedStream.GetBuffer();
memcpy(*ppBinary, pDataS, lDataSize);
}
long nEndPos = oBufferedStream.GetPosition();
lDataSize = nEndPos - nStartPos;
return true;
}
void BinDocxRW::CDocxSerializer::setFontDir(std::wstring& sFontDir)
void BinDocxRW::CDocxSerializer::setFontDir(CString& sFontDir)
{
m_sFontDir = sFontDir;
}
void BinDocxRW::CDocxSerializer::setEmbeddedFontsDir(std::wstring& sEmbeddedFontsDir)
void BinDocxRW::CDocxSerializer::setEmbeddedFontsDir(CString& sEmbeddedFontsDir)
{
m_sEmbeddedFontsDir = sEmbeddedFontsDir;
}
......
#ifndef DOCX_SERIALIZER
#define DOCX_SERIALIZER
#include <string>
#ifdef _WIN32
#include <atlbase.h>
#include <atlstr.h>
#else
#include "../../Common/DocxFormat/Source/Base/ASCString.h"
#endif
namespace Writers{
class FileWriter;
class FileWriter;
}
namespace NSBinPptxRW{
class CBinaryFileReader;
class CBinaryFileWriter;
}
namespace BinDocxRW {
class BinaryFileWriter;
class CDocxSerializer{
private:
std::wstring m_sFontDir;
std::wstring m_sEmbeddedFontsDir;
CString m_sFontDir;
CString m_sEmbeddedFontsDir;
bool m_bIsNoBase64Save;
bool m_bSaveChartAsImg;
BinaryFileWriter* m_oBinaryFileWriter;
Writers::FileWriter* m_pCurFileWriter;
public:
CDocxSerializer();
bool loadFromFile(std::wstring& sSrcFileName, std::wstring& sDstPath, std::wstring& sXMLOptions, std::wstring& sThemePath, std::wstring& sMediaPath);
bool saveToFile(std::wstring& sSrcFileName, std::wstring& sDstPath, std::wstring& sXMLOptions);
bool getXmlContent(unsigned char* pBinaryObj, long lSize, long lStart, long lLength, std::wstring& sOutputXml);
bool getBinaryContent(std::wstring& bsTxContent, unsigned char** ppBinary, long& lDataSize);
void setFontDir(std::wstring& sFontDir);
void setEmbeddedFontsDir(std::wstring& sEmbeddedFontsDir);
bool loadFromFile(CString& sSrcFileName, CString& sDstPath, CString& sXMLOptions, CString& sThemePath, CString& sMediaPath);
bool saveToFile(CString& sSrcFileName, CString& sDstPath, CString& sXMLOptions);
bool getXmlContent(NSBinPptxRW::CBinaryFileReader& oBufferedStream, long lLength, CString& sOutputXml);
bool getBinaryContent(CString& bsTxContent, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize);
void setFontDir(CString& sFontDir);
void setEmbeddedFontsDir(CString& sEmbeddedFontsDir);
void setIsNoBase64Save(bool bIsNoBase64Save);
void setSaveChartAsImg(bool bSaveChartAsImg);
};
......
......@@ -94,14 +94,13 @@ namespace BinXlsxRW{
RELEASEINTERFACE(pFontPicker);
return true;
}
bool CXlsxSerializer::loadChart(CString& sChartPath, unsigned char** ppBinary, long& lDataSize)
bool CXlsxSerializer::loadChart(CString& sChartPath, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize)
{
bool bRes = false;
*ppBinary = NULL;
OOX::Spreadsheet::CChartSpace oChart(sChartPath);
if(NULL != m_pExternalDrawingConverter)
{
NSBinPptxRW::CBinaryFileWriter oBufferedStream;
long nStartPos = oBufferedStream.GetPosition();
BinXlsxRW::BinaryCommonWriter oBcw(oBufferedStream);
BSTR bstrChartPath = sChartPath.AllocSysString();
......@@ -111,26 +110,18 @@ namespace BinXlsxRW{
BinXlsxRW::BinaryChartWriter oBinaryChartWriter(oBufferedStream, m_pExternalDrawingConverter);
oBinaryChartWriter.WriteCT_ChartSpace(oChart);
if (NULL != ppBinary)
{
lDataSize = oBufferedStream.GetPosition();
*ppBinary = new unsigned char[lDataSize];
BYTE* pDataS = oBufferedStream.GetBuffer();
memcpy(*ppBinary, pDataS, lDataSize);
bRes = true;
}
long nEndPos = oBufferedStream.GetPosition();
lDataSize = nEndPos - nStartPos;
bRes = true;
}
return bRes;
}
bool CXlsxSerializer::saveChart(SAFEARRAY* pBinaryObj, long lStart, long lLength, CString& sFilepath, CString& sContentTypePath, CString** sContentTypeElement)
bool CXlsxSerializer::saveChart(NSBinPptxRW::CBinaryFileReader& oBufferedStream, long lLength, CString& sFilepath, CString& sContentTypePath, CString** sContentTypeElement)
{
bool bRes = false;
*sContentTypeElement = NULL;
if(NULL != m_pExternalDrawingConverter)
{
NSBinPptxRW::CBinaryFileReader oBufferedStream;
oBufferedStream.Init((BYTE*)pBinaryObj->pvData, lStart, lLength);
m_pExternalDrawingConverter->SetDstContentRels();
// sThemePath bsFilename theme bsFilename
......@@ -144,7 +135,7 @@ namespace BinXlsxRW{
//todo theme path
BinXlsxRW::SaveParams oSaveParams(sThemePath);
OOX::Spreadsheet::CChartSpace oChartSpace;
BinXlsxRW::BinaryChartReader oBinaryChartReader(oBufferedStream, oSaveParams, pBinaryObj, m_pExternalDrawingConverter);
BinXlsxRW::BinaryChartReader oBinaryChartReader(oBufferedStream, oSaveParams, m_pExternalDrawingConverter);
oBinaryChartReader.ReadCT_ChartSpace(lLength, &oChartSpace.m_oChartSpace);
if(oChartSpace.isValid())
......
#ifndef XLSX_SERIALIZER
#define XLSX_SERIALIZER
//todo
#ifdef _WIN32
#include <atlbase.h>
#include <atlstr.h>
#include <string>
#else
#include "../../Common/DocxFormat/Source/Base/ASCString.h"
#endif
namespace NSBinPptxRW{
class CDrawingConverter;
}
namespace NSBinPptxRW{
class CBinaryFileReader;
class CBinaryFileWriter;
}
namespace BinXlsxRW {
class CXlsxSerializer{
......@@ -23,8 +27,8 @@ namespace BinXlsxRW {
~CXlsxSerializer();
bool loadFromFile(CString& sSrcFileName, CString& sDstPath, CString& sXMLOptions, CString& sMediaDir);
bool saveToFile(CString& sSrcFileName, CString& sDstPath, CString& sXMLOptions);
bool loadChart(CString& sChartPath, unsigned char** ppBinary, long& lDataSize);
bool saveChart(SAFEARRAY* pBinaryObj, long lStart, long lLength, CString& sFilename, CString& sContentTypePath, CString** sContentTypeElement);
bool loadChart(CString& sChartPath, NSBinPptxRW::CBinaryFileWriter& oBufferedStream, long& lDataSize);
bool saveChart(NSBinPptxRW::CBinaryFileReader& oBufferedStream, long lLength, CString& sFilename, CString& sContentTypePath, CString** sContentTypeElement);
void setFontDir(CString& sFontDir);
void setEmbeddedFontsDir(CString& sEmbeddedFontsDir);
void setDrawingConverter(NSBinPptxRW::CDrawingConverter* pDrawingConverter);
......
......@@ -58,7 +58,7 @@ public:
public:
STDMETHOD(OpenFile)(BSTR bsInputDir, BSTR bsFileDst)
{
bool bRes = m_oCDocxSerializer.saveToFile(BstrToStdString(bsFileDst), BstrToStdString(bsInputDir), std::wstring(_T("")));
bool bRes = m_oCDocxSerializer.saveToFile(CString(bsFileDst), CString(bsInputDir), CString(_T("")));
return bRes ? S_OK : S_FALSE;
}
STDMETHOD(GetJfdoc)(BSTR bsInputDir, BSTR* bsJfdoc)
......@@ -71,7 +71,7 @@ public:
}
STDMETHOD(SetFontDir)(BSTR bsFontDir)
{
m_oCDocxSerializer.setFontDir(BstrToStdString(bsFontDir));
m_oCDocxSerializer.setFontDir(CString(bsFontDir));
return S_OK;
}
......@@ -86,12 +86,12 @@ public:
CString sParamName; sParamName = ParamName;
if (_T("EmbeddedFontsDirectory") == sParamName && ParamValue.vt == VT_BSTR)
{
m_oCDocxSerializer.setEmbeddedFontsDir(BstrToStdString(ParamValue.bstrVal));
m_oCDocxSerializer.setEmbeddedFontsDir(CString(ParamValue.bstrVal));
return S_OK;
}
else if (_T("FontDir") == sParamName && ParamValue.vt == VT_BSTR)
{
m_oCDocxSerializer.setFontDir(BstrToStdString(ParamValue.bstrVal));
m_oCDocxSerializer.setFontDir(CString(ParamValue.bstrVal));
}
else if (_T("SaveChartAsImg") == sParamName && ParamValue.vt == VT_BOOL)
{
......@@ -111,7 +111,8 @@ public:
{
unsigned char* pData = NULL;
long lDataSize = 0;
bool bRes = m_oCDocxSerializer.getBinaryContent(BstrToStdString(bsTxContent), &pData, lDataSize);
bool bRes = true;
//m_oCDocxSerializer.getBinaryContent(CString(bsTxContent), &pData, lDataSize);
if(NULL != pData && lDataSize > 0)
{
SAFEARRAYBOUND rgsabound[1];
......@@ -134,14 +135,15 @@ public:
CString sThemePath;
CString sMediaPath;
CreateDocument(sDirectoryOut, sThemePath, sMediaPath);
bool bRes = m_oCDocxSerializer.loadFromFile(BstrToStdString(bstrFileIn), BstrToStdString(bstrDirectoryOut), std::wstring(_T("")), std::wstring(sThemePath.GetString()), std::wstring(sMediaPath.GetString()));
bool bRes = m_oCDocxSerializer.loadFromFile(CString(bstrFileIn), CString(bstrDirectoryOut), CString(_T("")), CString(sThemePath.GetString()), CString(sMediaPath.GetString()));
return bRes ? S_OK : S_FALSE;
}
STDMETHOD(GetXmlContent)(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, BSTR* bsXml)
{
std::wstring sRes;
bool bRes = m_oCDocxSerializer.getXmlContent((BYTE*)pBinaryObj->pvData, pBinaryObj->rgsabound[0].cElements, lStart, lLength, sRes);
(*bsXml) = CString(sRes.c_str()).AllocSysString();
CString sRes;
bool bRes = true;
//m_oCDocxSerializer.getXmlContent((BYTE*)pBinaryObj->pvData, pBinaryObj->rgsabound[0].cElements, lStart, lLength, sRes);
(*bsXml) = sRes.AllocSysString();
return bRes ? S_OK : S_FALSE;
}
private:
......@@ -201,8 +203,4 @@ private:
UnlockResource(hGlobal);
FreeResource(hGlobal);
}
std::wstring BstrToStdString(BSTR sVal)
{
return std::wstring(sVal, SysStringLen(sVal));
}
};
\ No newline at end of file
......@@ -92,7 +92,8 @@ public:
{
unsigned char* pData = NULL;
long lDataSize = 0;
bool bRes = m_oXlsxSerializer.loadChart(CString(bsFilename), &pData, lDataSize);
bool bRes = true;
//m_oXlsxSerializer.loadChart(CString(bsFilename), &pData, lDataSize);
if(NULL != pData && lDataSize > 0)
{
SAFEARRAYBOUND rgsabound[1];
......@@ -112,7 +113,8 @@ public:
STDMETHOD(SaveChart)(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, BSTR bsFilename, BSTR bsContentTypePath, BSTR* bsContentTypeElement)
{
CString* sContentTypeElement = NULL;
bool bRes = m_oXlsxSerializer.saveChart(pBinaryObj, lStart, lLength, CString(bsFilename), CString(bsContentTypePath), &sContentTypeElement);
bool bRes = true;
//m_oXlsxSerializer.saveChart(pBinaryObj, lStart, lLength, CString(bsFilename), CString(bsContentTypePath), &sContentTypeElement);
if(NULL != sContentTypeElement)
*bsContentTypeElement = sContentTypeElement->AllocSysString();
return bRes ? S_OK : S_FALSE;
......
......@@ -890,7 +890,7 @@ HRESULT CDrawingConverter::AddShapeType(BSTR bsXml)
return S_OK;
}
HRESULT CDrawingConverter::AddObject(BSTR bsXml, BSTR* pMainProps, SAFEARRAY** ppBinary)
HRESULT CDrawingConverter::AddObject(BSTR bsXml, BSTR* pMainProps)
{
CString strXml = _T("<main ");
......@@ -926,22 +926,18 @@ HRESULT CDrawingConverter::AddObject(BSTR bsXml, BSTR* pMainProps, SAFEARRAY** p
m_pBinaryWriter->m_pCommon->CheckFontPicker();
++m_lCurrentObjectTop;
bool bResult = ParceObject(strXml, pMainProps, ppBinary);
bool bResult = ParceObject(strXml, pMainProps);
--m_lCurrentObjectTop;
if (0 == m_lCurrentObjectTop)
{
m_pBinaryWriter->ClearNoAttack();
}
//if (0 == m_lCurrentObjectTop)
//{
// m_pBinaryWriter->ClearNoAttack();
//}
return bResult ? S_OK : S_FALSE;
}
HRESULT CDrawingConverter::AddObject2(BSTR bsXml, SAFEARRAY* pBinaryObj, BSTR* pXmlOutput)
{
return S_OK;
}
bool CDrawingConverter::ParceObject(ATL::CString& strXml, BSTR* pMainProps, SAFEARRAY** ppBinary)
bool CDrawingConverter::ParceObject(ATL::CString& strXml, BSTR* pMainProps)
{
XmlUtils::CXmlNode oMainNode;
if (!oMainNode.FromXmlString(strXml))
......@@ -951,7 +947,7 @@ bool CDrawingConverter::ParceObject(ATL::CString& strXml, BSTR* pMainProps, SAFE
if (!oMainNode.GetNodes(_T("*"), oNodes))
return NULL;
ULONG lCurrentPosition = m_pBinaryWriter->GetPosition();
//ULONG lCurrentPosition = m_pBinaryWriter->GetPosition();
m_pBinaryWriter->StartRecord(0);
m_pBinaryWriter->ClearShapeCurSizes();
......@@ -1310,19 +1306,6 @@ rIns=\"91440\" bIns=\"45720\" numCol=\"1\" spcCol=\"0\" rtlCol=\"0\" fromWordArt
}
m_pBinaryWriter->EndRecord();
if (NULL != ppBinary)
{
ULONG lBinarySize = m_pBinaryWriter->GetPosition() - lCurrentPosition;
SAFEARRAY* pArray = SafeArrayCreateVector(VT_UI1, lBinarySize);
BYTE* pDataD = (BYTE*)pArray->pvData;
BYTE* pDataS = m_pBinaryWriter->GetBuffer();
memcpy(pDataD, pDataS + lCurrentPosition, lBinarySize);
*ppBinary = pArray;
}
return true;
}
......@@ -3041,11 +3024,8 @@ void CDrawingConverter::CheckPenShape(PPTX::Logic::SpTreeElem& oElem, XmlUtils::
}
}
HRESULT CDrawingConverter::GetThemeBinary(BSTR bsThemeFilePath, SAFEARRAY** ppBinary)
HRESULT CDrawingConverter::GetThemeBinary(BSTR bsThemeFilePath)
{
if (ppBinary == NULL)
return S_FALSE;
CString strOldRels = m_strCurrentRelsPath;
m_strCurrentRelsPath = bsThemeFilePath;
......@@ -3056,20 +3036,11 @@ HRESULT CDrawingConverter::GetThemeBinary(BSTR bsThemeFilePath, SAFEARRAY** ppBi
smart_ptr<PPTX::Theme> pTheme = new PPTX::Theme(oPath, oFileMap);
//m_pBinaryWriter->ClearNoAttack();
ULONG lOldPos = m_pBinaryWriter->GetPosition();
//ULONG lOldPos = m_pBinaryWriter->GetPosition();
m_pBinaryWriter->m_pCommon->CheckFontPicker();
pTheme->toPPTY(m_pBinaryWriter);
ULONG lBinarySize = m_pBinaryWriter->GetPosition() - lOldPos;
SAFEARRAY* pArray = SafeArrayCreateVector(VT_UI1, lBinarySize);
BYTE* pDataD = (BYTE*)pArray->pvData;
BYTE* pDataS = m_pBinaryWriter->GetBuffer() + lOldPos;
memcpy(pDataD, pDataS, lBinarySize);
*ppBinary = pArray;
m_pBinaryWriter->SetPosition(lOldPos);
//m_pBinaryWriter->SetPosition(lOldPos);
*m_pBinaryWriter->ThemeDoc = pTheme.smart_dynamic_cast<PPTX::FileContainer>();
//m_pBinaryWriter->ThemeDoc.reset();
......@@ -3097,15 +3068,12 @@ HRESULT CDrawingConverter::LoadClrMap(BSTR bsXml)
return S_OK;
}
HRESULT CDrawingConverter::SaveThemeXml(SAFEARRAY* pBinaryTheme, LONG lStart, LONG lLength, BSTR bsThemePath)
HRESULT CDrawingConverter::SaveThemeXml(LONG lStart, LONG lLength, BSTR bsThemePath)
{
if (NULL == pBinaryTheme || NULL == bsThemePath)
if (NULL == bsThemePath)
return S_FALSE;
BYTE* pData = (BYTE*)pBinaryTheme->pvData;
m_pReader->Init(pData, lStart, lLength);
m_pReader->Seek(lStart);
// reset rels
SetDstContentRels();
......@@ -3139,9 +3107,9 @@ HRESULT CDrawingConverter::SaveThemeXml(SAFEARRAY* pBinaryTheme, LONG lStart, LO
return S_OK;
}
HRESULT CDrawingConverter::SaveObject(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, BSTR bsMainProps, BSTR* bsXml)
HRESULT CDrawingConverter::SaveObject(LONG lStart, LONG lLength, BSTR bsMainProps, BSTR* bsXml)
{
if (NULL == pBinaryObj || bsXml == NULL)
if (bsXml == NULL)
return S_OK;
bool bIsInline = false;
......@@ -3169,17 +3137,7 @@ HRESULT CDrawingConverter::SaveObject(SAFEARRAY* pBinaryObj, LONG lStart, LONG l
strMainProps += _T("<wp:cNvGraphicFramePr/>");
if (0 == m_nCurrentIndexObject)
{
BYTE* pData = (BYTE*)pBinaryObj->pvData;
m_pReader->Init(pData, lStart, lLength);
m_pReader->m_pSourceArray = pBinaryObj;
}
else
{
m_pReader->Seek(lStart);
}
m_pReader->Seek(lStart);
++m_nCurrentIndexObject;
......@@ -3278,29 +3236,19 @@ HRESULT CDrawingConverter::SaveObject(SAFEARRAY* pBinaryObj, LONG lStart, LONG l
return S_OK;
}
HRESULT CDrawingConverter::SaveObjectEx(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, BSTR bsMainProps, LONG lDocType, BSTR* bsXml)
HRESULT CDrawingConverter::SaveObjectEx(LONG lStart, LONG lLength, BSTR bsMainProps, LONG lDocType, BSTR* bsXml)
{
if (XMLWRITER_DOC_TYPE_DOCX == lDocType)
{
m_pImageManager->m_bIsWord = TRUE;
// inline/anchor + word2007 format
return SaveObject(pBinaryObj, lStart, lLength, bsMainProps, bsXml);
return SaveObject(lStart, lLength, bsMainProps, bsXml);
}
if (NULL == pBinaryObj || bsXml == NULL)
if (bsXml == NULL)
return S_OK;
if (0 == m_nCurrentIndexObject)
{
BYTE* pData = (BYTE*)pBinaryObj->pvData;
m_pReader->Init(pData, lStart, lLength);
m_pReader->m_pSourceArray = pBinaryObj;
}
else
{
m_pReader->Seek(lStart);
}
m_pReader->Seek(lStart);
if (lDocType != XMLWRITER_DOC_TYPE_DOCX)
m_pImageManager->m_bIsWord = FALSE;
......@@ -3597,7 +3545,7 @@ void CDrawingConverter::ConvertMainPropsToVML(BSTR bsMainProps, NSBinPptxRW::CXm
pWriter.m_strStyleMain = oWriter.GetXmlString();
}
HRESULT CDrawingConverter::GetTxBodyBinary(BSTR bsXml, SAFEARRAY** ppBinary)
HRESULT CDrawingConverter::GetTxBodyBinary(BSTR bsXml)
{
XmlUtils::CXmlNode oNode;
if (!oNode.FromXmlString((CString)bsXml))
......@@ -3606,41 +3554,28 @@ HRESULT CDrawingConverter::GetTxBodyBinary(BSTR bsXml, SAFEARRAY** ppBinary)
PPTX::Logic::TxBody oTxBody(oNode);
//m_pBinaryWriter->ClearNoAttack();
ULONG lOldPos = m_pBinaryWriter->GetPosition();
//ULONG lOldPos = m_pBinaryWriter->GetPosition();
m_pBinaryWriter->m_pCommon->CheckFontPicker();
//m_pBinaryWriter->m_pCommon->m_pNativePicker->Init(m_strFontDirectory);
m_pBinaryWriter->WriteRecord1(0, oTxBody);
if (NULL != ppBinary)
{
ULONG lBinarySize = m_pBinaryWriter->GetPosition() - lOldPos;
SAFEARRAY* pArray = SafeArrayCreateVector(VT_UI1, lBinarySize);
BYTE* pDataD = (BYTE*)pArray->pvData;
BYTE* pDataS = m_pBinaryWriter->GetBuffer() + lOldPos;
memcpy(pDataD, pDataS, lBinarySize);
*ppBinary = pArray;
}
m_pBinaryWriter->SetPosition(lOldPos);
//m_pBinaryWriter->SetPosition(lOldPos);
//m_pBinaryWriter->ClearNoAttack();
return S_OK;
}
HRESULT CDrawingConverter::GetTxBodyXml(SAFEARRAY* pBinary, LONG lStart, LONG lLength, BSTR* pbstrXml)
HRESULT CDrawingConverter::GetTxBodyXml(LONG lStart, LONG lLength, BSTR* pbstrXml)
{
NSBinPptxRW::CBinaryFileReader oReader;
oReader.Init((BYTE*)pBinary->pvData, lStart, lLength);
m_pReader->Seek(lStart);
BYTE type = oReader.GetUChar();
BYTE type = m_pReader->GetUChar();
if (0 != type || NULL == pbstrXml)
return S_FALSE;
PPTX::Logic::TxBody oTxBody;
oTxBody.fromPPTY(&oReader);
oTxBody.fromPPTY(m_pReader);
NSBinPptxRW::CXmlWriter oWriter;
oTxBody.toXmlWriterExcel(&oWriter);
......@@ -3657,9 +3592,9 @@ HRESULT CDrawingConverter::SetFontDir(BSTR bsFontDir)
return S_OK;
}
HRESULT CDrawingConverter::GetRecordBinary(LONG lRecordType, BSTR bsXml, SAFEARRAY** ppBinary)
HRESULT CDrawingConverter::GetRecordBinary(LONG lRecordType, BSTR bsXml)
{
if (NULL == bsXml || ppBinary == NULL)
if (NULL == bsXml)
return S_FALSE;
CString strXml = _T("<main ");
......@@ -3735,29 +3670,21 @@ xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"");
//m_pBinaryWriter->ClearNoAttack();
m_pBinaryWriter->m_pCommon->CheckFontPicker();
ULONG lOldPos = m_pBinaryWriter->GetPosition();
//ULONG lOldPos = m_pBinaryWriter->GetPosition();
m_pBinaryWriter->WriteRecord1(0, *pWritingElem);
ULONG lBinarySize = m_pBinaryWriter->GetPosition() - lOldPos;
SAFEARRAY* pArray = SafeArrayCreateVector(VT_UI1, lBinarySize);
BYTE* pDataD = (BYTE*)pArray->pvData;
BYTE* pDataS = m_pBinaryWriter->GetBuffer() + lOldPos;
memcpy(pDataD, pDataS, lBinarySize);
*ppBinary = pArray;
RELEASEOBJECT(pWritingElem);
m_pBinaryWriter->SetPosition(lOldPos);
//m_pBinaryWriter->SetPosition(lOldPos);
return S_OK;
}
HRESULT CDrawingConverter::GetRecordXml(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, LONG lRecType, LONG lDocType, BSTR* bsXml)
HRESULT CDrawingConverter::GetRecordXml(LONG lStart, LONG lLength, LONG lRecType, LONG lDocType, BSTR* bsXml)
{
if (NULL == pBinaryObj || bsXml == NULL)
if (bsXml == NULL)
return S_FALSE;
if (lDocType != XMLWRITER_DOC_TYPE_DOCX)
......@@ -3765,9 +3692,7 @@ HRESULT CDrawingConverter::GetRecordXml(SAFEARRAY* pBinaryObj, LONG lStart, LONG
else
m_pReader->m_pRels->m_pManager->m_bIsWord = TRUE;
BYTE* pData = (BYTE*)pBinaryObj->pvData;
m_pReader->Init(pData, lStart, lLength);
m_pReader->m_pSourceArray = pBinaryObj;
m_pReader->Seek(lStart);
BYTE typeRec1 = m_pReader->GetUChar();
......
......@@ -174,30 +174,29 @@ namespace NSBinPptxRW
STDMETHOD(SetMediaDstPath)(BSTR bsMediaPath);
STDMETHOD(AddShapeType)(BSTR bsXml);
STDMETHOD(AddObject)(BSTR bsXml, BSTR* pMainProps, SAFEARRAY** ppBinary);
STDMETHOD(AddObject2)(BSTR bsXml, SAFEARRAY* pBinaryObj, BSTR* pXmlOutput);
STDMETHOD(GetThemeBinary)(BSTR bsThemeFilePath, SAFEARRAY** ppBinary);
STDMETHOD(AddObject)(BSTR bsXml, BSTR* pMainProps);
STDMETHOD(GetThemeBinary)(BSTR bsThemeFilePath);
STDMETHOD(SaveThemeXml)(SAFEARRAY* pBinaryTheme, LONG lStart, LONG lLength, BSTR bsThemePath);
STDMETHOD(SaveObject)(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, BSTR bsMainProps, BSTR* bsXml);
STDMETHOD(SaveObjectEx)(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, BSTR bsMainProps, LONG lDocType, BSTR* bsXml);
STDMETHOD(SaveThemeXml)(LONG lStart, LONG lLength, BSTR bsThemePath);
STDMETHOD(SaveObject)(LONG lStart, LONG lLength, BSTR bsMainProps, BSTR* bsXml);
STDMETHOD(SaveObjectEx)(LONG lStart, LONG lLength, BSTR bsMainProps, LONG lDocType, BSTR* bsXml);
STDMETHOD(GetRecordBinary)(LONG lRecordType, BSTR bsXml, SAFEARRAY** ppBinary);
STDMETHOD(GetRecordXml)(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, LONG lRecType, LONG lDocType, BSTR* bsXml);
STDMETHOD(GetRecordBinary)(LONG lRecordType, BSTR bsXml);
STDMETHOD(GetRecordXml)(LONG lStart, LONG lLength, LONG lRecType, LONG lDocType, BSTR* bsXml);
STDMETHOD(SetDstContentRels)();
STDMETHOD(SaveDstContentRels)(BSTR bsRelsPath);
STDMETHOD(WriteRels)(BSTR bsType, BSTR bsTarget, BSTR bsTargetMode, LONG* lId);
STDMETHOD(LoadClrMap)(BSTR bsXml);
STDMETHOD(GetTxBodyBinary)(BSTR bsXml, SAFEARRAY** ppBinary);
STDMETHOD(GetTxBodyXml)(SAFEARRAY* pBinary, LONG lStart, LONG lLength, BSTR *pbstrXml);
STDMETHOD(GetTxBodyBinary)(BSTR bsXml);
STDMETHOD(GetTxBodyXml)(LONG lStart, LONG lLength, BSTR *pbstrXml);
STDMETHOD(SetFontDir)(BSTR bsFontDir);
STDMETHOD(SetAdditionalParam)(BSTR ParamName, VARIANT ParamValue);
STDMETHOD(GetAdditionalParam)(BSTR ParamName, VARIANT* ParamValue);
protected:
bool ParceObject(CString& strXml, BSTR* pMainProps, SAFEARRAY** ppBinary);
bool ParceObject(CString& strXml, BSTR* pMainProps);
void SendMainProps(CString& strMainProps, BSTR*& pMainProps);
PPTX::Logic::SpTreeElem doc_LoadShape(XmlUtils::CXmlNode& oNode, BSTR*& pMainProps, bool bIsTop = true);
......
......@@ -152,38 +152,38 @@ public:
}
STDMETHOD(AddObject)(BSTR bsXml, BSTR* pMainProps, SAFEARRAY** ppBinary)
{
return m_oDrawingConverter.AddObject(bsXml, pMainProps, ppBinary);
return S_OK;//m_oDrawingConverter.AddObject(bsXml, pMainProps, ppBinary);
}
STDMETHOD(AddObject2)(BSTR bsXml, SAFEARRAY* pBinaryObj, BSTR* pXmlOutput)
{
return m_oDrawingConverter.AddObject2(bsXml, pBinaryObj, pXmlOutput);
return S_OK;
}
STDMETHOD(GetThemeBinary)(BSTR bsThemeFilePath, SAFEARRAY** ppBinary)
{
return m_oDrawingConverter.GetThemeBinary(bsThemeFilePath, ppBinary);
return S_OK;//m_oDrawingConverter.GetThemeBinary(bsThemeFilePath, ppBinary);
}
STDMETHOD(SaveThemeXml)(SAFEARRAY* pBinaryTheme, LONG lStart, LONG lLength, BSTR bsThemePath)
{
return m_oDrawingConverter.SaveThemeXml(pBinaryTheme, lStart, lLength, bsThemePath);
return S_OK;//m_oDrawingConverter.SaveThemeXml(pBinaryTheme, lStart, lLength, bsThemePath);
}
STDMETHOD(SaveObject)(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, BSTR bsMainProps, BSTR* bsXml)
{
return m_oDrawingConverter.SaveObject(pBinaryObj, lStart, lLength, bsMainProps, bsXml);
return S_OK;//m_oDrawingConverter.SaveObject(pBinaryObj, lStart, lLength, bsMainProps, bsXml);
}
STDMETHOD(SaveObjectEx)(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, BSTR bsMainProps, LONG lDocType, BSTR* bsXml)
{
return m_oDrawingConverter.SaveObjectEx(pBinaryObj, lStart, lLength, bsMainProps, lDocType, bsXml);
return S_OK;//m_oDrawingConverter.SaveObjectEx(pBinaryObj, lStart, lLength, bsMainProps, lDocType, bsXml);
}
STDMETHOD(GetRecordBinary)(LONG lRecordType, BSTR bsXml, SAFEARRAY** ppBinary)
{
return m_oDrawingConverter.GetRecordBinary(lRecordType, bsXml, ppBinary);
return S_OK;//m_oDrawingConverter.GetRecordBinary(lRecordType, bsXml, ppBinary);
}
STDMETHOD(GetRecordXml)(SAFEARRAY* pBinaryObj, LONG lStart, LONG lLength, LONG lRecType, LONG lDocType, BSTR* bsXml)
{
return m_oDrawingConverter.GetRecordXml(pBinaryObj, lStart, lLength, lRecType, lDocType, bsXml);
return S_OK;//m_oDrawingConverter.GetRecordXml(pBinaryObj, lStart, lLength, lRecType, lDocType, bsXml);
}
STDMETHOD(SetDstContentRels)()
......@@ -206,11 +206,11 @@ public:
STDMETHOD(GetTxBodyBinary)(BSTR bsXml, SAFEARRAY** ppBinary)
{
return m_oDrawingConverter.GetTxBodyBinary(bsXml, ppBinary);
return S_OK;//m_oDrawingConverter.GetTxBodyBinary(bsXml, ppBinary);
}
STDMETHOD(GetTxBodyXml)(SAFEARRAY* pBinary, LONG lStart, LONG lLength, BSTR *pbstrXml)
{
return m_oDrawingConverter.GetTxBodyXml(pBinary, lStart, lLength, pbstrXml);
return S_OK;//m_oDrawingConverter.GetTxBodyXml(pBinary, lStart, lLength, pbstrXml);
}
STDMETHOD(SetFontDir)(BSTR bsFontDir)
{
......
......@@ -1068,7 +1068,6 @@ namespace NSBinPptxRW
CBinaryFileReader::CBinaryFileReader()
{
m_pMainDocument = NULL;
m_pSourceArray = NULL;
m_lNextId = 0;
......
......@@ -411,7 +411,6 @@ namespace NSBinPptxRW
CString m_strContentTypes;
BinDocxRW::CDocxSerializer* m_pMainDocument;
SAFEARRAY* m_pSourceArray;
LONG m_lDocumentType;
......
......@@ -64,32 +64,13 @@ namespace PPTX
{
if (TextBoxShape.is_init())
{
LPSAFEARRAY psaData = NULL;
unsigned char* pData = NULL;
long lDataSize = 0;
pWriter->m_pMainDocument->getBinaryContent(std::wstring(TextBoxShape->GetString()), &pData, lDataSize);
if(NULL != pData && lDataSize > 0)
{
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = lDataSize;
psaData = SafeArrayCreate(VT_UI1, 1, rgsabound);
BYTE* pDataD = (BYTE*)psaData->pvData;
BYTE* pDataS = pData;
memcpy(pDataD, pDataS, lDataSize);
ULONG lPos = pWriter->GetPosition();
pWriter->SetPosition(lPos);
pWriter->StartRecord(4);
pWriter->WriteBYTEArray((BYTE*)psaData->pvData, psaData->rgsabound[0].cElements);
pWriter->EndRecord();
SafeArrayDestroy(psaData);
}
RELEASEARRAYOBJECTS(pData);
ULONG lPos = pWriter->GetPosition();
pWriter->SetPosition(lPos);
pWriter->StartRecord(4);
pWriter->m_pMainDocument->getBinaryContent(TextBoxShape.get(), *pWriter, lDataSize);
pWriter->EndRecord();
if (TextBoxBodyPr.is_init())
{
pWriter->StartRecord(5);
......@@ -101,27 +82,12 @@ namespace PPTX
{
CString strContent = txBody->GetDocxTxBoxContent(pWriter, style);
LPSAFEARRAY psaData = NULL;
unsigned char* pData = NULL;
long lDataSize = 0;
pWriter->m_pMainDocument->getBinaryContent(std::wstring(strContent.GetString()), &pData, lDataSize);
if(NULL != pData && lDataSize > 0)
{
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = lDataSize;
psaData = SafeArrayCreate(VT_UI1, 1, rgsabound);
BYTE* pDataD = (BYTE*)psaData->pvData;
BYTE* pDataS = pData;
memcpy(pDataD, pDataS, lDataSize);
pWriter->StartRecord(4);
pWriter->WriteBYTEArray((BYTE*)psaData->pvData, psaData->rgsabound[0].cElements);
pWriter->EndRecord();
SafeArrayDestroy(psaData);
}
RELEASEARRAYOBJECTS(pData);
ULONG lPos = pWriter->GetPosition();
pWriter->SetPosition(lPos);
pWriter->StartRecord(4);
pWriter->m_pMainDocument->getBinaryContent(strContent, *pWriter, lDataSize);
pWriter->EndRecord();
pWriter->WriteRecord1(5, txBody->bodyPr);
}
......@@ -274,7 +240,7 @@ namespace PPTX
}
case 4:
{
if (NULL != pReader->m_pMainDocument && NULL != pReader->m_pSourceArray)
if (NULL != pReader->m_pMainDocument)
{
LONG lLenRec = pReader->GetLong();
......@@ -282,11 +248,11 @@ namespace PPTX
LONG lSize_Reader = pReader->GetSize();
BYTE* pData_Reader = pReader->GetData();
std::wstring sXmlContent;
pReader->m_pMainDocument->getXmlContent((BYTE*)pReader->m_pSourceArray->pvData, pReader->m_pSourceArray->rgsabound[0].cElements, pReader->GetPos(), lLenRec, sXmlContent);
CString sXmlContent;
pReader->m_pMainDocument->getXmlContent(*pReader, lLenRec, sXmlContent);
CString strC = _T("<w:txbxContent>");
strC += ((CString)(sXmlContent.c_str()));
strC += sXmlContent;
strC += _T("</w:txbxContent>");
TextBoxShape = strC;
......
......@@ -98,8 +98,6 @@ namespace PPTX
void ChartRec::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
LPSAFEARRAY pArray = NULL;
FileContainer* pRels = NULL;
if (pWriter->m_pCommonRels->is_init())
pRels = pWriter->m_pCommonRels->operator ->();
......@@ -147,39 +145,19 @@ namespace PPTX
oXlsxSerializer.setDrawingConverter(&oDrawingConverter);
unsigned char* pData = NULL;
long lDataSize = 0;
oXlsxSerializer.loadChart(strDataPath, &pData, lDataSize);
if(NULL != pData && lDataSize > 0)
{
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = lDataSize;
pArray = SafeArrayCreate(VT_UI1, 1, rgsabound);
BYTE* pDataD = (BYTE*)pArray->pvData;
BYTE* pDataS = pData;
memcpy(pDataD, pDataS, lDataSize);
}
RELEASEARRAYOBJECTS(pData);
var.parray = NULL;
oDrawingConverter.GetAdditionalParam(L"SerializeImageManager", &var);
if (NULL != pArray)
if (var.parray != NULL)
{
var.parray = NULL;
oDrawingConverter.GetAdditionalParam(L"SerializeImageManager", &var);
if (var.parray != NULL)
{
NSBinPptxRW::CBinaryFileReader oReader;
oReader.Deserialize(pWriter->m_pCommon->m_pImageManager, var.parray);
RELEASEARRAY((var.parray));
}
NSBinPptxRW::CBinaryFileReader oReader;
oReader.Deserialize(pWriter->m_pCommon->m_pImageManager, var.parray);
pWriter->WriteBYTEArray((BYTE*)pArray->pvData, pArray->rgsabound[0].cElements);
RELEASEARRAY((var.parray));
}
RELEASEARRAY(pArray);
long lDataSize = 0;
oXlsxSerializer.loadChart(strDataPath, *pWriter, lDataSize);
}
void ChartRec::toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
......@@ -240,11 +218,11 @@ xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"
CString* sContentTypes = NULL;
if (pReader->m_lDocumentType == XMLWRITER_DOC_TYPE_DOCX)
oXlsxSerializer.saveChart(m_pData, 0, lLen, strChart, CString(L"/word/charts/"), &sContentTypes);
oXlsxSerializer.saveChart(*pReader, lLen, strChart, CString(L"/word/charts/"), &sContentTypes);
else if (pReader->m_lDocumentType == XMLWRITER_DOC_TYPE_XLSX)
oXlsxSerializer.saveChart(m_pData, 0, lLen, strChart, CString(L"/xl/charts/"), &sContentTypes);
oXlsxSerializer.saveChart(*pReader, lLen, strChart, CString(L"/xl/charts/"), &sContentTypes);
else
oXlsxSerializer.saveChart(m_pData, 0, lLen, strChart, CString(L"/ppt/charts/"), &sContentTypes);
oXlsxSerializer.saveChart(*pReader, lLen, strChart, CString(L"/ppt/charts/"), &sContentTypes);
pReader->m_strContentTypes += (*sContentTypes);
RELEASEOBJECT(sContentTypes);
......
This diff is collapsed.
......@@ -19,11 +19,12 @@ namespace BinXlsxRW {
class BinaryChartReader : public Binary_CommonReader<BinaryChartReader>
{
LPSAFEARRAY m_pArray;
NSBinPptxRW::CDrawingConverter* m_pOfficeDrawingConverter;
SaveParams& m_oSaveParams;
public:
BinaryChartReader(NSBinPptxRW::CBinaryFileReader& oBufferedStream, SaveParams& oSaveParams, LPSAFEARRAY pArray, NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter);
BinaryChartReader(NSBinPptxRW::CBinaryFileReader& oBufferedStream, SaveParams& oSaveParams, NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter);
private: CString* GetRecordXml(long length, int nRecordType);
private: CString* GetTxBodyXml(long length);
private: int ReadCT_extLst(BYTE type, long length, void* poResult);
public: int ReadCT_ChartSpace(long length, CT_ChartSpace* poResult);
private: int ReadCT_ChartSpace(BYTE type, long length, void* poResult);
......@@ -173,6 +174,8 @@ namespace BinXlsxRW {
NSBinPptxRW::CDrawingConverter* m_pOfficeDrawingConverter;
public:
BinaryChartWriter(NSBinPptxRW::CBinaryFileWriter &oCBufferedStream, NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter);
private: void GetRecordBinary(int nType, CString& sXml, int nRecordType);
private: void GetTxBodyBinary(int nType, CString& sXml);
public: void WriteCT_extLst(CT_extLst& oVal);
public: void WriteCT_ChartSpace(OOX::Spreadsheet::CChartSpace& ChartSpace);
public: void WriteCT_Boolean(CT_Boolean& oVal);
......
......@@ -1745,19 +1745,17 @@ namespace BinXlsxRW {
CString& m_sDestinationDir;
CString m_sMediaDir;
SaveParams& m_oSaveParams;
LPSAFEARRAY m_pArray;
NSBinPptxRW::CDrawingConverter* m_pOfficeDrawingConverter;
public:
BinaryWorksheetsTableReader(NSBinPptxRW::CBinaryFileReader& oBufferedStream, OOX::Spreadsheet::CWorkbook& oWorkbook,
OOX::Spreadsheet::CSharedStrings* pSharedStrings, std::map<CString, OOX::Spreadsheet::CWorksheet*>& mapWorksheets,
std::map<long, ImageObject*>& mapMedia, CString& sDestinationDir, SaveParams& oSaveParams, LPSAFEARRAY pArray,
std::map<long, ImageObject*>& mapMedia, CString& sDestinationDir, SaveParams& oSaveParams,
NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter) : Binary_CommonReader(oBufferedStream), m_oWorkbook(oWorkbook),
m_oBcr2(oBufferedStream), m_mapWorksheets(mapWorksheets), m_mapMedia(mapMedia), m_sDestinationDir(sDestinationDir), m_sMediaDir(m_sDestinationDir + _T("\\xl\\media")), m_oSaveParams(oSaveParams), m_pSharedStrings(pSharedStrings)
{
m_pCurSheet = NULL;
m_pCurWorksheet = NULL;
m_pCurDrawing = NULL;
m_pArray = pArray;
m_pOfficeDrawingConverter = pOfficeDrawingConverter;
}
int Read()
......@@ -2394,9 +2392,10 @@ namespace BinXlsxRW {
m_pOfficeDrawingConverter->SetAdditionalParam(_T("DocumentChartsCount"), var);
}
long nCurPos = m_oBufferedStream.GetPos();
BSTR bstrXml = NULL;
HRESULT hRes = m_pOfficeDrawingConverter->SaveObjectEx(m_pArray, m_oBufferedStream.GetPos(), length, NULL, XMLWRITER_DOC_TYPE_XLSX, &bstrXml);
HRESULT hRes = m_pOfficeDrawingConverter->SaveObjectEx(nCurPos, length, NULL, XMLWRITER_DOC_TYPE_XLSX, &bstrXml);
m_oBufferedStream.Seek(nCurPos + length);
if(NULL != m_pCurDrawing)
{
VARIANT vt;
......@@ -2404,14 +2403,12 @@ namespace BinXlsxRW {
if(VT_I4 == vt.vt)
m_pCurDrawing->SetGlobalNumberByType(OOX::Spreadsheet::FileTypes::Charts.OverrideType(), vt.intVal);
}
if(S_OK == hRes && NULL != bstrXml)
{
pCellAnchor->m_oXml.Init();
pCellAnchor->m_oXml->AppendFormat(_T("%s<xdr:clientData/>"), bstrXml);
SysFreeString(bstrXml);
}
m_oBufferedStream.Skip(length);
}
else
res = c_oSerConstants::ReadUnknown;
......@@ -2432,7 +2429,7 @@ namespace BinXlsxRW {
m_pOfficeDrawingConverter->SetDstContentRels();
OOX::Spreadsheet::CChartSpace* pChartSpace = new OOX::Spreadsheet::CChartSpace();
BinaryChartReader oBinaryChartReader(m_oBufferedStream, m_oSaveParams, m_pArray, m_pOfficeDrawingConverter);
BinaryChartReader oBinaryChartReader(m_oBufferedStream, m_oSaveParams, m_pOfficeDrawingConverter);
oBinaryChartReader.ReadCT_ChartSpace(length, &pChartSpace->m_oChartSpace);
NSCommon::smart_ptr<OOX::File> pChartFile(pChartSpace);
pChartFile->m_bDoNotAddRels = true;
......@@ -2831,10 +2828,9 @@ namespace BinXlsxRW {
CString m_sCurSrc;
long m_nCurIndex;
SaveParams& m_oSaveParams;
LPSAFEARRAY m_pArray;
NSBinPptxRW::CDrawingConverter* m_pOfficeDrawingConverter;
public:
BinaryOtherTableReader(NSBinPptxRW::CBinaryFileReader& oBufferedStream, std::map<long, ImageObject*>& mapMedia, CString& sFileInDir, std::vector<CString>& aDeleteFiles, SaveParams& oSaveParams, LPSAFEARRAY pArray, NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter):Binary_CommonReader(oBufferedStream), m_mapMedia(mapMedia),m_aDeleteFiles(aDeleteFiles),m_sFileInDir(sFileInDir),m_oSaveParams(oSaveParams),m_pArray(pArray),m_pOfficeDrawingConverter(pOfficeDrawingConverter)
BinaryOtherTableReader(NSBinPptxRW::CBinaryFileReader& oBufferedStream, std::map<long, ImageObject*>& mapMedia, CString& sFileInDir, std::vector<CString>& aDeleteFiles, SaveParams& oSaveParams, NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter):Binary_CommonReader(oBufferedStream), m_mapMedia(mapMedia),m_aDeleteFiles(aDeleteFiles),m_sFileInDir(sFileInDir),m_oSaveParams(oSaveParams),m_pOfficeDrawingConverter(pOfficeDrawingConverter)
{
m_nCurId = 0;
m_sCurSrc = _T("");
......@@ -2852,10 +2848,11 @@ namespace BinXlsxRW {
else if(c_oSer_OtherType::Theme == type)
{
CString sThemePath;sThemePath.Format(_T("%s\\%s"), m_oSaveParams.sThemePath, OOX::FileTypes::Theme.DefaultFileName());
long nCurPos = m_oBufferedStream.GetPos();
BSTR bstrTempTheme = sThemePath.AllocSysString();
m_pOfficeDrawingConverter->SaveThemeXml(m_pArray, m_oBufferedStream.GetPos(), length, bstrTempTheme);
m_pOfficeDrawingConverter->SaveThemeXml(nCurPos, length, bstrTempTheme);
SysFreeString(bstrTempTheme);
res = c_oSerConstants::ReadUnknown;
m_oBufferedStream.Seek(nCurPos + length);
}
else
res = c_oSerConstants::ReadUnknown;
......@@ -2998,15 +2995,11 @@ namespace BinXlsxRW {
dst_len.AppendChar(_c);
}
int nDataSize = atoi(dst_len);
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nDataSize;
LPSAFEARRAY pArray = SafeArrayCreate(VT_UI1, 1, rgsabound);
if(FALSE != Base64::Base64Decode((LPCSTR)(pBase64Data + nIndex), nBase64DataSize - nIndex, (BYTE*)pArray->pvData, &nDataSize))
BYTE* pData = new BYTE[nDataSize];
if(FALSE != Base64::Base64Decode((LPCSTR)(pBase64Data + nIndex), nBase64DataSize - nIndex, pData, &nDataSize))
{
NSBinPptxRW::CBinaryFileReader oBufferedStream;
oBufferedStream.Init((BYTE*)pArray->pvData, 0, nDataSize);
NSBinPptxRW::CBinaryFileReader& oBufferedStream = *pOfficeDrawingConverter->m_pReader;
oBufferedStream.Init(pData, 0, nDataSize);
int nVersion = g_nFormatVersion;
if(version.GetLength() > 0)
......@@ -3031,7 +3024,7 @@ namespace BinXlsxRW {
OOX::Spreadsheet::CXlsx oXlsx;
std::vector<CString> aDeleteFiles;
SaveParams oSaveParams(sDstPath + _T("\\") + OOX::Spreadsheet::FileTypes::Workbook.DefaultDirectory().GetPath() + _T("\\") + OOX::FileTypes::Theme.DefaultDirectory().GetPath());
ReadMainTable(oXlsx, oBufferedStream, OOX::CPath(sSrcFileName).GetDirectory(), sDstPath, aDeleteFiles, oSaveParams, pArray, pOfficeDrawingConverter);
ReadMainTable(oXlsx, oBufferedStream, OOX::CPath(sSrcFileName).GetDirectory(), sDstPath, aDeleteFiles, oSaveParams, pOfficeDrawingConverter);
CString sAdditionalContentTypes = oSaveParams.sAdditionalContentTypes;
if(NULL != pOfficeDrawingConverter)
{
......@@ -3058,13 +3051,12 @@ namespace BinXlsxRW {
DeleteFile(aDeleteFiles[i]);
bResultOk = true;
}
RELEASEARRAY(pArray);
}
oMappingFile.Close();
}
return S_OK;
}
int ReadMainTable(OOX::Spreadsheet::CXlsx& oXlsx, NSBinPptxRW::CBinaryFileReader& oBufferedStream, CString& sFileInDir, CString& sOutDir, std::vector<CString>& aDeleteFiles, SaveParams& oSaveParams, LPSAFEARRAY pArray, NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter)
int ReadMainTable(OOX::Spreadsheet::CXlsx& oXlsx, NSBinPptxRW::CBinaryFileReader& oBufferedStream, CString& sFileInDir, CString& sOutDir, std::vector<CString>& aDeleteFiles, SaveParams& oSaveParams, NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter)
{
long res = c_oSerConstants::ReadOk;
//mtLen
......@@ -3099,7 +3091,7 @@ namespace BinXlsxRW {
if(-1 != nOtherOffBits)
{
oBufferedStream.Seek(nOtherOffBits);
res = BinaryOtherTableReader(oBufferedStream, mapMedia, sFileInDir, aDeleteFiles, oSaveParams, pArray, pOfficeDrawingConverter).Read();
res = BinaryOtherTableReader(oBufferedStream, mapMedia, sFileInDir, aDeleteFiles, oSaveParams, pOfficeDrawingConverter).Read();
if(c_oSerConstants::ReadOk != res)
return res;
}
......@@ -3135,7 +3127,7 @@ namespace BinXlsxRW {
break;
case c_oSerTableTypes::Worksheets:
{
res = BinaryWorksheetsTableReader(oBufferedStream, *pWorkbook, pSharedStrings, oXlsx.GetWorksheets(), mapMedia, sOutDir, oSaveParams, pArray, pOfficeDrawingConverter).Read();
res = BinaryWorksheetsTableReader(oBufferedStream, *pWorkbook, pSharedStrings, oXlsx.GetWorksheets(), mapMedia, sOutDir, oSaveParams, pOfficeDrawingConverter).Read();
}
break;
}
......
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