mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-14 02:37:46 +08:00
2126 lines
76 KiB
C++
2126 lines
76 KiB
C++
#pragma once
|
||
#include "OfficeFileEvents.h"
|
||
#include "..\Common\OfficeFileTemplate.h"
|
||
#include "StringUtils.h"
|
||
#include "MediaFormatDefine.h"
|
||
#include "StorageConverters.h"
|
||
#include "../Common/RSA/XMLDecoder.h"
|
||
#include "OfficeRendererTemplate.h"
|
||
#include "GdiPlusEx.h"
|
||
|
||
//#define AVS_REMOVE_REG
|
||
#ifdef AVS_REMOVE_REG
|
||
#include "Registration.h"
|
||
#endif
|
||
|
||
#define ONE_INCH 2.54
|
||
#define TO_FLOAT 10000
|
||
|
||
#define CONVERTER_IDLE 0
|
||
#define CONVERTER_LOAD_PROG 1
|
||
#define CONVERTER_LOAD_COMP 2
|
||
#define CONVERTER_SAVE_PROG 3
|
||
#define CONVERTER_SAVE_COMP 4
|
||
|
||
// IAVSOfficeFile
|
||
[
|
||
object,
|
||
uuid("4b1363f0-d80d-11de-8a39-0800200c9a66"),
|
||
dual, helpstring("IAVSOfficeFileTemplate Interface"),
|
||
pointer_default(unique)
|
||
]
|
||
__interface IAVSOfficeFileConverter : public IAVSOfficeFileTemplate
|
||
{
|
||
[id(10), propget] HRESULT FileType( [out, retval] LONG* pnType );
|
||
[id(10), propput] HRESULT FileType( [in] LONG nType );
|
||
|
||
[id(20), propget] HRESULT DrawingXml( [out, retval] BSTR* pbstrXml );
|
||
|
||
[id(60), propget] HRESULT CommandRenderer( [out, retval] IUnknown** ppunkRend );
|
||
[id(60), propput] HRESULT CommandRenderer( [in] IUnknown* punkRend );
|
||
|
||
[id(70), propget] HRESULT Watermark( [out, retval] BSTR* pbstrVal );
|
||
[id(70), propput] HRESULT Watermark( [in] BSTR bstrVal );
|
||
|
||
[id(80)] HRESULT DrawWatermark( [in] IUnknown* punkImage,[in] LONG nWidth,[in] LONG nHeight );
|
||
|
||
[id(90), propget] HRESULT TempDirectory( [out, retval] BSTR* pbstrDir );
|
||
[id(90), propput] HRESULT TempDirectory( [in] BSTR bstrDir );
|
||
|
||
[id(100), propget] HRESULT IsLoadComplete( [out, retval] VARIANT_BOOL* pvIsLoadComplete );
|
||
[id(110), propget] HRESULT Status([out, retval] LONG* pVal);
|
||
|
||
[id(120)] HRESULT SetAdditionalParam([in] BSTR ParamName, [in] VARIANT ParamValue);
|
||
[id(130)] HRESULT GetAdditionalParam([in] BSTR ParamName, [out, retval] VARIANT* ParamValue);
|
||
};
|
||
|
||
// _IAVSOfficeFileConverterEvents
|
||
[
|
||
dispinterface,
|
||
uuid("ae195a70-f231-11de-8a39-0800200c9a66"),
|
||
helpstring("_IAVSOfficeFileConverterEvents Interface")
|
||
]
|
||
|
||
__interface _IAVSOfficeFileConverterEvents
|
||
{
|
||
[id(1), helpstring("method OnProgress")] HRESULT OnProgress([in] LONG nID, [in] LONG nPercent);
|
||
[id(2), helpstring("method OnProgressEx")] HRESULT OnProgressEx( [in] LONG nID, [in] LONG nPercent, [in, out, ref] SHORT* Cancel );
|
||
[id(10), helpstring("method OnCompletePage")] HRESULT OnCompletePage();
|
||
};
|
||
|
||
[
|
||
coclass,
|
||
default(IAVSOfficeFileConverter, _IAVSOfficeFileConverterEvents),
|
||
threading(apartment),
|
||
event_source(com),
|
||
vi_progid("AVSOfficeFile.AVSDocume"),
|
||
progid("AVSOfficeFile.AVSDocu.1"),
|
||
version(1.0),
|
||
uuid("6dec3f60-d80c-11de-8a39-0800200c9a66"),
|
||
helpstring("AVSOfficeFile Class")
|
||
]
|
||
class ATL_NO_VTABLE CAVSOfficeFileConverter : public IAVSOfficeFileConverter
|
||
{
|
||
|
||
private: long m_nRendererError; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
private: HANDLE m_hViewerStop; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
|
||
|
||
private: int m_nFileType;
|
||
private: int m_nOpenFileType;
|
||
private: CString m_sDrawingXML;
|
||
private: CString m_sMetadata;
|
||
private: AVSGraphics::IAVSDocumentPainter* m_piOfficeViewer;
|
||
private: AVSGraphics::IAVSDocumentRenderer* m_piCommandsRenderer;
|
||
private: CString m_sWatermark;
|
||
|
||
private: bool m_bIsInternalTemDir;
|
||
private: CString m_sTempDirectory;
|
||
private: CString m_sRootTempDirectory; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
private: CRITICAL_SECTION m_csThread;
|
||
private: StorageConverters m_oStorageConverters;
|
||
private: CCommandRendererEvents< AVSGraphics::_IAVSDocumentRendererEvents, CAVSOfficeFileConverter >* m_oCommandRendererEvent;
|
||
private: LPSTREAM m_pStream;
|
||
private: long m_nStatus; //CONVERTER_IDLE - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; CONVERTER_WORK - <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
#ifdef AVS_REMOVE_REG
|
||
private: CRegistratorServer* m_poRegServer;
|
||
#endif
|
||
private: double m_dMaxProgress; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
private: double m_dMinProgress; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
private: bool m_bCanceled; //<2F><><EFBFBD><EFBFBD> SHORT* Cancel <20> OnProgressDocumentEx <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> c_shProgressCancel
|
||
private: long m_nLastProgress;
|
||
private: long m_nLastProgressEx;
|
||
private: IUnknown* m_piDecoderKey;
|
||
private: int m_nMaxPageLoad;
|
||
private: int m_nSaveMode;//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
|
||
private: IUnknownPtr m_piSaveRenderer;//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
|
||
private: bool m_bSaveRendererStopped;//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
|
||
private: CGdiPlusInit m_oGdiPlusInit;
|
||
public:
|
||
CAVSOfficeFileConverter():m_piCommandsRenderer(NULL),m_oCommandRendererEvent(NULL),m_piDecoderKey(NULL)
|
||
{
|
||
m_sWatermark = "";
|
||
m_piOfficeViewer = NULL;
|
||
m_piSaveRenderer = NULL;
|
||
CoCreateInstance( __uuidof(AVSGraphics::CAVSDocumentRenderer), NULL ,CLSCTX_INPROC_SERVER, __uuidof(AVSGraphics::IAVSDocumentRenderer), (void **)(&m_piCommandsRenderer) );
|
||
|
||
m_hViewerStop = CreateEvent( NULL, FALSE, FALSE, NULL);
|
||
#ifdef AVS_REMOVE_REG
|
||
m_poRegServer = new CRegistratorServer();
|
||
#endif
|
||
Clear();
|
||
m_nFileType = AVS_OFFICESTUDIO_FILE_UNKNOWN;
|
||
m_oCommandRendererEvent = new CCommandRendererEvents< AVSGraphics::_IAVSDocumentRendererEvents, CAVSOfficeFileConverter >(this);
|
||
m_oCommandRendererEvent->AddRef();
|
||
}
|
||
__event __interface _IAVSOfficeFileConverterEvents;
|
||
|
||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||
|
||
HRESULT FinalConstruct()
|
||
{
|
||
InitializeCriticalSection(&m_csThread);
|
||
return S_OK;
|
||
}
|
||
|
||
void FinalRelease()
|
||
{
|
||
RELEASEINTERFACE( m_oCommandRendererEvent );
|
||
RELEASEINTERFACE( m_piCommandsRenderer );
|
||
RELEASEHANDLE( m_hViewerStop );
|
||
Clear();
|
||
DeleteCriticalSection(&m_csThread);
|
||
#ifdef AVS_REMOVE_REG
|
||
RELEASEOBJECT( m_poRegServer );
|
||
#endif
|
||
}
|
||
public:
|
||
void OnProgressDocumentEx( LONG nID, LONG nPercent, SHORT* Cancel )
|
||
{
|
||
long nCurProgress = GetProgress( nPercent );
|
||
if( nCurProgress > m_nLastProgressEx )
|
||
{
|
||
m_nLastProgressEx = nCurProgress;
|
||
OnProgressEx( nID, nCurProgress, Cancel );
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
if( -1 != m_nMaxPageLoad )
|
||
{
|
||
long nPageCount = 0;
|
||
if( NULL != m_piCommandsRenderer )
|
||
m_piCommandsRenderer->get_PageCount( &nPageCount );
|
||
if( nPageCount >= m_nMaxPageLoad )
|
||
(*Cancel) = c_shProgressCancel;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
if( c_shProgressContinue != (*Cancel) )
|
||
m_bCanceled = true;
|
||
}
|
||
void OnProgressDocument( LONG nID, LONG nPercent)
|
||
{
|
||
long nCurProgress = GetProgress( nPercent );
|
||
if( nCurProgress > m_nLastProgress )
|
||
{
|
||
m_nLastProgress = nCurProgress;
|
||
OnProgress( nID, nCurProgress );
|
||
}
|
||
}
|
||
void OnCompletePageDocument()
|
||
{
|
||
OnCompletePage();
|
||
}
|
||
void OnErrorViewer(LONG lError)
|
||
{
|
||
m_nRendererError = lError;
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
SetEvent( m_hViewerStop );
|
||
}
|
||
void OnStopViewer()
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
SetEvent( m_hViewerStop );
|
||
}
|
||
|
||
void OnProgressViewer(LONG lProgressPage)
|
||
{
|
||
OnProgress( 0, GetProgress( lProgressPage * 10000 ) );
|
||
}
|
||
void OnNewPageViewer(double dWidthMm, double dHeightMm)
|
||
{
|
||
if( -1 != m_nMaxPageLoad )
|
||
{
|
||
long nPageCount = 0;
|
||
if( NULL != m_piCommandsRenderer )
|
||
m_piCommandsRenderer->get_PageCount( &nPageCount );
|
||
//if( nPageCount >= m_nMaxPageLoad && NULL != m_piOfficeViewer )
|
||
//m_piOfficeViewer->Stop();
|
||
}
|
||
}
|
||
void OnCompletePageViewer()
|
||
{
|
||
}
|
||
void OnProgressParse( LONG lType, LONG lProgress )
|
||
{
|
||
}
|
||
public:
|
||
STDMETHOD(LoadFromFile)( BSTR bstrSrcFileName, BSTR bstrDstPath, BSTR bstrXMLOptions)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> gdiplus
|
||
if (!m_oGdiPlusInit.IsValid())
|
||
{
|
||
if (!m_oGdiPlusInit.Init())
|
||
return AVS_ERROR_UNEXPECTED;
|
||
}
|
||
m_bCanceled = false;
|
||
m_nLastProgress = -1;
|
||
m_nLastProgressEx = -1;
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
if( ::GetFileAttributes( bstrSrcFileName ) == INVALID_FILE_ATTRIBUTES )
|
||
return AVS_ERROR_FILEACCESS;
|
||
|
||
//CTemporaryCS oCS(&m_csThread);
|
||
CString sFilename(bstrSrcFileName);
|
||
CString sDstPath(bstrDstPath);
|
||
CString sOptions(bstrXMLOptions);
|
||
Clear();
|
||
m_nStatus = CONVERTER_LOAD_PROG;
|
||
int nOpenFileType = AVS_OFFICESTUDIO_FILE_UNKNOWN;
|
||
AVSOfficeFormatChecker avsOfficeFormatChecker;
|
||
|
||
bool bNoStandartOpen = false;
|
||
long nNoStandartType = AVS_OFFICESTUDIO_FILE_UNKNOWN;
|
||
CString sNoStandartPath;
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bstrXMLOptions <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FileType
|
||
//bool bFileTypeInOptions = false;
|
||
XmlUtils::CXmlReader oOptionsReader;
|
||
if( TRUE == oOptionsReader.OpenFromXmlString( bstrXMLOptions ) )
|
||
if( TRUE == oOptionsReader.ReadRootNode( _T("Options") ) )
|
||
{
|
||
CString sFileType = oOptionsReader.ReadNodeValue( _T("FileType") );
|
||
if( _T("") != sFileType )
|
||
{
|
||
nOpenFileType = Strings::ToInteger( sFileType );
|
||
//bFileTypeInOptions = true;
|
||
}
|
||
CString sMaxPageLoad = oOptionsReader.ReadNodeValue( _T("MaxPageLoad") );
|
||
if( _T("") != sMaxPageLoad )
|
||
m_nMaxPageLoad = Strings::ToInteger( sMaxPageLoad );
|
||
|
||
if( TRUE == oOptionsReader.ReadNode( _T("NoStandartOpen") ) )
|
||
{
|
||
bNoStandartOpen = true;
|
||
sNoStandartPath = oOptionsReader.ReadNodeAttribute( _T("destinationpath") );
|
||
nNoStandartType = Strings::ToInteger( oOptionsReader.ReadNodeAttribute( _T("destinationtype") ) );
|
||
}
|
||
}
|
||
if( AVS_OFFICESTUDIO_FILE_UNKNOWN == nOpenFileType )
|
||
nOpenFileType = avsOfficeFormatChecker.GetFileFormat( sFilename );
|
||
|
||
if( _T("") != sDstPath )
|
||
m_sTempDirectory = sDstPath;
|
||
else
|
||
{
|
||
m_sTempDirectory = Utils::CreateTempDir( m_sRootTempDirectory );
|
||
if( _T("") == m_sTempDirectory )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
return AVS_OFFICEFILE_ERROR_CREATE_TEMP;
|
||
}
|
||
m_bIsInternalTemDir = true;
|
||
}
|
||
CString sXMLOptions( bstrXMLOptions );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
IAVSOfficeFileTemplate* piConverter = NULL;
|
||
if( FALSE == m_oStorageConverters.GetConverter( nOpenFileType , &piConverter) )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
return AVS_ERROR_FILEFORMAT;
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >* oEventDocuments = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >(this);
|
||
oEventDocuments->AddRef();
|
||
oEventDocuments->Advise( piConverter );
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >* oEventDocuments2 = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >(this);
|
||
oEventDocuments2->AddRef();
|
||
oEventDocuments2->Advise( piConverter );
|
||
|
||
HRESULT hRes = S_OK;
|
||
bool bDisplay = true;//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> pdf <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD> Display, <20><><EFBFBD><EFBFBD> ExtractImages)
|
||
if( -1 != sXMLOptions.Find( _T("Display") ) )
|
||
bDisplay = true;
|
||
else
|
||
bDisplay = false;
|
||
m_dMinProgress = 0;
|
||
m_dMaxProgress = 1;
|
||
//<2F><><EFBFBD> pdf <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CommandRender
|
||
if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == nOpenFileType && true == bDisplay )
|
||
{
|
||
RELEASEINTERFACE( m_piCommandsRenderer );
|
||
CoCreateInstance( __uuidof(AVSGraphics::CAVSDocumentRenderer), NULL ,CLSCTX_INPROC_SERVER, __uuidof(AVSGraphics::IAVSDocumentRenderer), (void **)(&m_piCommandsRenderer) );
|
||
AVSOfficePDFFile::IPDFFile* piPdfFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(AVSOfficePDFFile::IPDFFile), (void**)&piPdfFile );
|
||
if( NULL != piPdfFile )
|
||
piPdfFile->put_CommandRenderer( m_piCommandsRenderer );
|
||
RELEASEINTERFACE(piPdfFile);
|
||
m_oCommandRendererEvent->Advise( m_piCommandsRenderer );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrTempFolder = m_sTempDirectory.AllocSysString();
|
||
BSTR bstrFilename = sFilename.AllocSysString();
|
||
hRes = piConverter->LoadFromFile( bstrFilename, bstrTempFolder ,bstrXMLOptions );
|
||
SysFreeString( bstrTempFolder );
|
||
SysFreeString( bstrFilename );
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> CommandsRenderer
|
||
m_oCommandRendererEvent->UnAdvise( m_piCommandsRenderer );
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU == nOpenFileType )
|
||
{
|
||
if( NULL != m_piCommandsRenderer )
|
||
RELEASEINTERFACE( m_piCommandsRenderer );
|
||
CoCreateInstance( __uuidof(AVSGraphics::CAVSDocumentRenderer), NULL ,CLSCTX_INPROC_SERVER, __uuidof(AVSGraphics::IAVSDocumentRenderer), (void **)(&m_piCommandsRenderer) );
|
||
OfficeDjVu::IDjVuFile* piDjVuFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(OfficeDjVu::IDjVuFile), (void**)&piDjVuFile );
|
||
if( NULL != piDjVuFile )
|
||
{
|
||
piDjVuFile->put_DocumentRenderer( m_piCommandsRenderer );
|
||
}
|
||
RELEASEINTERFACE(piDjVuFile);
|
||
m_oCommandRendererEvent->Advise( m_piCommandsRenderer );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrTempFolder = m_sTempDirectory.AllocSysString();
|
||
BSTR bstrFilename = sFilename.AllocSysString();
|
||
hRes = piConverter->LoadFromFile( bstrFilename, bstrTempFolder ,bstrXMLOptions );
|
||
SysFreeString( bstrTempFolder );
|
||
SysFreeString( bstrFilename );
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> CommandsRenderer
|
||
m_oCommandRendererEvent->UnAdvise( m_piCommandsRenderer );
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS == nOpenFileType )
|
||
{
|
||
if( NULL != m_piCommandsRenderer )
|
||
RELEASEINTERFACE( m_piCommandsRenderer );
|
||
CoCreateInstance( __uuidof(AVSGraphics::CAVSDocumentRenderer), NULL ,CLSCTX_INPROC_SERVER, __uuidof(AVSGraphics::IAVSDocumentRenderer), (void **)(&m_piCommandsRenderer) );
|
||
OfficeXPS::IXPSFile* piXpsFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(OfficeXPS::IXPSFile), (void**)&piXpsFile );
|
||
if( NULL != piXpsFile )
|
||
{
|
||
piXpsFile->put_DocumentRenderer( m_piCommandsRenderer );
|
||
}
|
||
RELEASEINTERFACE(piXpsFile);
|
||
m_oCommandRendererEvent->Advise( m_piCommandsRenderer );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrTempFolder = m_sTempDirectory.AllocSysString();
|
||
BSTR bstrFilename = sFilename.AllocSysString();
|
||
hRes = piConverter->LoadFromFile( bstrFilename, bstrTempFolder ,bstrXMLOptions );
|
||
SysFreeString( bstrTempFolder );
|
||
SysFreeString( bstrFilename );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> CommandsRenderer
|
||
m_oCommandRendererEvent->UnAdvise( m_piCommandsRenderer );
|
||
}
|
||
else if( 0 != (AVS_OFFICESTUDIO_FILE_SPREADSHEET & nOpenFileType) &&
|
||
( false == bNoStandartOpen || AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML == nNoStandartType) )
|
||
{
|
||
if( AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML == nNoStandartType )
|
||
{
|
||
m_dMinProgress = 0.000;
|
||
m_dMaxProgress = 0.500;
|
||
}
|
||
else
|
||
{
|
||
m_dMinProgress = 0.000;
|
||
m_dMaxProgress = 0.333;
|
||
}
|
||
SHORT shCancel = c_shProgressContinue;
|
||
OnProgressDocumentEx( 0 , 0, &shCancel );
|
||
if( c_shProgressContinue == shCancel )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> XLSX
|
||
CString sXlsxPath = Utils::CreateTempDir( m_sTempDirectory );
|
||
|
||
if( true == sXlsxPath.IsEmpty() )
|
||
hRes == AVS_OFFICEFILE_ERROR_CREATE_TEMP;
|
||
IAVSOfficeFileTemplate* piXlsxConverter = NULL;
|
||
if( SUCCEEDED( hRes ) )
|
||
{
|
||
if( AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS == nOpenFileType )
|
||
{
|
||
if( FALSE == m_oStorageConverters.GetConverter( AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS , &piXlsxConverter) )
|
||
hRes = AVS_ERROR_UNEXPECTED;
|
||
}
|
||
else
|
||
{
|
||
if( FALSE == m_oStorageConverters.GetConverter( AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX , &piXlsxConverter) )
|
||
hRes = AVS_ERROR_UNEXPECTED;
|
||
}
|
||
}
|
||
if( SUCCEEDED( hRes ) )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >* oSubEventDocuments = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >(this);
|
||
oSubEventDocuments->AddRef();
|
||
oSubEventDocuments->Advise( piXlsxConverter );
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >* oSubEventDocuments2 = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >(this);
|
||
oSubEventDocuments2->AddRef();
|
||
oSubEventDocuments2->Advise( piXlsxConverter );
|
||
|
||
BSTR bstrTempFolder = sXlsxPath.AllocSysString();
|
||
BSTR bstrFilename = sFilename.AllocSysString();
|
||
hRes = piConverter->LoadFromFile( bstrFilename, bstrTempFolder , L"" );
|
||
SysFreeString( bstrTempFolder );
|
||
SysFreeString( bstrFilename );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
oSubEventDocuments->UnAdvise( piXlsxConverter );
|
||
RELEASEINTERFACE(oSubEventDocuments);
|
||
oSubEventDocuments2->UnAdvise( piXlsxConverter );
|
||
RELEASEINTERFACE(oSubEventDocuments2);
|
||
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> xlsx -> html -> docx
|
||
RELEASEINTERFACE( piConverter );
|
||
if( false == m_bCanceled )
|
||
{
|
||
if( AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML == nNoStandartType )
|
||
{
|
||
m_dMinProgress = 0.500;
|
||
m_dMaxProgress = 1;
|
||
}
|
||
else
|
||
{
|
||
m_dMinProgress = 0.333;
|
||
m_dMaxProgress = 0.666;
|
||
}
|
||
OnProgressDocumentEx( 0 , 0, &shCancel );
|
||
if( c_shProgressContinue == shCancel && SUCCEEDED( hRes ) )
|
||
{
|
||
//XLSX -> HTML
|
||
CString sHtmlDir = _T("");
|
||
CString sHtmlFile = _T("");
|
||
if( false == bNoStandartOpen )
|
||
{
|
||
sHtmlDir = Utils::CreateTempDir( m_sTempDirectory );
|
||
if( true == sHtmlDir.IsEmpty() )
|
||
hRes == AVS_OFFICEFILE_ERROR_CREATE_TEMP;
|
||
sHtmlFile = sHtmlDir + _T("\\Temp.htm");
|
||
}
|
||
else
|
||
sHtmlFile = sNoStandartPath;
|
||
|
||
if( SUCCEEDED( hRes ) )
|
||
{
|
||
IAVSOfficeFileTemplate* piConverter = NULL;
|
||
if( FALSE == SUCCEEDED (CoCreateInstance( __uuidof( WSHtmlFile::CWSHtmlFile ) , NULL, CLSCTX_INPROC_SERVER, __uuidof(IAVSOfficeFileTemplate), (void **)(&piConverter) ) ) )
|
||
hRes = AVS_ERROR_FILEFORMAT;
|
||
if( SUCCEEDED( hRes ) )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >* oSubEventDocuments = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >(this);
|
||
oSubEventDocuments->AddRef();
|
||
oSubEventDocuments->Advise( piConverter );
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >* oSubEventDocuments2 = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >(this);
|
||
oSubEventDocuments2->AddRef();
|
||
oSubEventDocuments2->Advise( piConverter );
|
||
|
||
BSTR bstrTempFolder = sXlsxPath.AllocSysString();
|
||
BSTR bstrFilename = sHtmlFile.AllocSysString();
|
||
hRes = piConverter->SaveToFile( bstrFilename, bstrTempFolder , L"<Options><FileType>257</FileType><HTML><SingleFile val = \"true\"/></HTML></Options>" );
|
||
SysFreeString( bstrTempFolder );
|
||
SysFreeString( bstrFilename );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
oSubEventDocuments->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oSubEventDocuments);
|
||
oSubEventDocuments2->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oSubEventDocuments2);
|
||
}
|
||
RELEASEINTERFACE( piConverter );
|
||
}
|
||
if( false == bNoStandartOpen && false == m_bCanceled )
|
||
{
|
||
m_dMinProgress = 0.666;
|
||
m_dMaxProgress = 1;
|
||
OnProgressDocumentEx( 0 , 0, &shCancel );
|
||
|
||
//HTML -> DOCX
|
||
if( c_shProgressContinue == shCancel && SUCCEEDED( hRes ) )
|
||
{
|
||
IAVSOfficeFileTemplate* piConverter = NULL;
|
||
if( FALSE == m_oStorageConverters.GetConverter( AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML , &piConverter) )
|
||
hRes = AVS_ERROR_FILEFORMAT;
|
||
if( SUCCEEDED( hRes ) )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >* oSubEventDocuments = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >(this);
|
||
oSubEventDocuments->AddRef();
|
||
oSubEventDocuments->Advise( piConverter );
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >* oSubEventDocuments2 = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >(this);
|
||
oSubEventDocuments2->AddRef();
|
||
oSubEventDocuments2->Advise( piConverter );
|
||
|
||
BSTR bstrTempFolder = m_sTempDirectory.AllocSysString();
|
||
BSTR bstrFilename = sHtmlFile.AllocSysString();
|
||
hRes = piConverter->LoadFromFile( bstrFilename, bstrTempFolder , L"<Options><FileType>70</FileType></Options>" );
|
||
SysFreeString( bstrTempFolder );
|
||
SysFreeString( bstrFilename );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
oSubEventDocuments->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oSubEventDocuments);
|
||
oSubEventDocuments2->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oSubEventDocuments2);
|
||
}
|
||
RELEASEINTERFACE( piConverter );
|
||
}
|
||
|
||
}
|
||
m_dMinProgress = 1;
|
||
m_dMaxProgress = 1;
|
||
OnProgressDocumentEx( 0 , 0, &shCancel );
|
||
|
||
Utils::RemoveDirOrFile( sHtmlDir );
|
||
}
|
||
}
|
||
Utils::RemoveDirOrFile( sXlsxPath );
|
||
}
|
||
}
|
||
else
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrTempFolder = m_sTempDirectory.AllocSysString();
|
||
BSTR bstrFilename = sFilename.AllocSysString();
|
||
hRes = piConverter->LoadFromFile( bstrFilename, bstrTempFolder ,bstrXMLOptions );
|
||
SysFreeString( bstrTempFolder );
|
||
SysFreeString( bstrFilename );
|
||
|
||
if(SUCCEEDED(hRes))
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if(AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB == nOpenFileType)
|
||
{
|
||
OfficeEpub::IOfficeEpubFile* piEpubFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(OfficeEpub::IOfficeEpubFile), (void**)&piEpubFile );
|
||
if(NULL != piEpubFile)
|
||
{
|
||
VARIANT vtMetadata;
|
||
if(SUCCEEDED(piEpubFile->GetAdditionalParam(_T("Metadata"), &vtMetadata)) && VT_BSTR == vtMetadata.vt)
|
||
{
|
||
m_sMetadata = CString(vtMetadata.bstrVal);
|
||
SysFreeString(vtMetadata.bstrVal);
|
||
}
|
||
RELEASEINTERFACE(piEpubFile);
|
||
}
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2 == nOpenFileType)
|
||
{
|
||
OfficeFB2::IFB2File* piFb2File = NULL;
|
||
piConverter->QueryInterface( __uuidof(OfficeFB2::IFB2File), (void**)&piFb2File );
|
||
if(NULL != piFb2File)
|
||
{
|
||
VARIANT vtMetadata;
|
||
if(SUCCEEDED(piFb2File->GetAdditionalParam(_T("Metadata"), &vtMetadata)) && VT_BSTR == vtMetadata.vt)
|
||
{
|
||
m_sMetadata = CString(vtMetadata.bstrVal);
|
||
SysFreeString(vtMetadata.bstrVal);
|
||
}
|
||
RELEASEINTERFACE(piFb2File);
|
||
}
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI == nOpenFileType)
|
||
{
|
||
EBOOKWriter::IOfficeMobiFile* piMobiFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(EBOOKWriter::IOfficeMobiFile), (void**)&piMobiFile );
|
||
if(NULL != piMobiFile)
|
||
{
|
||
VARIANT vtMetadata;
|
||
if(SUCCEEDED(piMobiFile->GetAdditionalParam(_T("Metadata"), &vtMetadata)) && VT_BSTR == vtMetadata.vt)
|
||
{
|
||
m_sMetadata = CString(vtMetadata.bstrVal);
|
||
SysFreeString(vtMetadata.bstrVal);
|
||
}
|
||
RELEASEINTERFACE(piMobiFile);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
oEventDocuments->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oEventDocuments);
|
||
oEventDocuments2->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oEventDocuments2);
|
||
|
||
if( FAILED( hRes ) )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
RELEASEINTERFACE(piConverter);
|
||
return hRes;
|
||
}
|
||
//<2F><><EFBFBD> PPT <20> PPTX
|
||
if( AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT == nOpenFileType )
|
||
{
|
||
AVSOfficePPTFile::IAVSOfficePPTFile* piPptFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(AVSOfficePPTFile::IAVSOfficePPTFile), (void**)&piPptFile );
|
||
if( NULL != piPptFile )
|
||
{
|
||
BSTR bstrDrawingXml;
|
||
hRes = piPptFile->get_DrawingXml(&bstrDrawingXml);
|
||
if( FAILED( hRes ) )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
RELEASEINTERFACE(piConverter);
|
||
RELEASEINTERFACE(piPptFile);
|
||
return hRes;
|
||
}
|
||
m_sDrawingXML = CString (bstrDrawingXml);
|
||
VARIANT vDecoder;
|
||
BSTR bstrAdditionalParamName = g_csBlowfishKeyParamName.AllocSysString();
|
||
hRes = piPptFile->GetAdditionalParam( bstrAdditionalParamName, &vDecoder );
|
||
SysFreeString( bstrAdditionalParamName );
|
||
if( FAILED( hRes ) )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
RELEASEINTERFACE(piConverter);
|
||
RELEASEINTERFACE(piPptFile);
|
||
return hRes;
|
||
}
|
||
RELEASEINTERFACE( m_piDecoderKey );
|
||
vDecoder.punkVal->QueryInterface( __uuidof( IUnknown ), (void**)&m_piDecoderKey );
|
||
RELEASEINTERFACE( vDecoder.punkVal );
|
||
}
|
||
RELEASEINTERFACE(piPptFile);
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX == nOpenFileType )
|
||
{
|
||
AVSOfficePPTXFile::IAVSOfficePPTXFile* piPptxFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(AVSOfficePPTXFile::IAVSOfficePPTXFile), (void**)&piPptxFile );
|
||
if( NULL != piPptxFile )
|
||
{
|
||
BSTR bstrDrawingXml;
|
||
hRes = piPptxFile->get_DrawingXml(&bstrDrawingXml);
|
||
if( FAILED( hRes ) )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
RELEASEINTERFACE(piConverter);
|
||
RELEASEINTERFACE(piPptxFile);
|
||
return hRes;
|
||
}
|
||
m_sDrawingXML = CString (bstrDrawingXml);
|
||
VARIANT vDecoder;
|
||
BSTR bstrAdditionalParamName = g_csBlowfishKeyParamName.AllocSysString();
|
||
hRes = piPptxFile->GetAdditionalParam( bstrAdditionalParamName, &vDecoder );
|
||
if( FAILED( hRes ) )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
RELEASEINTERFACE(piConverter);
|
||
RELEASEINTERFACE(piPptxFile);
|
||
return hRes;
|
||
}
|
||
RELEASEINTERFACE( m_piDecoderKey );
|
||
vDecoder.punkVal->QueryInterface( __uuidof( IUnknown ), (void**)&m_piDecoderKey );
|
||
RELEASEINTERFACE( vDecoder.punkVal );
|
||
}
|
||
RELEASEINTERFACE(piPptxFile);
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP == nOpenFileType )
|
||
{
|
||
AVSOfficeOdpFile::IAVSOfficeODPFile* piOdpFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(AVSOfficeOdpFile::IAVSOfficeODPFile), (void**)&piOdpFile );
|
||
if( NULL != piOdpFile )
|
||
{
|
||
BSTR bstrDrawingXml;
|
||
hRes = piOdpFile->get_DrawingXml(&bstrDrawingXml);
|
||
if( FAILED( hRes ) )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
RELEASEINTERFACE(piConverter);
|
||
RELEASEINTERFACE(piOdpFile);
|
||
return hRes;
|
||
}
|
||
m_sDrawingXML = CString (bstrDrawingXml);
|
||
VARIANT vDecoder;
|
||
BSTR bstrAdditionalParamName = g_csBlowfishKeyParamName.AllocSysString();
|
||
hRes = piOdpFile->GetAdditionalParam( bstrAdditionalParamName, &vDecoder );
|
||
if( FAILED( hRes ) )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
RELEASEINTERFACE(piConverter);
|
||
RELEASEINTERFACE(piOdpFile);
|
||
return hRes;
|
||
}
|
||
RELEASEINTERFACE( m_piDecoderKey );
|
||
vDecoder.punkVal->QueryInterface( __uuidof( IUnknown ), (void**)&m_piDecoderKey );
|
||
RELEASEINTERFACE( vDecoder.punkVal );
|
||
}
|
||
RELEASEINTERFACE(piOdpFile);
|
||
}
|
||
RELEASEINTERFACE(piConverter);
|
||
if( FAILED( hRes ) )
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
return hRes;
|
||
}
|
||
|
||
m_nFileType = AVS_OFFICESTUDIO_FILE_UNKNOWN;
|
||
m_nOpenFileType = nOpenFileType;
|
||
m_nStatus = CONVERTER_LOAD_COMP;
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(SaveToFile)( BSTR bstrDstFileName, BSTR bstrSrcPath, BSTR bstrXMLOptions)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> gdiplus
|
||
if (!m_oGdiPlusInit.IsValid())
|
||
{
|
||
if (!m_oGdiPlusInit.Init())
|
||
return AVS_ERROR_UNEXPECTED;
|
||
}
|
||
m_bCanceled = false;
|
||
m_bSaveRendererStopped = false;
|
||
m_nLastProgress = -1;
|
||
m_nLastProgressEx = -1;
|
||
DWORD dwFileAttr = ::GetFileAttributes( bstrDstFileName );
|
||
//if( dwFileAttr != INVALID_FILE_ATTRIBUTES && 0 == (dwFileAttr & FILE_ATTRIBUTE_DIRECTORY ) )
|
||
//{
|
||
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// HANDLE hFile = CreateFile( bstrDstFileName, GENERIC_EXECUTE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||
// if( INVALID_HANDLE_VALUE == hFile )
|
||
// return AVS_ERROR_FILEACCESS;
|
||
// RELEASEHANDLE( hFile );
|
||
//}
|
||
//CTemporaryCS oCS(&m_csThread);
|
||
CString sOptions(bstrXMLOptions);
|
||
CString sSourceDirectory;
|
||
if( "" != CString(bstrSrcPath) )
|
||
sSourceDirectory = CString( bstrSrcPath );
|
||
else
|
||
sSourceDirectory = m_sTempDirectory;
|
||
m_nStatus = CONVERTER_SAVE_PROG;
|
||
int nDestFormat;
|
||
bool bLoadInCommandRenderer = false;
|
||
long nDocxRendererMode = -1;
|
||
long nEpubRendererMode = -1;
|
||
bool bNoStandartSave = false;
|
||
int nHtmlRendererMode = -1;
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bstrXMLOptions <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FileType
|
||
bool bFileTypeInOptions = false;
|
||
CString sWatermark = _T("");
|
||
XmlUtils::CXmlReader oOptionsReader;
|
||
if( TRUE == oOptionsReader.OpenFromXmlString( bstrXMLOptions ) )
|
||
if( TRUE == oOptionsReader.ReadRootNode( _T("Options") ) )
|
||
{
|
||
CString sXml = oOptionsReader.ReadNodeXml();
|
||
CString sFileType = oOptionsReader.ReadNodeValue( _T("FileType") );
|
||
if( _T("") != sFileType )
|
||
{
|
||
nDestFormat = Strings::ToInteger( sFileType );
|
||
bFileTypeInOptions = true;
|
||
}
|
||
CString sDocxRendererMode = oOptionsReader.ReadNodeValue( _T("DocxRendererMode") );
|
||
if( _T("") != sDocxRendererMode )
|
||
nDocxRendererMode = Strings::ToInteger( sDocxRendererMode );
|
||
|
||
CString sEpubRendererMode = oOptionsReader.ReadNodeValue( _T("EpubRendererMode") );
|
||
if( _T("") != sEpubRendererMode )
|
||
nEpubRendererMode = Strings::ToInteger( sEpubRendererMode );
|
||
|
||
CString sHtmlRendererMode = oOptionsReader.ReadNodeValue( _T("HtmlRendererMode") );
|
||
if( _T("") != sHtmlRendererMode )
|
||
nHtmlRendererMode = Strings::ToInteger( sHtmlRendererMode );
|
||
|
||
XML::IXMLDOMNodePtr pXmlNode = NULL;
|
||
oOptionsReader.GetNode( pXmlNode );
|
||
XmlUtils::CXmlReader oSubReader;
|
||
if( TRUE == oSubReader.OpenFromXmlNode( pXmlNode ) )
|
||
if( TRUE == oSubReader.ReadNode( _T("Watermarks") ) )
|
||
{
|
||
XML::IXMLDOMNodePtr pXmlNode = NULL;
|
||
oSubReader.GetNode(pXmlNode);
|
||
if(NULL != pXmlNode)
|
||
{
|
||
IXMLDOMNodeListPtr piChilds = pXmlNode->GetchildNodes();
|
||
long nLength = 0;
|
||
if(NULL != piChilds && SUCCEEDED(piChilds->get_length(&nLength)) && nLength > 0)
|
||
sWatermark = oSubReader.ReadNodeXml();
|
||
}
|
||
}
|
||
|
||
XmlUtils::CXmlReader oSubReader2;
|
||
if( TRUE == oSubReader2.OpenFromXmlNode( pXmlNode ) )
|
||
if( TRUE == oSubReader2.ReadNode( _T("HtmlOptions") ) )
|
||
if(_T("0") == oSubReader2.ReadNodeValue(_T("ToolbarEmbed")))
|
||
{
|
||
nDestFormat = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRMenu;
|
||
bFileTypeInOptions = true;
|
||
}
|
||
|
||
if( -1 != sXml.Find( _T("LoadInCommandRenderer") ) )
|
||
bLoadInCommandRenderer = true;
|
||
|
||
if( -1 != sXml.Find( _T("NoStandartSave") ) )
|
||
bNoStandartSave = true;
|
||
}
|
||
AVSOfficeFormatChecker avsOfficeFormatChecker;
|
||
if( false == bFileTypeInOptions )
|
||
{
|
||
if( AVS_OFFICESTUDIO_FILE_UNKNOWN == m_nFileType )
|
||
nDestFormat = avsOfficeFormatChecker.GetFileFormat( CString( bstrDstFileName ) );
|
||
else
|
||
nDestFormat = m_nFileType;
|
||
}
|
||
//<2F><><EFBFBD> Epub <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> DocxRenderer
|
||
if( AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB == nDestFormat )
|
||
{
|
||
if( -1 != nEpubRendererMode )
|
||
nDocxRendererMode = nEpubRendererMode;
|
||
else
|
||
nDocxRendererMode = TextFormatting::c_nWordProcessing;
|
||
}
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
CString sFileConverterOptions;
|
||
sFileConverterOptions.AppendFormat( _T("<Options><FileType>%d</FileType>"), nDestFormat);
|
||
XmlUtils::CXmlReader oXmlReader;
|
||
if( TRUE == oXmlReader.OpenFromXmlString( sOptions ) )
|
||
{
|
||
oXmlReader.ReadNodeList( _T("*") );
|
||
for( int i = 0; i < oXmlReader.GetLengthList(); i++ )
|
||
{
|
||
CString sNodeName = oXmlReader.ReadNodeName( i );
|
||
if( _T("WaterMarks") != sNodeName )
|
||
sFileConverterOptions.Append( oXmlReader.ReadNodeXml( i ) );
|
||
}
|
||
}
|
||
sFileConverterOptions.Append( _T("</Options>") );
|
||
|
||
if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM & nDestFormat || AVS_OFFICESTUDIO_FILE_IMAGE & nDestFormat ||
|
||
AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB == nDestFormat || AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2 == nDestFormat ||
|
||
AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI == nDestFormat || ( ( 0 != (AVS_OFFICESTUDIO_FILE_DOCUMENT & nDestFormat) ) && true == bLoadInCommandRenderer ) )
|
||
{
|
||
long nPageCount = 0;
|
||
m_piCommandsRenderer->get_PageCount( &nPageCount );
|
||
AVSGraphics::IAVSDocumentRendererPtr piCommandsRenderer = NULL;
|
||
bool bRenderDoc = false;
|
||
if( nPageCount > 0 )
|
||
m_piCommandsRenderer->QueryInterface( __uuidof(AVSGraphics::IAVSDocumentRenderer), (void**)&piCommandsRenderer);
|
||
else
|
||
{
|
||
bRenderDoc = true;
|
||
m_dMinProgress = 0;
|
||
m_dMaxProgress = 0.500;
|
||
|
||
CString sTemp = m_sTempDirectory;
|
||
m_sTempDirectory = sSourceDirectory;
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Xml <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrDrawingXML = NULL;
|
||
get_DrawingXml( &bstrDrawingXML );
|
||
if( NULL == bstrDrawingXML )
|
||
return AVS_OFFICEFILE_ERROR_SAVE_EMPTY;
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Painter
|
||
RELEASEINTERFACE( m_piOfficeViewer );
|
||
CoCreateInstance( __uuidof(AVSGraphics::CAVSDocumentPainter), NULL ,CLSCTX_INPROC_SERVER, __uuidof(AVSGraphics::IAVSDocumentPainter), (void **)(&m_piOfficeViewer) );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
VARIANT vDecoder;
|
||
vDecoder.vt = VT_UNKNOWN;
|
||
vDecoder.punkVal = m_piDecoderKey;
|
||
BSTR bstrAdditionalParamName = g_csBlowfishKeyParamName.AllocSysString();
|
||
m_piOfficeViewer->SetAdditionalParam( bstrAdditionalParamName, vDecoder);
|
||
SysFreeString(bstrAdditionalParamName);
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Xml viewer
|
||
m_piOfficeViewer->SetXml( bstrDrawingXML );
|
||
SysFreeString( bstrDrawingXML );
|
||
|
||
m_piCommandsRenderer->QueryInterface( __uuidof(AVSGraphics::IAVSDocumentRenderer), (void**)&piCommandsRenderer);
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_piOfficeViewer->AddRenderer( piCommandsRenderer );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
COfficeEventViewer< AVSGraphics::_IAVSDocumentPainterEvents, CAVSOfficeFileConverter >* poEventViewer = new COfficeEventViewer< AVSGraphics::_IAVSDocumentPainterEvents, CAVSOfficeFileConverter >(this);
|
||
poEventViewer->AddRef();
|
||
poEventViewer->Advise( m_piOfficeViewer );
|
||
//m_poEventViewer->Advise( m_piOfficeViewer );
|
||
m_piOfficeViewer->Start();
|
||
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
WaitForSingleObject( m_hViewerStop, INFINITE );
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
poEventViewer->UnAdvise( m_piOfficeViewer );
|
||
RELEASEINTERFACE(poEventViewer);
|
||
m_piOfficeViewer->RemoveRenderer( piCommandsRenderer );
|
||
RELEASEINTERFACE( m_piOfficeViewer );
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if( 0 != m_nRendererError)
|
||
return m_nRendererError;
|
||
}
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Options
|
||
CAtlArray<int> aDocumentPages;
|
||
bool bDocumentPages = false;
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
oXmlReader.OpenFromXmlString( sOptions );
|
||
if( TRUE == oXmlReader.ReadNode( _T("DocumentPages") ) )
|
||
{
|
||
oXmlReader.ReadNodeList( _T("Page") );
|
||
for( int i = 0; i < oXmlReader.GetLengthList(); i++ )
|
||
{
|
||
CString sValue = oXmlReader.ReadNodeText(i);
|
||
if( _T("") != sValue )
|
||
aDocumentPages.Add( Strings::ToInteger(sValue) );
|
||
}
|
||
if( aDocumentPages.GetCount() > 0 )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
qsort (aDocumentPages.GetData(), aDocumentPages.GetCount(), sizeof(int), compare);
|
||
bDocumentPages = true;
|
||
}
|
||
}
|
||
piCommandsRenderer->get_PageCount( &nPageCount );
|
||
//<2F><><EFBFBD> HTMLR <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if( 0 == nPageCount && AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR != nDestFormat && AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRMenu != nDestFormat && AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRCanvas != nDestFormat)
|
||
return S_OK;
|
||
|
||
if( aDocumentPages.GetCount() == 0 )
|
||
for( int i = 0; i < nPageCount; i++ )
|
||
aDocumentPages.Add( i );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
IAVSOfficeFileTemplate* piConverter = NULL;
|
||
EBOOKWriter::IAVSEBOOKWriterPtr piEbookConverter = NULL;
|
||
HTMLRenderer::IAVSHTMLRendererPtr piHtmlRenderer = NULL;
|
||
HTMLRenderer::IAVSHTMLRenderer2Ptr piHtmlRenderer2 = NULL;
|
||
AVSOfficePDFWriter::IPDFRendererPtr piPDFRenderer = NULL;
|
||
if(c_nSaveModeNone == m_nSaveMode || 0 != (c_nSaveModeStart & m_nSaveMode))
|
||
{
|
||
if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR == nDestFormat || AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRMenu == nDestFormat)
|
||
{
|
||
if(FAILED(piHtmlRenderer.CreateInstance( __uuidof(HTMLRenderer::CAVSHTMLRenderer))) || NULL == piHtmlRenderer)
|
||
return AVS_ERROR_FILEFORMAT;
|
||
if(c_nSaveModeNone != m_nSaveMode)
|
||
m_piSaveRenderer = piHtmlRenderer;
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRCanvas == nDestFormat)
|
||
{
|
||
if(FAILED(piHtmlRenderer2.CreateInstance( __uuidof(HTMLRenderer::CAVSHTMLRenderer3))) || NULL == piHtmlRenderer2)
|
||
return AVS_ERROR_FILEFORMAT;
|
||
if(c_nSaveModeNone != m_nSaveMode)
|
||
m_piSaveRenderer = piHtmlRenderer2;
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB == nDestFormat || AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2 == nDestFormat || AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI == nDestFormat)
|
||
{
|
||
if(FAILED(piEbookConverter.CreateInstance(__uuidof(EBOOKWriter::CAVSEBOOKWriter))) || NULL == piEbookConverter )
|
||
return AVS_ERROR_FILEFORMAT;
|
||
if(c_nSaveModeNone != m_nSaveMode)
|
||
m_piSaveRenderer = piEbookConverter;
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == nDestFormat)
|
||
{
|
||
if(FAILED(piPDFRenderer.CreateInstance(__uuidof(AVSOfficePDFWriter::CPDFWriter))) || NULL == piPDFRenderer )
|
||
return AVS_ERROR_FILEFORMAT;
|
||
if(c_nSaveModeNone != m_nSaveMode)
|
||
m_piSaveRenderer = piPDFRenderer;
|
||
}
|
||
else
|
||
{
|
||
if( FALSE == m_oStorageConverters.GetConverter( nDestFormat , &piConverter))
|
||
return AVS_ERROR_FILEFORMAT;
|
||
if(c_nSaveModeNone != m_nSaveMode)
|
||
m_piSaveRenderer = piConverter;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR == nDestFormat || AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRMenu == nDestFormat)
|
||
{
|
||
if(NULL != m_piSaveRenderer)
|
||
m_piSaveRenderer->QueryInterface(__uuidof(HTMLRenderer::IAVSHTMLRenderer), (void**)&piHtmlRenderer);
|
||
if(NULL == piHtmlRenderer)
|
||
return AVS_ERROR_FILEFORMAT;
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRCanvas == nDestFormat)
|
||
{
|
||
if(NULL != m_piSaveRenderer)
|
||
m_piSaveRenderer->QueryInterface(__uuidof(HTMLRenderer::IAVSHTMLRenderer2), (void**)&piHtmlRenderer2);
|
||
if(NULL == piHtmlRenderer2)
|
||
return AVS_ERROR_FILEFORMAT;
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB == nDestFormat || AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2 == nDestFormat || AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI == nDestFormat)
|
||
{
|
||
if(NULL != m_piSaveRenderer)
|
||
m_piSaveRenderer->QueryInterface(__uuidof(EBOOKWriter::IAVSEBOOKWriter), (void**)&piEbookConverter);
|
||
if(NULL == piEbookConverter)
|
||
return AVS_ERROR_FILEFORMAT;
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == nDestFormat)
|
||
{
|
||
if(NULL != m_piSaveRenderer)
|
||
m_piSaveRenderer->QueryInterface(__uuidof(AVSOfficePDFWriter::IPDFRenderer), (void**)&piPDFRenderer);
|
||
if(NULL == piPDFRenderer)
|
||
return AVS_ERROR_FILEFORMAT;
|
||
}
|
||
else
|
||
{
|
||
if(NULL != m_piSaveRenderer)
|
||
m_piSaveRenderer->QueryInterface(__uuidof(IAVSOfficeFileTemplate), (void**)&piConverter);
|
||
if(NULL == piConverter)
|
||
return AVS_ERROR_FILEFORMAT;
|
||
}
|
||
}
|
||
|
||
AVSGraphics::IAVSEffectPainterPtr piEffectPainter = NULL;
|
||
if(_T("") != sWatermark && SUCCEEDED(piEffectPainter.CreateInstance(__uuidof(AVSGraphics::CAVSEffectPainter))) && NULL != piEffectPainter)
|
||
{
|
||
BSTR bstrWatermark = sWatermark.AllocSysString();
|
||
piEffectPainter->SetXml( bstrWatermark );
|
||
SysFreeString( bstrWatermark );
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CommandRenderer
|
||
if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == nDestFormat )
|
||
{
|
||
sFileConverterOptions = CheckPdfOutline( sFileConverterOptions, aDocumentPages );
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dpi
|
||
VARIANT vtDPI;
|
||
vtDPI.vt = VT_R8;
|
||
vtDPI.dblVal = 72;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIX"), vtDPI );
|
||
vtDPI.dblVal = 72;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIY"), vtDPI );
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF == nDestFormat )
|
||
{
|
||
FlashStudio::ISWFOfficeFile* piSwfFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(FlashStudio::ISWFOfficeFile), (void**)&piSwfFile );
|
||
if( NULL != piSwfFile )
|
||
{
|
||
piSwfFile->put_CommandRenderer( piCommandsRenderer );
|
||
if( NULL != piEffectPainter )
|
||
{
|
||
VARIANT vtEffectPainter;
|
||
vtEffectPainter.vt = VT_UNKNOWN;
|
||
vtEffectPainter.punkVal = piEffectPainter;
|
||
piSwfFile->SetAdditionalParam( L"EffectPainter", vtEffectPainter );
|
||
}
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dpi
|
||
VARIANT vtDPI;
|
||
vtDPI.vt = VT_R8;
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIX"), vtDPI );
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIY"), vtDPI );
|
||
RELEASEINTERFACE( piSwfFile );
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_IMAGE & nDestFormat )
|
||
{
|
||
AVSOfficeImageFile::IOfficeImageFilePtr piImageFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(AVSOfficeImageFile::IOfficeImageFile), (void**)&piImageFile );
|
||
if( NULL != piImageFile )
|
||
{
|
||
piImageFile->put_CommandRenderer( piCommandsRenderer );
|
||
if( NULL != piEffectPainter )
|
||
{
|
||
VARIANT vtEffectPainter;
|
||
vtEffectPainter.vt = VT_UNKNOWN;
|
||
vtEffectPainter.punkVal = piEffectPainter;
|
||
piImageFile->SetAdditionalParam( L"EffectPainter", vtEffectPainter );
|
||
}
|
||
VARIANT vtParam;
|
||
vtParam.vt = VT_I4;
|
||
vtParam.lVal = m_nSaveMode;
|
||
piImageFile->SetAdditionalParam(_T("SaveMode"), vtParam);
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dpi
|
||
VARIANT vtDPI;
|
||
vtDPI.vt = VT_R8;
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIX"), vtDPI );
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIY"), vtDPI );
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB == nDestFormat || AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2 == nDestFormat || AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI == nDestFormat )
|
||
{
|
||
if( NULL != piEbookConverter )
|
||
{
|
||
piEbookConverter->put_CommandRenderer( piCommandsRenderer );
|
||
if( NULL != piEffectPainter )
|
||
{
|
||
VARIANT vtEffectPainter;
|
||
vtEffectPainter.vt = VT_UNKNOWN;
|
||
vtEffectPainter.punkVal = piEffectPainter;
|
||
piEbookConverter->SetAdditionalParam( L"EffectPainter", vtEffectPainter );
|
||
}
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dpi
|
||
VARIANT vtDPI;
|
||
vtDPI.vt = VT_R8;
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIX"), vtDPI );
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIY"), vtDPI );
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR == nDestFormat || AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRMenu == nDestFormat )
|
||
{
|
||
if( NULL != piHtmlRenderer )
|
||
{
|
||
if( NULL != piEffectPainter )
|
||
{
|
||
VARIANT vtEffectPainter;
|
||
vtEffectPainter.vt = VT_UNKNOWN;
|
||
vtEffectPainter.punkVal = piEffectPainter;
|
||
piHtmlRenderer->SetAdditionalParam( L"EffectPainter", vtEffectPainter );
|
||
}
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dpi
|
||
VARIANT vtDPI;
|
||
vtDPI.vt = VT_R8;
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIX"), vtDPI );
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIY"), vtDPI );
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRCanvas == nDestFormat )
|
||
{
|
||
if( NULL != piHtmlRenderer2 )
|
||
{
|
||
if( NULL != piEffectPainter )
|
||
{
|
||
VARIANT vtEffectPainter;
|
||
vtEffectPainter.vt = VT_UNKNOWN;
|
||
vtEffectPainter.punkVal = piEffectPainter;
|
||
piHtmlRenderer2->SetAdditionalParam( L"EffectPainter", vtEffectPainter );
|
||
}
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dpi
|
||
VARIANT vtDPI;
|
||
vtDPI.vt = VT_R8;
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIX"), vtDPI );
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIY"), vtDPI );
|
||
}
|
||
|
||
if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR == nDestFormat || AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRMenu == nDestFormat )
|
||
{
|
||
HRESULT hRes = S_OK;
|
||
if( NULL != piHtmlRenderer )
|
||
{
|
||
if(c_nSaveModeNone == m_nSaveMode || 0 != (c_nSaveModeStart & m_nSaveMode))
|
||
{
|
||
if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS == m_nOpenFileType )
|
||
{
|
||
VARIANT vSourceType;
|
||
vSourceType.vt = VT_I4;
|
||
vSourceType.lVal = 1;//c_nPDFWriter
|
||
piHtmlRenderer->SetAdditionalParam( _T("SourceRendererType"), vSourceType);
|
||
}
|
||
if( -1 != nHtmlRendererMode )
|
||
piHtmlRenderer->put_Mode(nHtmlRendererMode);
|
||
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRMenu == nDestFormat)
|
||
piHtmlRenderer->put_Mode(12);//<2F> <20><><EFBFBD><EFBFBD>
|
||
|
||
piHtmlRenderer->CreateOfficeFile( bstrDstFileName );
|
||
}
|
||
long m_nPageCount = 0;
|
||
if(bDocumentPages)
|
||
m_nPageCount = aDocumentPages.GetCount();
|
||
else
|
||
piCommandsRenderer->get_PageCount( &m_nPageCount );
|
||
for( int i = 0; i < m_nPageCount; i++ )
|
||
{
|
||
if( bDocumentPages )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
bool bSaveThisPage = false;
|
||
for( int j = 0; j < aDocumentPages.GetCount(); j++ )
|
||
{
|
||
if( i <= aDocumentPages[j] )
|
||
{
|
||
if( i == aDocumentPages[j] )
|
||
bSaveThisPage = true;
|
||
break;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, aDocumentPages <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
}
|
||
if( false == bSaveThisPage )
|
||
continue;
|
||
}
|
||
if( true == m_bCanceled )
|
||
break;
|
||
piHtmlRenderer->NewPage();
|
||
piHtmlRenderer->BeginCommand(c_nPageType);
|
||
hRes = piCommandsRenderer->DrawPage( i, piHtmlRenderer );
|
||
piHtmlRenderer->EndCommand(c_nPageType);
|
||
SHORT shCancel = c_shProgressContinue;
|
||
OnProgressDocumentEx( 0, long(c_nMaxProgressPercent * ( 1.0 * ( i + 1 ) / m_nPageCount )), &shCancel );
|
||
if( FAILED( hRes ) )
|
||
m_bCanceled = true;
|
||
}
|
||
if(m_bCanceled || c_nSaveModeNone == m_nSaveMode || 0 != (c_nSaveModeCommit & m_nSaveMode))
|
||
{
|
||
m_bSaveRendererStopped = true;
|
||
piHtmlRenderer->CloseFile();
|
||
}
|
||
}
|
||
}
|
||
else if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRCanvas == nDestFormat )
|
||
{
|
||
HRESULT hRes = S_OK;
|
||
if( NULL != piHtmlRenderer2 )
|
||
{
|
||
if(c_nSaveModeNone == m_nSaveMode || 0 != (c_nSaveModeStart & m_nSaveMode))
|
||
{
|
||
VARIANT vSourceType;
|
||
if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS == m_nOpenFileType )
|
||
{
|
||
vSourceType.vt = VT_I4;
|
||
vSourceType.lVal = 1;//c_nPDFWriter
|
||
piHtmlRenderer2->SetAdditionalParam( _T("SourceRendererType"), vSourceType);
|
||
}
|
||
vSourceType.vt = VT_I4;
|
||
vSourceType.lVal = m_nOpenFileType;
|
||
piHtmlRenderer2->SetAdditionalParam( _T("SourceType"), vSourceType);
|
||
if( -1 != nHtmlRendererMode )
|
||
piHtmlRenderer2->put_Mode(nHtmlRendererMode);
|
||
|
||
piHtmlRenderer2->CreateOfficeFile( bstrDstFileName );
|
||
}
|
||
long m_nPageCount = 0;
|
||
if(bDocumentPages)
|
||
m_nPageCount = aDocumentPages.GetCount();
|
||
else
|
||
piCommandsRenderer->get_PageCount( &m_nPageCount );
|
||
for( int i = 0; i < m_nPageCount; i++ )
|
||
{
|
||
if( bDocumentPages )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
bool bSaveThisPage = false;
|
||
for( int j = 0; j < aDocumentPages.GetCount(); j++ )
|
||
{
|
||
if( i <= aDocumentPages[j] )
|
||
{
|
||
if( i == aDocumentPages[j] )
|
||
bSaveThisPage = true;
|
||
break;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, aDocumentPages <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
}
|
||
if( false == bSaveThisPage )
|
||
continue;
|
||
}
|
||
if( true == m_bCanceled )
|
||
break;
|
||
piHtmlRenderer2->NewPage();
|
||
piHtmlRenderer2->BeginCommand(c_nPageType);
|
||
hRes = piCommandsRenderer->DrawPage( i, piHtmlRenderer2 );
|
||
piHtmlRenderer2->EndCommand(c_nPageType);
|
||
SHORT shCancel = c_shProgressContinue;
|
||
OnProgressDocumentEx( 0, long(c_nMaxProgressPercent * ( 1.0 * ( i + 1 ) / m_nPageCount )), &shCancel );
|
||
if( FAILED( hRes ) )
|
||
m_bCanceled = true;
|
||
}
|
||
if(m_bCanceled || c_nSaveModeNone == m_nSaveMode || 0 != (c_nSaveModeCommit & m_nSaveMode))
|
||
{
|
||
m_bSaveRendererStopped = true;
|
||
piHtmlRenderer2->CloseFile();
|
||
}
|
||
}
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB == nDestFormat || AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2 == nDestFormat || AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI == nDestFormat)
|
||
{
|
||
HRESULT hRes = S_OK;
|
||
if( NULL != piEbookConverter )
|
||
{
|
||
if(c_nSaveModeNone == m_nSaveMode || 0 != (c_nSaveModeStart & m_nSaveMode))
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == m_nOpenFileType || AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS == m_nOpenFileType)
|
||
piEbookConverter->put_SrcFileType(1);
|
||
else
|
||
piEbookConverter->put_SrcFileType(0);
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrOptions = sFileConverterOptions.AllocSysString();
|
||
piEbookConverter->Initialize(bstrOptions);
|
||
SysFreeString(bstrOptions);
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrMetadata = m_sMetadata.AllocSysString();
|
||
piEbookConverter->SetMetadata(bstrMetadata);
|
||
SysFreeString(bstrMetadata);
|
||
|
||
//Output format
|
||
long nEBookFiletype = 0;
|
||
switch(nDestFormat)
|
||
{
|
||
case AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB:nEBookFiletype=0;break;
|
||
case AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2:nEBookFiletype=1;break;
|
||
case AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI:nEBookFiletype=2;break;
|
||
}
|
||
|
||
piEbookConverter->CreateOfficeFile (bstrDstFileName, nEBookFiletype);
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CommandsRenderer'<27><>
|
||
long m_nPageCount = 0;
|
||
if(bDocumentPages)
|
||
m_nPageCount = aDocumentPages.GetCount();
|
||
else
|
||
piCommandsRenderer->get_PageCount( &m_nPageCount );
|
||
for( int i = 0; i < m_nPageCount; i++ )
|
||
{
|
||
if( bDocumentPages )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
bool bSaveThisPage = false;
|
||
for( int j = 0; j < aDocumentPages.GetCount(); j++ )
|
||
{
|
||
if( i <= aDocumentPages[j] )
|
||
{
|
||
if( i == aDocumentPages[j] )
|
||
bSaveThisPage = true;
|
||
break;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, aDocumentPages <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
}
|
||
if( false == bSaveThisPage )
|
||
continue;
|
||
}
|
||
if( true == m_bCanceled )
|
||
break;
|
||
piEbookConverter->NewPage();
|
||
piEbookConverter->BeginCommand(c_nPageType);
|
||
//<2F> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ebook
|
||
if(0 != (AVS_OFFICESTUDIO_FILE_PRESENTATION & m_nOpenFileType))
|
||
{
|
||
double dPageWidthMm = 0;
|
||
double dPageHeightMm = 0;
|
||
piCommandsRenderer->GetPageSize( i, &dPageWidthMm, &dPageHeightMm);
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
MediaCore::IAVSUncompressedVideoFrame* piImage = NULL;
|
||
AVSGraphics::IAVSGraphicsRenderer* piGdiplusRenderer = NULL;
|
||
UpdateGdiPlusRenderer(dPageWidthMm, dPageHeightMm, &piImage, &piGdiplusRenderer);
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
hRes = m_piCommandsRenderer->DrawPage(i, piGdiplusRenderer);
|
||
if (NULL != piEffectPainter)
|
||
piEffectPainter->Draw((IUnknown*)piGdiplusRenderer);
|
||
|
||
RELEASEINTERFACE(piGdiplusRenderer);
|
||
hRes = piEbookConverter->DrawImage(piImage, 0, 0, dPageWidthMm, dPageHeightMm);
|
||
RELEASEINTERFACE(piImage);
|
||
}
|
||
else
|
||
hRes = piCommandsRenderer->DrawPage( i, piEbookConverter );
|
||
piEbookConverter->EndCommand(c_nPageType);
|
||
SHORT shCancel = c_shProgressContinue;
|
||
OnProgressDocumentEx( 0, long(c_nMaxProgressPercent * ( 1.0 * ( i + 1 ) / m_nPageCount )), &shCancel );
|
||
if( FAILED( hRes ) )
|
||
m_bCanceled = true;
|
||
}
|
||
if(m_bCanceled || c_nSaveModeNone == m_nSaveMode || 0 != (c_nSaveModeCommit & m_nSaveMode))
|
||
{
|
||
m_bSaveRendererStopped = true;
|
||
piEbookConverter->CloseFile();
|
||
}
|
||
}
|
||
}
|
||
else if(AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF == nDestFormat)
|
||
{
|
||
HRESULT hRes = S_OK;
|
||
AVSOfficePDFWriter::IPDFWriter * piPDFWriter = NULL;
|
||
piPDFRenderer->QueryInterface( __uuidof( AVSOfficePDFWriter::IPDFWriter ), (void**)&piPDFWriter );
|
||
if( NULL != piPDFWriter && NULL != piPDFRenderer )
|
||
{
|
||
if(c_nSaveModeNone == m_nSaveMode || 0 != (c_nSaveModeStart & m_nSaveMode))
|
||
piPDFWriter->CreatePDF();
|
||
|
||
long m_nPageCount = 0;
|
||
if(bDocumentPages)
|
||
m_nPageCount = aDocumentPages.GetCount();
|
||
else
|
||
piCommandsRenderer->get_PageCount( &m_nPageCount );
|
||
for( int i = 0; i < m_nPageCount; i++ )
|
||
{
|
||
if( bDocumentPages )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
bool bSaveThisPage = false;
|
||
for( int j = 0; j < aDocumentPages.GetCount(); j++ )
|
||
{
|
||
if( i <= aDocumentPages[j] )
|
||
{
|
||
if( i == aDocumentPages[j] )
|
||
bSaveThisPage = true;
|
||
break;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, aDocumentPages <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
}
|
||
if( false == bSaveThisPage )
|
||
continue;
|
||
}
|
||
if( true == m_bCanceled )
|
||
break;
|
||
piPDFRenderer->NewPage();
|
||
piPDFRenderer->BeginCommand(c_nPageType);
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
hRes = m_piCommandsRenderer->DrawPage(i, piPDFRenderer);
|
||
if (NULL != piEffectPainter)
|
||
piEffectPainter->Draw((IUnknown*)piPDFRenderer);
|
||
piPDFRenderer->EndCommand(c_nPageType);
|
||
SHORT shCancel = c_shProgressContinue;
|
||
OnProgressDocumentEx( 0, long(c_nMaxProgressPercent * ( 1.0 * ( i + 1 ) / m_nPageCount )), &shCancel );
|
||
if( FAILED( hRes ) )
|
||
m_bCanceled = true;
|
||
}
|
||
if(m_bCanceled || c_nSaveModeNone == m_nSaveMode || 0 != (c_nSaveModeCommit & m_nSaveMode))
|
||
{
|
||
m_bSaveRendererStopped = true;
|
||
BSTR bstrFileConverterOptions = sFileConverterOptions.AllocSysString();
|
||
PdfReadWriterOptions( bstrFileConverterOptions, piPDFWriter );
|
||
SysFreeString(bstrFileConverterOptions);
|
||
piPDFWriter->SaveToFile( bstrDstFileName );
|
||
piPDFWriter->DeletePDF();
|
||
}
|
||
}
|
||
}
|
||
else if( 0 != (AVS_OFFICESTUDIO_FILE_DOCUMENT & nDestFormat) && true == bLoadInCommandRenderer )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dpi
|
||
VARIANT vtDPI;
|
||
vtDPI.vt = VT_R8;
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIX"), vtDPI );
|
||
vtDPI.dblVal = 96;
|
||
piCommandsRenderer->SetAdditionalParam( _T("DPIY"), vtDPI );
|
||
|
||
if( AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB == nDestFormat )
|
||
{
|
||
if( false == bRenderDoc )
|
||
{
|
||
m_dMinProgress = 0;
|
||
m_dMaxProgress = 1;
|
||
}
|
||
else
|
||
{
|
||
m_dMinProgress = 0.500;
|
||
m_dMaxProgress = 1;
|
||
}
|
||
HRESULT hRes = S_OK;
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >* oEventDocuments = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >(this);
|
||
oEventDocuments->AddRef();
|
||
oEventDocuments->Advise( piConverter );
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >* oEventDocuments2 = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >(this);
|
||
oEventDocuments2->AddRef();
|
||
oEventDocuments2->Advise( piConverter );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> docx <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrPath = m_sTempDirectory.AllocSysString();
|
||
BSTR bstrOptions = sFileConverterOptions.AllocSysString();
|
||
hRes = piConverter->SaveToFile( bstrDstFileName, bstrPath, bstrOptions );
|
||
SysFreeString(bstrOptions);
|
||
SysFreeString(bstrPath);
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
oEventDocuments->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oEventDocuments);
|
||
oEventDocuments2->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oEventDocuments2);
|
||
|
||
if( FAILED( hRes ) )
|
||
return hRes;
|
||
}
|
||
else
|
||
{
|
||
DocxRenderer::IAVSDocxRendererPtr piDocxRenderer;
|
||
piDocxRenderer.CreateInstance( __uuidof( DocxRenderer::CAVSDocxRenderer ) );
|
||
if( NULL != piDocxRenderer )
|
||
{
|
||
if( AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS == m_nOpenFileType )
|
||
{
|
||
VARIANT vSourceType;
|
||
vSourceType.vt = VT_I4;
|
||
vSourceType.lVal = 1;//c_nPDFWriter
|
||
piDocxRenderer->SetAdditionalParam( _T("SourceRendererType"), vSourceType);
|
||
}
|
||
CString sNewTempFolder = Utils::CreateTempDir( m_sTempDirectory );
|
||
if( _T("") != sNewTempFolder )
|
||
{
|
||
CString sDocxRendererOptions = _T("<DocxRenderer");
|
||
sDocxRendererOptions.AppendFormat( _T(" destinationpath=\"%s\""), sNewTempFolder );
|
||
if( -1 != nDocxRendererMode )
|
||
sDocxRendererOptions.AppendFormat( _T(" textformatting=\"%d\""), nDocxRendererMode );
|
||
sDocxRendererOptions.Append( _T("/>") );
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrDocxRendererOptions = sDocxRendererOptions.AllocSysString();
|
||
piDocxRenderer->Initialize( bstrDocxRendererOptions );
|
||
SysFreeString( bstrDocxRendererOptions );
|
||
|
||
if( false == bRenderDoc )
|
||
{
|
||
m_dMinProgress = 0;
|
||
m_dMaxProgress = 0.500;
|
||
}
|
||
else
|
||
{
|
||
m_dMinProgress = 0.500;
|
||
m_dMaxProgress = 0.750;
|
||
}
|
||
|
||
HRESULT hRes = S_OK;
|
||
long m_nPageCount = 0;
|
||
if(bDocumentPages)
|
||
m_nPageCount = aDocumentPages.GetCount();
|
||
else
|
||
piCommandsRenderer->get_PageCount( &m_nPageCount );
|
||
for( int i = 0; i < m_nPageCount; i++ )
|
||
{
|
||
if( bDocumentPages )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
bool bSaveThisPage = false;
|
||
for( int j = 0; j < aDocumentPages.GetCount(); j++ )
|
||
{
|
||
if( i <= aDocumentPages[j] )
|
||
{
|
||
if( i == aDocumentPages[j] )
|
||
bSaveThisPage = true;
|
||
break;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, aDocumentPages <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
}
|
||
if( false == bSaveThisPage )
|
||
continue;
|
||
}
|
||
if( true == m_bCanceled )
|
||
break;
|
||
piDocxRenderer->NewPage();
|
||
piDocxRenderer->BeginCommand(c_nPageType);
|
||
hRes = piCommandsRenderer->DrawPage( i, piDocxRenderer );
|
||
piDocxRenderer->EndCommand(c_nPageType);
|
||
SHORT shCancel = c_shProgressContinue;
|
||
OnProgressDocumentEx( 0, long(c_nMaxProgressPercent * ( 1.0 * ( i + 1 ) / m_nPageCount )), &shCancel );
|
||
if( FAILED( hRes ) )
|
||
m_bCanceled = true;
|
||
}
|
||
if( false == m_bCanceled )
|
||
{
|
||
hRes = piDocxRenderer->Save();
|
||
if( FAILED( hRes ) )
|
||
m_bCanceled = true;
|
||
|
||
if( false == bRenderDoc )
|
||
{
|
||
m_dMinProgress = 0.500;
|
||
m_dMaxProgress = 1;
|
||
}
|
||
else
|
||
{
|
||
m_dMinProgress = 0.750;
|
||
m_dMaxProgress = 1;
|
||
}
|
||
|
||
if( false == m_bCanceled )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >* oEventDocuments = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >(this);
|
||
oEventDocuments->AddRef();
|
||
oEventDocuments->Advise( piConverter );
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >* oEventDocuments2 = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >(this);
|
||
oEventDocuments2->AddRef();
|
||
oEventDocuments2->Advise( piConverter );
|
||
//m_poEventDocuments->Advise( piConverter );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> docx <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrPath = sNewTempFolder.AllocSysString();
|
||
BSTR bstrOptions = sFileConverterOptions.AllocSysString();
|
||
hRes = piConverter->SaveToFile( bstrDstFileName, bstrPath, bstrOptions );
|
||
SysFreeString(bstrOptions);
|
||
SysFreeString(bstrPath);
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//m_poEventDocuments->UnAdvise( piConverter );
|
||
oEventDocuments->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oEventDocuments);
|
||
oEventDocuments2->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oEventDocuments2);
|
||
|
||
RELEASEINTERFACE(piConverter);
|
||
}
|
||
}
|
||
Utils::RemoveDirOrFile( sNewTempFolder );
|
||
if( FAILED( hRes ) )
|
||
return hRes;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_dMinProgress = 0;
|
||
m_dMaxProgress = 1;
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
OnProgressDocument(0, 0);
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >* poEventViewer = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >(this);
|
||
poEventViewer->AddRef();
|
||
poEventViewer->Advise( piConverter );
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >* oEventDocuments2 = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >(this);
|
||
oEventDocuments2->AddRef();
|
||
oEventDocuments2->Advise( piConverter );
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
BSTR bstrPath = sSourceDirectory.AllocSysString();
|
||
BSTR bstrOptions = sFileConverterOptions.AllocSysString();
|
||
HRESULT hRes = piConverter->SaveToFile( bstrDstFileName, bstrPath, bstrOptions );
|
||
SysFreeString( bstrOptions );
|
||
SysFreeString( bstrPath );
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if(c_nSaveModeNone != m_nSaveMode)
|
||
{
|
||
AVSOfficeImageFile::IOfficeImageFilePtr piImageFile = NULL;
|
||
piConverter->QueryInterface( __uuidof(AVSOfficeImageFile::IOfficeImageFile), (void**)&piImageFile );
|
||
if( NULL != piImageFile )
|
||
{
|
||
VARIANT vtParam;
|
||
piImageFile->GetAdditionalParam(_T("SaveRendererStopped"), &vtParam);
|
||
if( VT_I4 == vtParam.vt)
|
||
{
|
||
if(0 != vtParam.lVal)
|
||
m_bSaveRendererStopped = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
poEventViewer->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(poEventViewer);
|
||
oEventDocuments2->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oEventDocuments2);
|
||
RELEASEINTERFACE( piConverter );
|
||
|
||
if( FAILED( hRes ) )
|
||
return hRes;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_dMinProgress = 0;
|
||
m_dMaxProgress = 1;
|
||
//if( false == AVSOfficeFormatChecker::CanConvert( m_nOpenFileType, nDestFormat ) )
|
||
// return AVS_OFFICEFILE_ERROR_UNSUPPORTED_LOAD_FORMAT;
|
||
if( false == bNoStandartSave )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if( CString(bstrSrcPath) == "" && "" == sSourceDirectory )
|
||
return AVS_OFFICEFILE_ERROR_SAVE_EMPTY;
|
||
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
if( ::GetFileAttributes( sSourceDirectory ) == INVALID_FILE_ATTRIBUTES )
|
||
return AVS_OFFICEFILE_ERROR_SAVE_EMPTY;
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
IAVSOfficeFileTemplate* piConverter = NULL;
|
||
if( FALSE == m_oStorageConverters.GetConverter( nDestFormat , &piConverter) )
|
||
return AVS_ERROR_FILEFORMAT;
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >* oEventDocuments = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents, CAVSOfficeFileConverter >(this);
|
||
oEventDocuments->AddRef();
|
||
oEventDocuments->Advise( piConverter );
|
||
COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >* oEventDocuments2 = new COfficeEventDocuments< _IAVSOfficeFileTemplateEvents2, CAVSOfficeFileConverter >(this);
|
||
oEventDocuments2->AddRef();
|
||
oEventDocuments2->Advise( piConverter );
|
||
//m_poEventDocuments->Advise( piConverter );
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> docx <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
HRESULT hRes = S_OK;
|
||
BSTR bstrPath = sSourceDirectory.AllocSysString();
|
||
BSTR bstrOptions = sFileConverterOptions.AllocSysString();
|
||
hRes = piConverter->SaveToFile( bstrDstFileName, bstrPath, bstrOptions );
|
||
SysFreeString(bstrOptions);
|
||
SysFreeString(bstrPath);
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//m_poEventDocuments->UnAdvise( piConverter );
|
||
oEventDocuments->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oEventDocuments);
|
||
oEventDocuments2->UnAdvise( piConverter );
|
||
RELEASEINTERFACE(oEventDocuments2);
|
||
|
||
RELEASEINTERFACE(piConverter);
|
||
if( FAILED( hRes ) )
|
||
return hRes;
|
||
}
|
||
m_nStatus = CONVERTER_SAVE_COMP;
|
||
return S_OK;
|
||
}
|
||
|
||
STDMETHOD(get_FileType)(LONG* pnType)
|
||
{
|
||
//CTemporaryCS oCS(&m_csThread);
|
||
if( NULL == pnType )
|
||
return S_FALSE;
|
||
if( AVS_OFFICESTUDIO_FILE_UNKNOWN != m_nFileType )
|
||
(*pnType) = m_nFileType;
|
||
else
|
||
(*pnType) = m_nOpenFileType;
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(put_FileType)(LONG nType)
|
||
{
|
||
//CTemporaryCS oCS(&m_csThread);
|
||
m_nFileType = nType;
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(get_DrawingXml)( BSTR* pbstrXml )
|
||
{
|
||
HRESULT hRes = S_OK;
|
||
//CTemporaryCS oCS(&m_csThread);
|
||
if( NULL == pbstrXml )
|
||
return S_FALSE;
|
||
if( "" != m_sDrawingXML)
|
||
(*pbstrXml) = m_sDrawingXML.AllocSysString();
|
||
else
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IOfficeFOFile
|
||
AVSOfficeFOFile::IOfficeFOFilePtr piFOFile = NULL;
|
||
piFOFile.CreateInstance( __uuidof( AVSOfficeFOFile::COfficeFOFile ) );
|
||
if( NULL == piFOFile )
|
||
return AVS_ERROR_UNEXPECTED;
|
||
|
||
BSTR bstrFoXml;
|
||
BSTR bstrTempDir = m_sTempDirectory.AllocSysString();
|
||
hRes = piFOFile->GetFOXml( bstrTempDir, pbstrXml );
|
||
SysFreeString( bstrTempDir );
|
||
if( SUCCEEDED( hRes ) )
|
||
{
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
VARIANT vDecoder;
|
||
BSTR bstrAdditionalParamName = g_csBlowfishKeyParamName.AllocSysString();
|
||
hRes = piFOFile->GetAdditionalParam( bstrAdditionalParamName, &vDecoder );
|
||
SysFreeString( bstrAdditionalParamName );
|
||
if( SUCCEEDED( hRes ) )
|
||
{
|
||
RELEASEINTERFACE( m_piDecoderKey );
|
||
vDecoder.punkVal->QueryInterface( __uuidof( IUnknown ), (void**)&m_piDecoderKey );
|
||
RELEASEINTERFACE( vDecoder.punkVal );
|
||
}
|
||
}
|
||
}
|
||
m_sDrawingXML = _T("");
|
||
return hRes;
|
||
}
|
||
|
||
STDMETHOD(get_CommandRenderer)( IUnknown** ppunkRend )
|
||
{
|
||
//CTemporaryCS oCS(&m_csThread);
|
||
if( NULL == ppunkRend )
|
||
return S_FALSE;
|
||
(*ppunkRend) = NULL;
|
||
if( NULL == m_piCommandsRenderer )
|
||
return S_OK;
|
||
HRESULT hRes = m_piCommandsRenderer->QueryInterface( __uuidof( AVSGraphics::IAVSDocumentRenderer ), (void**)ppunkRend );
|
||
return hRes;
|
||
}
|
||
STDMETHOD(put_CommandRenderer)( IUnknown* ppunkRend )
|
||
{
|
||
//CTemporaryCS oCS(&m_csThread);
|
||
RELEASEINTERFACE(m_piCommandsRenderer);
|
||
if( NULL != ppunkRend )
|
||
ppunkRend->QueryInterface(__uuidof( AVSGraphics::IAVSDocumentRenderer ), (void**)&m_piCommandsRenderer );
|
||
else
|
||
CoCreateInstance( __uuidof(AVSGraphics::CAVSDocumentRenderer), NULL ,CLSCTX_INPROC_SERVER, __uuidof(AVSGraphics::IAVSDocumentRenderer), (void **)(&m_piCommandsRenderer) );
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(get_Watermark)( BSTR* pbstrVal )
|
||
{
|
||
if( NULL == pbstrVal )
|
||
return S_FALSE;
|
||
(*pbstrVal) = m_sWatermark.AllocSysString();
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(put_Watermark)( BSTR bstrVal )
|
||
{
|
||
m_sWatermark = CString(bstrVal);
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(DrawWatermark)( IUnknown* punkImage, LONG nWidth, LONG nHeight)
|
||
{
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(get_TempDirectory)( BSTR* pbstrDir )
|
||
{
|
||
//CTemporaryCS oCS(&m_csThread);
|
||
if( NULL == pbstrDir )
|
||
return S_FALSE;
|
||
(*pbstrDir) = m_sTempDirectory.AllocSysString();
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(put_TempDirectory)( BSTR bstrDir )
|
||
{
|
||
//CTemporaryCS oCS(&m_csThread);
|
||
CString sNewTempDir( bstrDir );
|
||
if( m_sRootTempDirectory != sNewTempDir && true == m_bIsInternalTemDir )
|
||
Clear();
|
||
m_sRootTempDirectory = sNewTempDir;
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(get_IsLoadComplete)( VARIANT_BOOL* pvIsLoadComplete )
|
||
{
|
||
if( NULL == pvIsLoadComplete )
|
||
return S_FALSE;
|
||
if( m_nStatus < CONVERTER_LOAD_COMP )
|
||
(*pvIsLoadComplete) = VARIANT_FALSE;
|
||
else
|
||
(*pvIsLoadComplete) = VARIANT_TRUE;
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(get_Status)( LONG* pVal)
|
||
{
|
||
if( NULL == pVal )
|
||
return S_FALSE;
|
||
(*pVal) = m_nStatus;
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(SetAdditionalParam)(BSTR ParamName, VARIANT ParamValue)
|
||
{
|
||
CComBSTR ParamStr = ParamName;
|
||
ParamStr.ToLower();
|
||
if (ParamStr == L"savemode")
|
||
{
|
||
if( VT_I4 == ParamValue.vt)
|
||
m_nSaveMode = ParamValue.lVal;
|
||
}
|
||
else if (ParamStr == L"saverenderer")
|
||
{
|
||
if( VT_UNKNOWN == ParamValue.vt && NULL != ParamValue.punkVal)
|
||
ParamValue.punkVal->QueryInterface( __uuidof(IUnknown) , (void**)(&m_piSaveRenderer) );
|
||
}
|
||
return S_OK;
|
||
}
|
||
STDMETHOD(GetAdditionalParam)(BSTR ParamName, VARIANT* ParamValue)
|
||
{
|
||
CComBSTR ParamStr = ParamName;
|
||
ParamStr.ToLower();
|
||
if (ParamStr == L"decoderkey")
|
||
{
|
||
(*ParamValue).vt = VT_UNKNOWN;
|
||
(*ParamValue).punkVal = NULL;
|
||
if( NULL != m_piDecoderKey )
|
||
m_piDecoderKey->QueryInterface( __uuidof(IUnknown) , (void**)(&(*ParamValue).punkVal) );
|
||
}
|
||
else if (ParamStr == L"saverenderer")
|
||
{
|
||
(*ParamValue).vt = VT_UNKNOWN;
|
||
(*ParamValue).punkVal = NULL;
|
||
if( NULL != m_piSaveRenderer )
|
||
m_piSaveRenderer->QueryInterface( __uuidof(IUnknown) , (void**)(&(*ParamValue).punkVal) );
|
||
}
|
||
else if (ParamStr == L"saverendererstopped")
|
||
{
|
||
(*ParamValue).vt = VT_I4;
|
||
(*ParamValue).lVal = m_bSaveRendererStopped;
|
||
}
|
||
return S_OK;
|
||
}
|
||
private: void Clear()
|
||
{
|
||
m_nStatus = CONVERTER_IDLE;
|
||
m_nRendererError = 0;
|
||
m_nOpenFileType = AVS_OFFICESTUDIO_FILE_UNKNOWN;
|
||
m_sDrawingXML = _T("");
|
||
m_sMetadata = _T("");
|
||
RELEASEINTERFACE( m_piDecoderKey );
|
||
if( true == m_bIsInternalTemDir )
|
||
Utils::RemoveDirOrFile( m_sTempDirectory );
|
||
m_sTempDirectory = _T("");
|
||
m_bIsInternalTemDir = false;
|
||
m_bCanceled = false;
|
||
m_nLastProgress = -1;
|
||
m_nLastProgressEx = -1;
|
||
m_nMaxPageLoad = -1;
|
||
m_nSaveMode = c_nSaveModeNone;
|
||
m_piSaveRenderer = NULL;
|
||
m_bSaveRendererStopped = false;
|
||
}
|
||
private: CString CheckPdfOutline( CString Options, CAtlArray<int>& aPages )
|
||
{
|
||
CAtlArray<int> aSortedPages;
|
||
aSortedPages.Append( aPages );
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>))
|
||
for( int i = 0 ; i < aSortedPages.GetCount(); i++ )
|
||
for( int j = i ; j < aSortedPages.GetCount(); j++ )
|
||
if( aSortedPages[i] > aSortedPages[j] )
|
||
{
|
||
int nTemp = aSortedPages[i];
|
||
aSortedPages[i] = aSortedPages[j];
|
||
aSortedPages[j] = nTemp;
|
||
}
|
||
|
||
CString sResult = _T("<Options>");
|
||
XmlUtils::CXmlReader oXmlReader;
|
||
if( TRUE == oXmlReader.OpenFromXmlString( Options ) )
|
||
{
|
||
oXmlReader.ReadNodeList( _T("*") );
|
||
for( int i = 0; i < oXmlReader.GetLengthList(); i++)
|
||
{
|
||
CString sNodeName = oXmlReader.ReadNodeName(i);
|
||
if( _T("PDFOptions") == sNodeName )
|
||
{
|
||
sResult.Append( _T("<PDFOptions>") );
|
||
XML::IXMLDOMNodePtr oNode;
|
||
oXmlReader.GetNode( i , oNode );
|
||
XmlUtils::CXmlReader oXmlSubReader;
|
||
oXmlSubReader.OpenFromXmlNode( oNode );
|
||
oXmlSubReader.ReadNodeList( _T("*") );
|
||
for( int i = 0; i < oXmlSubReader.GetLengthList(); i++ )
|
||
{
|
||
CString sNodeName = oXmlSubReader.ReadNodeName(i);
|
||
if( _T("Outline") == sNodeName )
|
||
{
|
||
sResult.Append( _T("<Outline>") );
|
||
XML::IXMLDOMNodePtr oNode;
|
||
oXmlSubReader.GetNode( i , oNode );
|
||
sResult.Append( RecursiveCheckPdfOutline( oNode, aSortedPages) );
|
||
sResult.Append( _T("</Outline>") );
|
||
}
|
||
else
|
||
sResult.Append(oXmlSubReader.ReadNodeXml(i));
|
||
}
|
||
sResult.Append( _T("</PDFOptions>") );
|
||
}
|
||
else
|
||
sResult.Append( oXmlReader.ReadNodeXml(i) );
|
||
}
|
||
}
|
||
sResult.Append( _T("</Options>") );
|
||
return sResult;
|
||
}
|
||
private: CString RecursiveCheckPdfOutline( XML::IXMLDOMNodePtr oNode, CAtlArray<int>& aPages )
|
||
{
|
||
CString sResult;
|
||
XmlUtils::CXmlReader oXmlReader;
|
||
if( TRUE == oXmlReader.OpenFromXmlNode( oNode ) )
|
||
{
|
||
oXmlReader.ReadNodeList( _T("Chapter") );
|
||
for( int i = 0; i < oXmlReader.GetLengthList(); i++ )
|
||
{
|
||
CString sName = oXmlReader.ReadNodeAttribute(i, _T("name") );
|
||
CString sPage = oXmlReader.ReadNodeAttribute(i, _T("page") );
|
||
if( _T("") == sPage )
|
||
continue;
|
||
int nPage = Strings::ToInteger( sPage );
|
||
int nExist = -1;
|
||
for( int i = 0; i < aPages.GetCount(); i++ )
|
||
if( aPages[i] == nPage )
|
||
{
|
||
nExist = i;
|
||
break;
|
||
}
|
||
if( -1 != nExist )
|
||
{
|
||
sResult.AppendFormat( _T("<Chapter name=\"%s\" page=\"%d\" >"), Utils::PrepareToXML( sName ), nExist );
|
||
XML::IXMLDOMNodePtr oNode;
|
||
oXmlReader.GetNode( i , oNode );
|
||
sResult.Append( RecursiveCheckPdfOutline( oNode, aPages ) );
|
||
sResult.Append( _T("</Chapter>") );
|
||
}
|
||
}
|
||
}
|
||
return sResult;
|
||
}
|
||
private: static int compare (const void * a, const void * b)
|
||
{
|
||
return ( *(int*)a - *(int*)b );
|
||
}
|
||
private: long GetProgress( long nCurProgress )
|
||
{
|
||
return (long)(c_nMaxProgressPercent * (m_dMinProgress + ( m_dMaxProgress - m_dMinProgress ) * nCurProgress / c_nMaxProgressPercent));
|
||
}
|
||
private: long PdfReadWriterOptions(BSTR bsXMLOptions, AVSOfficePDFWriter::IPDFWriter *pWriter)
|
||
{
|
||
HRESULT hRes = S_OK;
|
||
if ( NULL == pWriter )
|
||
return S_OK;
|
||
|
||
//<Options>
|
||
// <FileType>513</FileType>
|
||
// <PDFOptions>
|
||
// <Outline>
|
||
// <Chapter name="toPage2" page="1" />
|
||
// <Chapter name="toPage3" page="2" />
|
||
// <Chapter name="toPage1" page="0" />
|
||
// <Chapter name="toPage4" page="3" />
|
||
// </Outline>
|
||
// <Encryption>
|
||
// <OwnerPassword value="Password" />
|
||
// <UserPassword value="Password" print="false" modify="false" copy="false" />
|
||
// </Encryption>
|
||
// </PDFOptions>
|
||
//</Options>
|
||
|
||
CString sXml( bsXMLOptions );
|
||
|
||
XmlUtils::CXmlNode oOptionsNode;
|
||
oOptionsNode.FromXmlString( sXml );
|
||
if ( -1 != oOptionsNode.GetName().Find( _T("Options") ) )
|
||
{
|
||
XmlUtils::CXmlNode oPDFOptionsNode;
|
||
oOptionsNode.GetNode( _T("PDFOptions") , oPDFOptionsNode);
|
||
if ( -1 != oPDFOptionsNode.GetName().Find( _T("PDFOptions") ) )
|
||
{
|
||
XmlUtils::CXmlNode oOutlineNode, oEncryptionNode;
|
||
if ( oPDFOptionsNode.GetNode( _T("Outline"), oOutlineNode ) )
|
||
{
|
||
CString sOutline = oOutlineNode.GetXml();
|
||
BSTR bsOutline = sOutline.AllocSysString();
|
||
if ( FAILED( hRes = pWriter->MakeOutlineFromXml( bsOutline ) ) )
|
||
{
|
||
::SysFreeString( bsOutline );
|
||
return hRes;
|
||
}
|
||
}
|
||
if ( oPDFOptionsNode.GetNode( _T("Encryption"), oEncryptionNode ) )
|
||
{
|
||
XmlUtils::CXmlNode oUser, oOwner;
|
||
CString sOwner, sUser;
|
||
long nPermissions = 0;
|
||
if ( oEncryptionNode.GetNode( _T("OwnerPassword"), oOwner ) )
|
||
{
|
||
sOwner = oOwner.GetAttribute( _T("value"), _T("") );
|
||
}
|
||
if ( oEncryptionNode.GetNode( _T("UserPassword"), oUser ) )
|
||
{
|
||
sUser = oUser.GetAttribute( _T("value"), _T("") );
|
||
CString sPrint = oUser.GetAttribute( _T("print") );
|
||
CString sModify = oUser.GetAttribute( _T("modify") );
|
||
CString sCopy = oUser.GetAttribute( _T("copy") );
|
||
|
||
// 3 <20><><EFBFBD>
|
||
if ( -1 == sPrint.Find( _T("0") ) )
|
||
nPermissions += 4;
|
||
|
||
// 4 <20><><EFBFBD>
|
||
if ( -1 == sModify.Find( _T("0") ) )
|
||
nPermissions += 8;
|
||
|
||
// 5 <20><><EFBFBD>
|
||
if ( -1 == sCopy.Find( _T("0") ) )
|
||
nPermissions += 16;
|
||
}
|
||
|
||
BSTR bsOwner = sOwner.AllocSysString();
|
||
BSTR bsUser = sUser.AllocSysString();
|
||
if ( FAILED( hRes = pWriter->SetPDFPassword( bsOwner, bsUser ) ) )
|
||
{
|
||
::SysFreeString( bsOwner );
|
||
::SysFreeString( bsUser );
|
||
return hRes;
|
||
}
|
||
::SysFreeString( bsOwner );
|
||
::SysFreeString( bsUser );
|
||
|
||
if ( FAILED( hRes = pWriter->SetPDFPermission( nPermissions ) ) )
|
||
return hRes;
|
||
}
|
||
|
||
}
|
||
}
|
||
return S_OK;
|
||
}
|
||
private: void UpdateGdiPlusRenderer(double dWidthMm, double dHeightMm, MediaCore::IAVSUncompressedVideoFrame** piImage, AVSGraphics::IAVSGraphicsRenderer** piRend)
|
||
{
|
||
(*piImage) = NULL;
|
||
(*piRend) = NULL;
|
||
CoCreateInstance(__uuidof( MediaCore::CAVSUncompressedVideoFrame), NULL ,CLSCTX_INPROC_SERVER, __uuidof(MediaCore::IAVSUncompressedVideoFrame), (void **)piImage);
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dpi <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nLOGPIXELSX = 96;
|
||
int nLOGPIXELSY = 96;
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
long nWidthPix = (long)(nLOGPIXELSX * dWidthMm / (10 * ONE_INCH));
|
||
long nHeightPix = (long)(nLOGPIXELSY * dWidthMm * dHeightMm / (10 * dWidthMm * ONE_INCH));
|
||
|
||
(*piImage)->Width = nWidthPix;
|
||
(*piImage)->Height = nHeightPix;
|
||
(*piImage)->put_Stride(0, nWidthPix * 4);
|
||
|
||
(*piImage)->AspectRatioX = nWidthPix;
|
||
(*piImage)->AspectRatioY = nHeightPix;
|
||
|
||
(*piImage)->DataSize = 4 * nWidthPix * nHeightPix;
|
||
|
||
(*piImage)->ColorSpace = 64 + (1 << 31);
|
||
(*piImage)->AllocateBuffer(-1);
|
||
|
||
memset((*piImage)->Buffer, 255, (*piImage)->BufferSize);
|
||
|
||
CoCreateInstance(__uuidof( AVSGraphics::CAVSGraphicsRenderer), NULL ,CLSCTX_INPROC_SERVER, __uuidof(AVSGraphics::IAVSGraphicsRenderer), (void **)piRend);
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FontManager
|
||
VARIANT vtVariant;
|
||
vtVariant.vt = VT_UNKNOWN;
|
||
vtVariant.punkVal = NULL;
|
||
(*piRend)->SetAdditionalParam( L"FontManager", vtVariant );
|
||
|
||
(*piRend)->put_Width(dWidthMm);
|
||
(*piRend)->put_Height(dHeightMm);
|
||
(*piRend)->CreateFromMediaData(*piImage, 0, 0, nWidthPix, nHeightPix );
|
||
}
|
||
};
|