📄 dsofprint.cpp
字号:
pEx->Delete();
return S_OK;
}
return S_OK;
}
STDMETHODIMP CDsoFramerControl::FtpGetFile(BSTR strRemoteFile, BSTR strLocalFile, long * pbool)
{
if(!m_pFtpConnection||!m_bConnect)return 0;
if(!strLocalFile||strLocalFile[0] ==0) return 0;
if(!strRemoteFile||strRemoteFile[0] ==0) return 0;
BOOL bUploaded = m_pFtpConnection->GetFile((const char *)strRemoteFile,(const char *)strLocalFile,
FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY,1);
return bUploaded?1:0; return S_OK;
}
STDMETHODIMP CDsoFramerControl::FtpPutFile(BSTR strLocalFile, BSTR strRemoteFile, long blOverWrite, long * pbool)
{
if(!m_pFtpConnection||!m_bConnect)return 0;
if(!strLocalFile||strLocalFile[0] ==0) return 0;
if(!strRemoteFile||strRemoteFile[0] ==0) return 0;
BOOL bUploaded = m_pFtpConnection->PutFile((const char *)strLocalFile,
(const char *)strRemoteFile,FTP_TRANSFER_TYPE_BINARY,1);
return bUploaded?1:0;
return S_OK;
}
STDMETHODIMP CDsoFramerControl::FtpDisConnect(long * pbool)
{
m_pFtpConnection->Close();
m_pFtpConnection = NULL;
m_bConnect = FALSE;
if(m_pSession){
delete m_pSession;
m_pSession = NULL;
}
* pbool = 1;
return S_OK;
}
STDMETHODIMP CDsoFramerControl::GetFieldValue(BSTR strFieldName, BSTR strCmdOrSheetName,BSTR* strValue)
{
IDispatch * lDisp;
get_ActiveDocument(&lDisp);
if(!lDisp){
return S_OK;
}
HRESULT hr;
USES_CONVERSION;
try{
switch(m_nOriginalFileType){
case FILE_TYPE_WORD:
{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
break;
CComPtr<MSWord::Bookmarks> pBkMarks = NULL;
CComPtr<MSWord::Bookmark> pBkMark = NULL;
CComPtr<MSWord::Range> pRange = NULL;
// CComPtr<MSWord::Selection> spSelection = NULL;
hr = spDoc->get_Bookmarks(&pBkMarks);
if(FAILED(hr)||(!pBkMarks)){
spDoc.Release();
return E_NOBOOKMARK;
}
pBkMark = pBkMarks->Item(COleVariant(W2A(strFieldName)));
if(!pBkMark)
return NULL;
hr = pBkMark->get_Range(&pRange);
if(FAILED(hr)||(!pRange))
return NULL;
hr = pRange->get_Text(strValue);
if(SUCCEEDED(hr)){
}
pRange.Release();
pBkMark.Release();
pBkMarks.Release();
spDoc.Release();
}
break;
case FILE_TYPE_EXCEL:
{
}
break;
case FILE_TYPE_PPT:
case FILE_TYPE_PDF:
case FILE_TYPE_UNK:
default:
break;
}
}catch(...){
}
return S_OK;
}
/*
//设置为红色
object.SetFieldValue("BookMarkName,"255","::SETCOLOR::");
//白色
object.SetFieldValue("BookMarkName,"16777215","::SETCOLOR::");
//获取颜色
var v = object.SetFieldValue("BookMarkName," ","::GETCOLOR::");
*/
STDMETHODIMP CDsoFramerControl::SetFieldValue(BSTR strFieldName, BSTR strValue,
BSTR strCmdOrSheetName,VARIANT_BOOL* pbool)
{
IDispatch * lDisp;
get_ActiveDocument(&lDisp);
if(!lDisp){
*pbool = FALSE;
return S_OK;
}
HRESULT hr;
USES_CONVERSION;
try{
switch(m_nOriginalFileType){
case FILE_TYPE_WORD:
{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
break;
CComPtr<MSWord::Bookmarks> pBkMarks = NULL;
CComPtr<MSWord::Bookmark> pBkMark = NULL;
CComPtr<MSWord::Range> pRange = NULL;
CComPtr<MSWord::Selection> spSelection = NULL;
hr = spDoc->get_Bookmarks(&pBkMarks);
if(FAILED(hr)||(!pBkMarks)){
spDoc.Release();
*pbool = FALSE;
return E_NOBOOKMARK;
}
if(0==wcsicmp(strCmdOrSheetName,L"::ADDMARK::")){
CComPtr<MSWord::_Application> spApp(spDoc->GetApplication());
hr = spApp->get_Selection(&spSelection);
if(FAILED(hr)||(!spSelection)) return E_UNKNOW;
hr = spSelection->get_Range(&pRange);
if(FAILED(hr)||(!pRange)) return E_UNKNOW;
VARIANT vt;
vt.vt = VT_DISPATCH;
vt.pdispVal = pRange;
//hr = pBkMarks->raw_Add(A2W(strFieldName),&vt,&pBkMark);
//if(FAILED(hr)||(!pBkMark)) return E_UNKNOW;
pBkMarks->Add(strFieldName,&vt);
pRange.Release();
spSelection.Release();
spApp.Release();
}else if(0==wcsicmp(strCmdOrSheetName,L"::SETCOLOR::")){
hr = pBkMarks->raw_Item(COleVariant(W2A(strFieldName)),&pBkMark);
if(FAILED(hr)) return E_UNKNOW;
hr = pBkMark->get_Range(&pRange);
if(pRange){
CComPtr<MSWord::_Font> pFont = NULL;
hr = pRange->get_Font(&pFont);
if(FAILED(hr)) return E_UNKNOW;
long iColor = atol(W2A(strValue));
pFont->PutColor((enum MSWord::WdColor)iColor);
pFont = NULL;
pRange = NULL;
}
pBkMark = NULL;
return 0;
}else if(0==wcsicmp(strCmdOrSheetName,L"::GETCOLOR::")){
hr = pBkMarks->raw_Item(COleVariant(W2A(strFieldName)),&pBkMark);
if(FAILED(hr)) return E_UNKNOW;
hr = pBkMark->get_Range(&pRange);
long iColor = 0;
if(pRange){
CComPtr<MSWord::_Font> pFont = NULL;
hr = pRange->get_Font(&pFont);
if(FAILED(hr)) return E_UNKNOW;
pFont->get_Color((enum MSWord::WdColor*)&iColor);
//pFont->PutColor((enum MSWord::WdColor)iColor);
pFont = NULL;
pRange = NULL;
return iColor;
}
pBkMark = NULL;
return E_UNKNOW;
}
else if(0==wcsicmp(strCmdOrSheetName,L"::DELMARK::")){
hr = pBkMarks->raw_Item(COleVariant(W2A(strFieldName)),&pBkMark);
if(FAILED(hr)) return E_UNKNOW;
hr = pBkMark->get_Range(&pRange);
if(pRange){
pRange->Delete();
pRange = NULL;
}
pBkMark->Delete();
pBkMark = NULL;
return 0;
}else if(0==wcsicmp(strCmdOrSheetName,L"::GETMARK::")){
hr = pBkMarks->raw_Item(COleVariant(W2A(strFieldName)),&pBkMark);
if(FAILED(hr)) return E_UNKNOW;
hr = pBkMark->get_Range(&pRange);
if(pRange){
pRange->Select();
pRange = NULL;
}
pBkMark = NULL;
return 0;
}
pBkMark = pBkMarks->Item(COleVariant(W2A(strFieldName)));
if(!pBkMark){
pBkMarks.Release();
spDoc.Release();
*pbool = FALSE;
return E_NOBOOKMARK;
}
hr = pBkMark->get_Range(&pRange);
if(FAILED(hr)||(!pRange)){
pBkMark.Release();
pBkMarks.Release();
spDoc.Release();
*pbool = FALSE;
return E_NOBOOKMARK;
}
if(0==wcsicmp((strCmdOrSheetName),L"::FILE::")){
//pRange->InsertFile(strValue);
/////////////////////////////////////////////////
if(SUCCEEDED(hr)){
char szPath[MAX_PATH];
szPath[0] = 0;
FILE * fp = NULL;
char temp[1024];
UINT nBytesRead = 0;
if(_wcsnicmp(strValue, L"HTTP", 4) == 0 || _wcsnicmp(strValue, L"FTP", 3) == 0){
::GetTempPath(MAX_PATH, szPath);
strcat(szPath,"DSOWebOffice");
if (CreateDirectory(szPath, NULL) || GetLastError() == ERROR_ALREADY_EXISTS)
{
lstrcat(szPath, "\\");
}
::GetTempFileName(szPath, "", 0, szPath);
//theApp.GetTempFileName(szPath);
CInternetSession session("DSO");
CStdioFile * pFile = NULL;
pFile = session.OpenURL(W2A(strValue),0,
INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|
INTERNET_FLAG_DONT_CACHE);
if(!pFile){
return 0;
}
if((fp = fopen(szPath,"wb")) == NULL){
pFile->Close();
delete pFile;
return 0;
}
DWORD iLen = 0;
while(iLen = pFile->Read(temp, 1024)){
fwrite(temp, 1, iLen, fp);
fflush(fp);
}
fclose(fp);
if(pFile){
pFile->Close();
delete pFile;
}
pRange->InsertFile(szPath,&vtMissing,&vtMissing,&vtMissing,&vtMissing );
}else {
pRange->InsertFile(strValue,&vtMissing,&vtMissing,&vtMissing,&vtMissing );
}
}
////////////////////////////////////////////////////
}else if(0 == wcsnicmp((strCmdOrSheetName),L"::JPG::",7)){
CComPtr<MSWord::InlineShapes> spLineShapes = NULL;
CComPtr<MSWord::InlineShape> spInlineShape = NULL;
CComPtr<MSWord::Shape> spShape = NULL;
CComPtr<MSWord::WrapFormat> wrap = NULL;
hr = pRange->get_InlineShapes(&spLineShapes);
if(FAILED(hr)||(!pRange))
return E_UNKNOW;
hr = spLineShapes->raw_AddPicture(strValue,&vtMissing,&vtMissing,&vtMissing,&spInlineShape);
if(pRange){
spInlineShape->raw_ConvertToShape(&spShape);
if(spShape){
hr = spShape->get_WrapFormat(&wrap);
char * p = BSTR2char(strCmdOrSheetName);
char *p1 = p;
p += 7;
if(p){
wrap->put_Type((MSWord::WdWrapType)atol(p));
}else{
wrap->put_Type((MSWord::WdWrapType)5);
}
if(p1) free(p1);
wrap->put_AllowOverlap(-1);
wrap = NULL;
}
spShape = NULL;
}
spLineShapes = NULL;
spInlineShape = NULL;
}else{
pRange->Select();
if(FAILED(hr)||(!pRange))
return E_UNKNOW;
pRange->Text = strValue;
VARIANT vt;
vt.vt = VT_DISPATCH;
vt.pdispVal = pRange;
pBkMarks->Add(strFieldName,&vt);
//pBkMarks->raw_Add(A2W(strFieldName),&pRange,&pBkMark);
pRange->MoveStart();
}
pRange.Release();
pBkMark.Release();
pBkMarks.Release();
spDoc.Release();
}
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;
}
/*--------------------------ProDoc--------------------------
lProOrUn:1,保护文档,0,解保护文档
lProType: 保护类型,
wdNoProtection = -1,
wdAllowOnlyRevisions = 0,
wdAllowOnlyComments = 1,
wdAllowOnlyFormFields = 2
strProPWD:保护密码
------------------------------------------------------------*/
STDMETHODIMP CDsoFramerControl::ProtectDoc(long lProOrUn,long lProType, BSTR strProPWD, VARIANT_BOOL * pbool)
{
IDispatch * lDisp;
get_ActiveDocument(&lDisp);
if(!lDisp){
*pbool = FALSE;
return S_OK;
}
HRESULT hr;
USES_CONVERSION;
try{
switch(m_nOriginalFileType){
case FILE_TYPE_WORD:
{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
break;
if(0 == lProOrUn){
spDoc->Unprotect(COleVariant(W2A(strProPWD)));
}else{
spDoc->Protect((MSWord::WdProtectionType)lProType,&vtMissing,COleVariant(W2A(strProPWD)));
}
spDoc.Release();
}
break;
case FILE_TYPE_EXCEL:
{
if(0 == lProOrUn){
CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);
if(!spDoc)
break;
CComPtr<MSExcel::Sheets> spSheets;
CComQIPtr<MSExcel::_Worksheet> spSheet;
_variant_t vtPwd(strProPWD);
hr = spDoc->get_Worksheets(&spSheets);
if((FAILED(hr))||(!spSheets))
return E_NOSHEET;
long lCount = spSheets->GetCount();
while(lCount){
_variant_t vt(lCount);
spSheet = spSheets->GetItem(vt);
if(!spSheets)
return E_NOSHEET;
spSheet->Unprotect(vtPwd);
spSheet = (MSExcel::_Worksheet *)NULL;
lCount--;
}
}else{
CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);
if(!spDoc)
break;
CComPtr<MSExcel::Sheets> spSheets;
CComQIPtr<MSExcel::_Worksheet> spSheet;
_variant_t vtPwd(strProPWD);
hr = spDoc->get_Worksheets(&spSheets);
if((FAILED(hr))||(!spSheets))
return E_NOSHEET;
long lCount = spSheets->GetCount();
while(lCount){
_variant_t vt(lCount);
spSheet = spSheets->GetItem(vt);
if(!spSheets)
return E_NOSHEET;
spSheet->Protect(vtPwd);
spSheet = (MSExcel::_Worksheet *)NULL;
lCount--;
}
}
}
break;
case FILE_TYPE_PPT:
case FILE_TYPE_PDF:
case FILE_TYPE_UNK:
default:
break;
}
}catch(...){
}
*pbool = TRUE;
return S_OK;
}
STDMETHODIMP CDsoFramerControl::SetMenuDisplay(long lMenuFlag, VARIANT_BOOL* pbool)
{
/*
#define MNU_NEW 0x01
#define MNU_OPEN 0x02
#define MNU_CLOSE 0x04
#define MNU_SAVE 0x08
#define MNU_SAVEAS 0x16
#define MNU_HONGTOU 0x512
#define MNU_PGSETUP 0x64
#define MNU_PRINT 0x256
#define MNU_PROPS 0x32
#define MNU_PRINTPV 0x128
*/
m_wFileMenuFlags = lMenuFlag;
* pbool = TRUE;
return S_OK;
}
STDMETHODIMP CDsoFramerControl::ShowRevisions(long nNewValue, VARIANT_BOOL* pbool)
{
IDispatch * lDisp;
get_ActiveDocument(&lDisp);
if(!lDisp){
*pbool = FALSE;
return S_OK;
}
HRESULT hr;
USES_CONVERSION;
try{
switch(m_nOriginalFileType){
case FILE_TYPE_WORD:
{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
break;
spDoc->ShowRevisions = nNewValue;
spDoc.Release();
}
break;
case FILE_TYPE_EXCEL:
{
CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);
if(!spDoc)
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -