⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsofprint.cpp

📁 用于在线office文档编辑的控件。可以在线新建文档、修改文档
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				if(!spDoc)
					break;
				if(4 == vbool){
					spDoc->AcceptAllRevisions();
				}else{
					spDoc->put_TrackRevisions( vbool );
				}
				spDoc.Release();
				
				/*_Document doc;
				doc.AttachDispatch(lDisp); 
				doc.SetTrackRevisions (vbool);
				doc.DetachDispatch();
				doc.ReleaseDispatch ();	*/
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
				
				
			}
			break;
		case FILE_TYPE_PPT:
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
			break;
		}
	}catch(...){
		
	}
	*pbool = TRUE; 
	return S_OK;
}


STDMETHODIMP CDsoFramerControl::SetCurrTime( BSTR strValue,   VARIANT_BOOL* pbool)
{
	* pbool = FALSE;
	char * pTemp1 = NULL;
	LPWSTR  pwTemp1;
	if ((strValue) && (SysStringLen(strValue) > 0)){
		pwTemp1 = SysAllocString(strValue);
		pTemp1 = DsoConvertToMBCS(pwTemp1);
	}	
    if(!pTemp1){
		return S_OK;
	}
	char cTime[256];
	strcpy(cTime,pTemp1);
	if(pTemp1)	DsoMemFree((void*)(pTemp1));
	
	SYSTEMTIME tm;
	char *pPos = NULL;
	pTemp1 = cTime;
	BOOL bOK = FALSE;
	::GetLocalTime(&tm);
	try{
		do{
			pPos = strchr(pTemp1,'-');
			if(!pPos)
				break;
			*pPos++ = 0;
			tm.wYear = atol(pTemp1);
			
			pTemp1 = pPos;	
			pPos = strchr(pTemp1,'-');
			if(!pPos)
				break;
			*pPos++ = 0;
			tm.wMonth  = atol(pTemp1);
			
			pTemp1 = pPos;	
			pPos = strchr(pTemp1,' ');
			if(!pPos)
				break;
			*pPos++ = 0;
			tm.wDay  = atol(pTemp1);
			
			pTemp1 = pPos;	
			while(*pTemp1 == ' ') pTemp1++;
			tm.wHour   = atol(pTemp1) ;
			//			if(tm.wHour < 8)
			//				tm.wHour +=24;
			
			pTemp1 = pPos;	
			pPos = strchr(pTemp1,':');
			if(!pPos)
				break;
			pTemp1 = pPos + 1;
			pPos = strchr(pTemp1,':');
			if(!pPos)
				break;
			*pPos++ = 0;
			tm.wMinute   = atol(pTemp1);
			
			tm.wSecond  = atol(pPos);
			bOK = TRUE;
			
		}while(0);
	}catch(...){
		
	}
	if(bOK) 
		if(::SetLocalTime(&tm))
			* pbool = TRUE;
		
		return S_OK;
}
//Http Interface

#import "C:\WINDOWS\system32\msxml3.dll"
using namespace MSXML2;

BSTR  HttpSend(XMLHttpClient *pHttp, LPCTSTR szURL, DWORD *dwError)
{
 	BSTR bstrString = NULL;
	IXMLHTTPRequestPtr pIXMLHTTPRequest = NULL;
 	HRESULT hr;
	PBYTE pPostBuffer=NULL;
	DWORD dwPostBufferLength=pHttp->AllocMultiPartsFormData(pPostBuffer, "--MULTI-PARTS-FORM-DATA-BOUNDARY");
	try {
		hr=pIXMLHTTPRequest.CreateInstance("Msxml2.XMLHTTP.3.0");
		SUCCEEDED(hr) ? 0 : throw hr;

		hr=pIXMLHTTPRequest->open("POST", szURL, false);
		SUCCEEDED(hr) ? 0 : throw hr;

		CONST TCHAR *szAcceptType=__HTTP_ACCEPT_TYPE;	
		LPCTSTR szContentType=TEXT("Content-Type: multipart/form-data; boundary=--MULTI-PARTS-FORM-DATA-BOUNDARY\r\n");		


		
		VARIANT vt1;
		VARIANT *pbsSendBinary  = &vt1;
		pbsSendBinary->vt = VT_ARRAY | VT_UI1;
		V_ARRAY(pbsSendBinary) = NULL;
		LPSAFEARRAY psaFile;
		psaFile = ::SafeArrayCreateVector( VT_UI1 , 0, dwPostBufferLength );
		for( long k = 0; k < dwPostBufferLength; k++ )
		{
			if( FAILED(::SafeArrayPutElement( psaFile, &k, &pPostBuffer[k] )) )
			{
 
 				throw hr;
			}
		}

		pbsSendBinary->vt = VT_ARRAY | VT_UI1;
		V_ARRAY(pbsSendBinary) = psaFile;


		hr=pIXMLHTTPRequest->send(pbsSendBinary);
		SUCCEEDED(hr) ? 0 : throw hr;

		bstrString=pIXMLHTTPRequest->responseText;
 
		pHttp->FreeMultiPartsFormData(pPostBuffer);
	} catch (...) {
		pHttp->FreeMultiPartsFormData(pPostBuffer);
	}
 
	return bstrString;
}
STDMETHODIMP CDsoFramerControl::HttpInit(VARIANT_BOOL* pbool)
{
	if(m_pHttp){
		delete m_pHttp;
		m_pHttp = NULL;
	}
 	m_pHttp= new XMLHttpClient();

	m_pHttp->InitilizePostArguments();
	* pbool = TRUE;
	return S_OK;
}


STDMETHODIMP CDsoFramerControl::HttpAddPostCurrFile(BSTR strFileID,BSTR strFileName, VARIANT_BOOL* pbool)
{
	char * pTemp1 = NULL;
	LPWSTR  pwTemp1;
	if ((strFileID) && (SysStringLen(strFileID) > 0)){
		pwTemp1 = SysAllocString(strFileID);
		pTemp1 = DsoConvertToMBCS(pwTemp1);
	}	
	
	char * pTemp2 = NULL; 
	LPWSTR  pwTemp2;
	if ((strFileName) && (SysStringLen(strFileName) > 0)){
		pwTemp2 = SysAllocString(strFileName);
		pTemp2 = DsoConvertToMBCS(pwTemp2);
	}	
	
	if(!m_pHttp){
		if(pTemp2)	DsoMemFree((void*)(pTemp2));
		if(pTemp1)	DsoMemFree((void*)(pTemp1));
		*pbool = FALSE;
		return 0;
	}
	IDispatch * lDisp;
    get_ActiveDocument(&lDisp);
	if(!lDisp){
		if(pTemp2)	DsoMemFree((void*)(pTemp2));
		if(pTemp1)	DsoMemFree((void*)(pTemp1));
		*pbool = FALSE;
		return S_OK;
	}
	COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	char cPath2[MAX_PATH];
	::GetTempPath(MAX_PATH, cPath2);
	strcat(cPath2,"DSOWebOffice");
	if (CreateDirectory(cPath2, NULL) || GetLastError() == ERROR_ALREADY_EXISTS)
	{
		lstrcat(cPath2, "\\");
	}
	::GetTempFileName(cPath2, "~dso", 0, cPath2);
	::DeleteFile(cPath2);

	try{
		switch(m_nOriginalFileType){
		case FILE_TYPE_WORD:
			{	
				CComQIPtr<MSWord::_Document> spDoc(lDisp);
				if(!spDoc)
					break;
				spDoc->SaveAs(COleVariant(cPath2));
				spDoc.Release();
			}
			break;
		case FILE_TYPE_EXCEL:
			{	
				CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);
				if(!spDoc)
					break;	
 				spDoc->SaveAs(COleVariant(cPath2), vtMissing, 
						COleVariant(m_cPassWord), COleVariant(m_cPWWrite), vtMissing, vtMissing, (MSExcel::XlSaveAsAccessMode)1);						
 				spDoc.Release();
				
			}
			break;
		case FILE_TYPE_PPT:
			{
				CComQIPtr<MSPPT::_Presentation> spDoc(lDisp);
 				if(!spDoc)
				break;
				spDoc->SaveAs(_bstr_t(cPath2), ppSaveAsPresentation, msoTrue);
				spDoc.Release();
			}
			break;
		case FILE_TYPE_PDF:
		case FILE_TYPE_UNK:
		default:
			break;
		}
	}catch(...){
		
	}
	
	char cPath[MAX_PATH];
	::GetTempPath(MAX_PATH, cPath);
	strcat(cPath,"DSOWebOffice");
	if (CreateDirectory(cPath, NULL) || GetLastError() == ERROR_ALREADY_EXISTS)
	{
		lstrcat(cPath, "\\");
	} 	
	if(!pTemp2){
		::GetTempFileName(cPath, "", 0, cPath);
		strcat(cPath,"Test.doc");
	}else{
		strcat(cPath, pTemp2);
	}
	
	FILE *fp = fopen(cPath,"r");
	if(fp){
		fclose(fp);
		if(!::DeleteFile (cPath)){
			::GetTempPath(MAX_PATH, cPath);
			strcat(cPath,"DSOWebOffice");

			
			if (CreateDirectory(cPath, NULL) || GetLastError() == ERROR_ALREADY_EXISTS)
			{
				lstrcat(cPath, "\\");
			}

			::GetTempFileName(cPath, "", 0, cPath);
			strcat(cPath,"test001.doc");
		}
	}
 	::CopyFile(cPath2,cPath,TRUE);
 	
	if(!pTemp1)
		m_pHttp->AddPostArguments("FileData", cPath, TRUE);
	else
		m_pHttp->AddPostArguments(pTemp1, cPath, TRUE);
	
	*pbool = TRUE;
	if(pTemp2)	DsoMemFree((void*)(pTemp2));
	if(pTemp1)	DsoMemFree((void*)(pTemp1));
	return S_OK; 
}
STDMETHODIMP CDsoFramerControl::HttpAddPostFile(BSTR strFileID,  BSTR strFileName,  long* pbool)
{
	char * pTemp1 = NULL;
	LPWSTR  pwTemp1;
	if ((strFileID) && (SysStringLen(strFileID) > 0)){
		pwTemp1 = SysAllocString(strFileID);
		pTemp1 = DsoConvertToMBCS(pwTemp1);
	}	
	
	char * pTemp2 = NULL; 
	LPWSTR  pwTemp2;
	if ((strFileName) && (SysStringLen(strFileName) > 0)){
		pwTemp2 = SysAllocString(strFileName);
		pTemp2 = DsoConvertToMBCS(pwTemp2);
	}	
	if(!pTemp1)
		m_pHttp->AddPostArguments("FileData", pTemp2, TRUE);
	else
		m_pHttp->AddPostArguments(pTemp1, pTemp2, TRUE);
	
	*pbool = TRUE;	
	if(pTemp2)	DsoMemFree((void*)(pTemp2));
	if(pTemp1)	DsoMemFree((void*)(pTemp1));
	return S_OK;
} 
STDMETHODIMP CDsoFramerControl::HttpAddPostString(BSTR strName, BSTR strValue, VARIANT_BOOL* pbool)
{
	if(!m_pHttp){
		* pbool = FALSE;
		return 0;
	}
	char * pstrNameTemp1 = NULL;
	LPWSTR  pstrNameTemp2;
	if ((strName) && (SysStringLen(strName) > 0)){
		pstrNameTemp2 = SysAllocString(strName);
		pstrNameTemp1 = DsoConvertToMBCS(pstrNameTemp2);
	}	
	if(!pstrNameTemp1){
		*pbool = FALSE;
		return S_OK;
	}
	char * pstrValueTemp1 = NULL;
	LPWSTR  pstrValueTemp2;
	if ((strValue) && (SysStringLen(strValue) > 0)){
		pstrValueTemp2 = SysAllocString(strValue);
		pstrValueTemp1 = DsoConvertToMBCS(pstrValueTemp2);
	}	
	if(!pstrValueTemp1){
		DsoMemFree((void*)(pstrNameTemp1));
		*pbool = FALSE;
		return S_OK;
	}
	m_pHttp->AddPostArguments(pstrNameTemp1, pstrValueTemp1, FALSE);
	DsoMemFree((void*)(pstrValueTemp1));
	DsoMemFree((void*)(pstrNameTemp1));
	* pbool = TRUE;
	return S_OK; 

}
/*
	HttpPost上传动作。
	如调用此接口,ocx名称必须为dsoframer.ocx
*/
STDMETHODIMP CDsoFramerControl::HttpPost(BSTR bstr,BSTR* pRet)
{

	// Ask doc object site for the source name...
	if(!m_pHttp){
		* pRet = NULL;
		return S_OK;
	}
	char * pstrNameTemp1 = NULL;
	LPWSTR  pstrNameTemp2;
	if ((bstr) && (SysStringLen(bstr) > 0)){
		pstrNameTemp2 = SysAllocString(bstr);
		pstrNameTemp1 = DsoConvertToMBCS(pstrNameTemp2);
	}	

	if(!pstrNameTemp1 || !pstrNameTemp1[0]){
		delete m_pHttp;
		m_pHttp = NULL;
		* pRet = NULL;
		return S_OK;
	}	
	
	CString strResult;
	DWORD dwRet = 0;
	

	char cHttpURL[1024];
	cHttpURL[0] = 0;
	if(m_cUrl && strlen(m_cUrl)<900){
		if(strncmp(pstrNameTemp1, "/", 1) == 0){		
			 strcpy(cHttpURL,m_cUrl);
			 char * p = strrchr(cHttpURL,'/');
			 if(p) *p = 0;
			 strcat(cHttpURL,pstrNameTemp1); 
		}else if(strncmp(pstrNameTemp1, "./", 2) == 0){  
			 strcpy(cHttpURL,m_cUrl);
			 char * p = strrchr(cHttpURL,'/');
			 if(p) *p = 0;
			 strcat(cHttpURL,&pstrNameTemp1[1]);  
		}else if(strncmp(pstrNameTemp1, "../", 3) == 0){ //
			 strcpy(cHttpURL,m_cUrl);
			 char * p = strrchr(cHttpURL,'/');
			 if(++p) *p = 0;
			 strcat(cHttpURL,pstrNameTemp1);  
		}else{
			strcpy(cHttpURL,pstrNameTemp1);
		}
		DsoMemFree((void*)(pstrNameTemp1));
		pstrNameTemp1 = NULL;
	}
 
	BSTR bstrString = NULL;
	HRESULT hr;
	char *pcBmp = NULL;
	PBYTE pPostBuffer=NULL;
	DWORD dwPostBufferLength=m_pHttp->AllocMultiPartsFormData(pPostBuffer, "--MULTI-PARTS-FORM-DATA-BOUNDARY");
	VARIANT vt;
	if(m_pHttp->GetHttpPost(pPostBuffer,dwPostBufferLength,&vt)){
		try {
				IXMLHTTPRequestPtr pIXMLHTTPRequest = NULL;
				hr=pIXMLHTTPRequest.CreateInstance("Msxml2.XMLHTTP.3.0");
				SUCCEEDED(hr) ? 0 : throw hr;
				if(pstrNameTemp1){
					hr=pIXMLHTTPRequest->open("POST", pstrNameTemp1, false);
				}else{
					hr=pIXMLHTTPRequest->open("POST", cHttpURL, false);
				}

				SUCCEEDED(hr) ? 0 : throw hr;
				
				pIXMLHTTPRequest->setRequestHeader("Content-Type","multipart/form-data; boundary=--MULTI-PARTS-FORM-DATA-BOUNDARY"); 
				

				hr=pIXMLHTTPRequest->send(vt);
				if(SUCCEEDED(hr)){
 					bstrString=pIXMLHTTPRequest->responseText;
					* pRet = bstrString;
				}
				pIXMLHTTPRequest.Release();
				pIXMLHTTPRequest = NULL;
		}catch(...){
			* pRet = NULL;
		}
	}else{
		* pRet = NULL;
	}
	m_pHttp->FreeMultiPartsFormData(pPostBuffer);
	delete m_pHttp;
	m_pHttp = NULL;
	if(pstrNameTemp1)	DsoMemFree((void*)(pstrNameTemp1));
  	return S_OK; 
}
STDMETHODIMP CDsoFramerControl::FtpConnect(BSTR strURL,long lPort, BSTR strUser, BSTR strPwd, long * pbool)
{
 	if(!strURL||strURL[0] ==0)
		return S_OK; 	
	if(!m_pSession){
		m_pSession =  new CInternetSession("DSO");
	}
	if(!m_pSession){
		* pbool = 0;
		return S_OK; 
	}
	try{
 
		m_pFtpConnection = m_pSession->GetFtpConnection((const char *)strURL,
			(const char *)strUser,(const char *)strPwd,lPort);//INTERNET_INVALID_PORT_NUMBER);
		m_bConnect = TRUE;
	return S_OK; 	
	}catch(CInternetException *pEx){
		//pEx->ReportError(MB_ICONEXCLAMATION);
		m_bConnect = FALSE;
		m_pFtpConnection = NULL;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -