將doc文件批量轉爲pdf文件



需要將不少doc文件轉爲pdf,WPS帶有這種功能,但是鼠標點擊次數太多以後整個人都變得很煩躁

用了一下午去搜這方面的工具軟件,找到若干。有一些免費,有一些試用的,但總歸就找到一個真正能用,雖說生成的文件名中有未授權字樣,但批量修改文件名簡單多了。

誰知道到了實驗室的電腦上因爲什麼打印機錯誤,還是不能用!

於是決定自己寫一個,

第二天上午開始搜資料,亂搜一陣,居然發現WPS有二次開發的功能,大喜

但是,沒有C++開發接口的資料,而且官方論壇的C++例子是針對老版本的。

於是參考別人寫的C#和VB的例子,在那摸索一陣,總算完事。

  1. void CTestDocDlg::OnBnClickedButton1()  
  2. {  
  3.     _beginthreadex(NULL, 0, convertThread, this, 0, NULL);  
  4.     //StartConvert(m_FileSrc);  
  5. }  
  6.   
  7.   
  8. void CTestDocDlg::OnBnClickedButton2()  
  9. {  
  10.     // TODO: 在此添加控件通知處理程序代碼  
  11.   
  12.     TCHAR Buffer[MAX_PATH];  
  13.     BROWSEINFO bi;  
  14.     ZeroMemory(&bi, sizeof(BROWSEINFO));  
  15.     bi.hwndOwner = m_hWnd;  
  16.     bi.ulFlags = BIF_RETURNONLYFSDIRS ;    //要求返回文件系統的目錄  
  17.   
  18.     bi.pszDisplayName = Buffer;            //此參數如爲NULL則不能顯示對話框  
  19.     bi.lpszTitle = _T("請選擇文件夾");  
  20.     bi.lpfn = NULL;  
  21.     bi.iImage=IDR_MAINFRAME;  
  22.       
  23.     LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//調用顯示選擇對話框  
  24.     if(pIDList)  
  25.     {  
  26.         SHGetPathFromIDList(pIDList, Buffer);  
  27.         //取得文件夾路徑到Buffer裏  
  28.         UpdateData(FALSE);  
  29.   
  30.         m_FileSrc = Buffer;//將文件夾路徑保存在一個CString對象裏  
  31.         if(m_FileSrc != "" && m_FileSrc.GetAt(m_FileSrc.GetLength() - 1) != '\\')  
  32.             m_FileSrc += "\\";  
  33.         m_destPath.SetWindowText(m_FileSrc);  
  34.   
  35.   
  36.     }  
  37.     else  
  38.     {  
  39.   
  40.     }  
  41. }  
  42.   
  43. int CTestDocDlg::StartConvert(CString path)  
  44. {  
  45.     CFileFind fileFinder;  
  46.     CString filePth = path + _T("*.doc");  
  47.   
  48.     BOOL bFinished = fileFinder.FindFile(filePth);  
  49.   
  50.     // 先蒐集文件信息,保存起來,再集中處理!  
  51.     while(bFinished)  
  52.     {  
  53.         bFinished = fileFinder.FindNextFile();  
  54.         CString fileName = fileFinder.GetFileName();  
  55.         AddFileInfo(fileName.GetBuffer(0));  
  56.         //ConvertFile(path + fileName);   
  57.     }  
  58.     fileFinder.Close();  
  59.   
  60.     std::vector<std::string>::iterator theIter;  
  61.     for(theIter  = m_vecFileName.begin(); theIter != m_vecFileName.end(); theIter++)  
  62.     {  
  63.         ConvertFile(path + theIter->c_str());  
  64.     }  
  65.   
  66.     return 0;  
  67. }  
  68.   
  69. int CTestDocDlg::ConvertFile(CString szFileName)  
  70. {  
  71.     CApplication app;  
  72.     app.CreateDispatch("WPS.APPLICATION");  
  73.     //app.SetVisible(TRUE);  
  74.     //app.doc  
  75.     app.put_Visible(FALSE);  
  76.     CDocuments docs = app.get_Documents();  
  77.     CDocument0 doc = docs.Open(szFileName, FALSE, TRUE, FALSE, NULL, NULL, TRUE, NULL, NULL, 0, 0, FALSE, FALSE, 0, FALSE);  
  78.     CString pdfName = szFileName;  
  79.     pdfName.Replace("doc", _T("pdf"));  
  80.     doc.ExportPdf(pdfName, NULL, NULL);  
  81.     //docs.Close(NULL, NULL, NULL);  
  82.     //doc.Close(NULL, NULL, NULL);  
  83.     COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),  
  84.         vtTrue((short)TRUE),  
  85.         vtFalse((short)FALSE);  
  86.     doc.Close(vtFalse, vtOptional, vtOptional);  
  87.     return 0;  
  88. }  
  89.   
  90. unsigned int WINAPI CTestDocDlg::convertThread(void *pParam)  
  91. {  
  92.     CoInitialize(NULL);  
  93.     ((CTestDocDlg *)pParam)->ReadConvert();  
  94.     ::CoUninitialize();  
  95.     return 0;  
  96. }  
  97.   
  98. int CTestDocDlg::ReadConvert()  
  99. {  
  100.     StartConvert(m_FileSrc);  
  101.     return 0;  
  102. }  
  103.   
  104. void CTestDocDlg::AddFileInfo(CString strFileName)  
  105. {  
  106.     m_vecFileName.push_back(strFileName.GetBuffer(0));  
  107. }  
發佈了17 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章