📄 dsofprint.cpp
字号:
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 + -