📄 dsofprint.cpp
字号:
* pbool = 0;
try{
switch(m_nOriginalFileType){
case FILE_TYPE_WORD:
{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
break;
CComPtr<MSWord::Revisions> spRevs;
hr = spDoc->get_Revisions(&spRevs);
if((FAILED(hr))||(!spRevs)){
return S_OK;
}
*pbool = spRevs->GetCount();
spRevs.Release();
spDoc.Release();
}
break;
case FILE_TYPE_EXCEL:
{
}
break;
case FILE_TYPE_PPT:
{
}
break;
case FILE_TYPE_PDF:
case FILE_TYPE_UNK:
default:
break;
}
}catch(...){
* pbool = 0;
}
return S_OK;
}
/*
//根据Index返回具体的信息,lIndex为GetRev的结果,lType为参数标示
0;返回名字
1:返回时间
2:返回类型(删除|插入)
3:具体的数据
BSTR GetRevInfo(long lIndex ,long lType)
*/
STDMETHODIMP CDsoFramerControl::GetRevInfo(long lIndex, long lType, BSTR* pbool)
{
if(lType<0 || lType > 3)
return S_OK;
IDispatch * lDisp;
get_ActiveDocument(&lDisp);
if(!lDisp){
*pbool = NULL;
return S_OK;
}
HRESULT hr;
USES_CONVERSION;
* pbool = NULL;
CString strRet;
try{
switch(m_nOriginalFileType){
case FILE_TYPE_WORD:
{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
break;
CComPtr<MSWord::Revisions> spRevs;
CComPtr<MSWord::Revision> spRev;
hr = spDoc->get_Revisions(&spRevs);
if((FAILED(hr))||(!spRevs)){
return S_OK;
}
long dwCount = spRevs->GetCount();
int i = lIndex;
if(i < 1) i =1;
if(i > dwCount) i = dwCount;
hr = spRevs->raw_Item(i,&spRev);
if((FAILED(hr))||(!spRev)){
return S_OK;
}
if(lType == 0){
spRev->get_Author(pbool);
}else if(lType == 1){
double spDate = 0;
spRev->get_Date(&spDate);
COleDateTime dwTime(spDate);
strRet = dwTime.Format(_T("%Y-%m-%d %H:%M:%S"));
*pbool = strRet.AllocSysString();
}else if(lType == 2){
WdRevisionType dwType;
spRev->get_Type(&dwType);
strRet.Format("%d",dwType);
*pbool = strRet.AllocSysString();
}else if(lType == 3){
CComPtr<MSWord::Range> pRange = NULL;
spRev->get_Range(&pRange);
if((FAILED(hr))||(!pRange)){
return S_OK;
}
pRange->get_Text(pbool);
}
spRevs.Release();
spDoc.Release();
}
break;
case FILE_TYPE_EXCEL:
{
}
break;
case FILE_TYPE_PPT:
{
}
break;
case FILE_TYPE_PDF:
case FILE_TYPE_UNK:
default:
break;
}
}catch(...){
* pbool = NULL;
}
return S_OK;
}
/*
设置基本信息:
1.设置文件只读密码
SetValue("password","::DOCPROP:PassWord");
2.设置文件修改密码
SetValue("password","::DOCPROP:WritePW");
返回值:
0 正确
-1:不支持此命令,请确定您的第二个参数没有传错
-127:异常
*/
STDMETHODIMP CDsoFramerControl::SetValue(BSTR strValue, BSTR strName, long* pbool)
{
IDispatch * lDisp;
get_ActiveDocument(&lDisp);
if(!lDisp){
*pbool = NULL;
return S_OK;
}
HRESULT hr;
USES_CONVERSION;
* pbool = 0;
char *pValue = NULL;
char *pName = NULL;
pValue = BSTR2char(strValue);
pName = BSTR2char(strName);
try{
switch(m_nOriginalFileType){
case FILE_TYPE_WORD:
{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
break;
if(0 == strcmp(pName,"::DOCPROP:PassWord")){
spDoc->put_Password(strValue);
}else if(0 == strcmp(pName,"::DOCPROP:WritePW")){
spDoc->put_WritePassword(strValue);
}else{
* pbool = -1;
}
spDoc.Release();
}
break;
case FILE_TYPE_EXCEL:
{
CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);
if(!spDoc)
break;
if(0 == strcmp(pName,"::DOCPROP:PassWord")){
if(pValue)
strcpy(m_cPassWord,pValue);
}else if(0 == strcmp(pName,"::DOCPROP:WritePW")){
if(pValue)
strcpy(m_cPWWrite,pValue);
}else{
* pbool = -1;
}
}
break;
case FILE_TYPE_PPT:
{
}
break;
case FILE_TYPE_PDF:
case FILE_TYPE_UNK:
default:
break;
}
}catch(...){
* pbool = -127;
}
if(pValue) free(pValue);
if(pName) free(pName);
return S_OK;
}
/*
strVarName: 变量名
strVlaue:变量值
lOpt: 操作类型,
按位
第一位为1: 表示update域关联的
第二位为1: 表示如果没有这个变量则添加
第三位为1:
return:
0:OK
-127:异常
*/
STDMETHODIMP CDsoFramerControl::SetDocVariable(BSTR strVarName, BSTR strValue, long lOpt, long* pbool)
{
IDispatch * lDisp;
get_ActiveDocument(&lDisp);
if(!lDisp){
*pbool = NULL;
return S_OK;
}
HRESULT hr;
USES_CONVERSION;
* pbool = 0;
char *pValue = NULL;
pValue = BSTR2char(strValue);
try{
switch(m_nOriginalFileType){
case FILE_TYPE_WORD:
{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
break;
CComPtr<MSWord::Variables> spVars;
CComPtr<MSWord::Variable> spVar;
hr = spDoc->get_Variables(&spVars);
if(FAILED(hr)||(!spVars))
return NULL;
hr = spVars->raw_Item(&_variant_t(strVarName),&spVar);
if(FAILED(hr)){
if(lOpt & 0x02){
hr = spVars->raw_Add(strVarName,COleVariant(pValue), &spVar);
if(FAILED(hr)||(!spVar)){
* pbool = -127;
return S_OK;
}else if(!(lOpt & 0x01)){
* pbool = -127;
return S_OK;
}
}
}else{
spVar->put_Value(strValue);
}
if((lOpt & 0x01) && spVar){
CComPtr<MSWord::Fields> spFields;
CComPtr<MSWord::Field> spField;
hr = spDoc->get_Fields(&spFields);
if(FAILED(hr)||(!spFields)){
return S_OK;
}
long lCount;
hr = spFields->get_Count(&lCount);
if(FAILED(hr)|| 0 == lCount){
return S_OK;
}
for(int i = 1; i<= lCount; i++){
hr = spFields->raw_Item(i,&spField);
if(FAILED(hr)||(!spField)){
spField = NULL;
continue;
}
spField->Update();
spField = NULL;
}
spFields = NULL;
}
spVar = NULL;
spVars = NULL;
spDoc.Release();
}
break;
case FILE_TYPE_EXCEL:
{
CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);
if(!spDoc)
break;
}
break;
case FILE_TYPE_PPT:
{
}
break;
case FILE_TYPE_PDF:
case FILE_TYPE_UNK:
default:
break;
}
}catch(...){
* pbool = -127;
}
if(pValue) free(pValue);
return S_OK;
}
/*
lPageNum:
lType:
0:Word
1:JPG
2:Txt
3:Html
4:
Return:
-2:不支持的文件格式
-3:不支持的保存格式
-127: 异常
*/
STDMETHODIMP CDsoFramerControl::SetPageAs(BSTR strLocalFile, long lPageNum, long lType, long* pbool)
{
if(lType != 0){
* pbool = -3;
return S_OK;
}
if(m_nOriginalFileType != FILE_TYPE_WORD){
* pbool = -2;
return S_OK;
}
IDispatch * lDisp;
get_ActiveDocument(&lDisp);
if(!lDisp){
*pbool = NULL;
return S_OK;
}
HRESULT hr;
USES_CONVERSION;
* pbool = 0;
long lPage = lPageNum;
if(lPage<1)
lPage = 1;
try{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
return S_OK;
CComPtr<MSWord::_Application> spApp;
hr = spDoc->get_Application(&spApp);
if(FAILED(hr)||(!spApp)){
return S_OK;
}
CComPtr<MSWord::Selection> selection;
hr = spApp->get_Selection (&selection);
if(FAILED(hr))
return S_OK;
int nPageNum = 1;
VARIANT vnt;
selection->get_Information(wdNumberOfPagesInDocument, &vnt);
if( lPage > vnt.intVal)
lPage = vnt.intVal;
selection->GoTo(COleVariant((long)wdGoToPage), COleVariant((long)wdGoToAbsolute),
COleVariant((long)lPage));
while(1){
if(0 == selection->MoveEnd(COleVariant((long)1),COleVariant((long)1)))
break;
selection->get_Information(wdActiveEndPageNumber, &vnt);
if(lPage != vnt.intVal){
selection->MoveEnd(COleVariant((long)1),COleVariant((long)-1));
break;
}
}
hr = selection->Select();
selection->Copy();
selection->WholeStory();
selection->Delete();
selection->Paste();
VARIANT vt;
vt.vt = VT_BSTR;
vt.bstrVal = strLocalFile;
spDoc->SaveAs(&vt);
spDoc.Release();
}catch(...){
* pbool = -127;
}
return S_OK;
}
/*
替换文字
lGradation = 1 向后
= 0 向前
*/
STDMETHODIMP CDsoFramerControl::ReplaceText(BSTR strSearchText, BSTR strReplaceText, long lGradation, long* pbool)
{
IDispatch * lDisp;
get_ActiveDocument(&lDisp);
if(!lDisp){
*pbool = NULL;
return S_OK;
}
HRESULT hr;
USES_CONVERSION;
* pbool = 0;
try{
switch(m_nOriginalFileType){
case FILE_TYPE_WORD:
{
CComQIPtr<MSWord::_Document> spDoc(lDisp);
if(!spDoc)
return S_OK;
CComPtr<MSWord::_Application> spApp;
hr = spDoc->get_Application(&spApp);
if(FAILED(hr)||(!spApp)) return E_UNKNOW;
CComPtr<MSWord::Selection> spSelection = NULL;
hr = spApp->get_Selection(&spSelection);
if(FAILED(hr)||(!spSelection)) return E_UNKNOW;
if(1 == lGradation){
spSelection->HomeKey(COleVariant((long)6),COleVariant((long)0));
}else if(0 == lGradation){
spSelection->EndKey(COleVariant((long)6),COleVariant((long)0));
}
CComPtr<MSWord::Find> spFind = NULL;
hr = spSelection->get_Find(&spFind);
if(FAILED(hr)||(!spFind)) return E_UNKNOW;
spFind->ClearFormatting();
hr = spFind->put_Text(strSearchText);
if(FAILED(hr)) return E_UNKNOW;
VARIANT_BOOL vt(lGradation);
spFind->put_Forward(vt);
CComPtr<MSWord::Replacement> spReplace = NULL;
hr = spFind->get_Replacement(&spReplace);
if(FAILED(hr)||(!spReplace)) return E_UNKNOW;
spReplace->ClearFormatting();
spReplace->put_Text(strReplaceText);
spFind->Execute(&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,
&vtMissing,&vtMissing,&vtMissing,&vtMissing,&vtMissing,COleVariant((long)wdReplaceOne));
spReplace = NULL;
spFind = NULL;
spDoc.Release();
}
break;
case FILE_TYPE_EXCEL:
{
CComQIPtr<MSExcel::_Workbook> spDoc(lDisp);
if(!spDoc)
break;
}
break;
case FILE_TYPE_PPT:
{
}
break;
case FILE_TYPE_PDF:
case FILE_TYPE_UNK:
default:
break;
}
}catch(...){
* pbool = -127;
}
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -