需要将不少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. void CTestDocDlg::OnBnClickedButton2()
  7. {
  8. // TODO: 在此添加控件通知处理程序代码
  9. TCHAR Buffer[MAX_PATH];
  10. BROWSEINFO bi;
  11. ZeroMemory(&bi, sizeof(BROWSEINFO));
  12. bi.hwndOwner = m_hWnd;
  13. bi.ulFlags = BIF_RETURNONLYFSDIRS ;    //要求返回文件系统的目录
  14. bi.pszDisplayName = Buffer;            //此参数如为NULL则不能显示对话框
  15. bi.lpszTitle = _T("请选择文件夹");
  16. bi.lpfn = NULL;
  17. bi.iImage=IDR_MAINFRAME;
  18. LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//调用显示选择对话框
  19. if(pIDList)
  20. {
  21. SHGetPathFromIDList(pIDList, Buffer);
  22. //取得文件夹路径到Buffer里
  23. UpdateData(FALSE);
  24. m_FileSrc = Buffer;//将文件夹路径保存在一个CString对象里
  25. if(m_FileSrc != "" && m_FileSrc.GetAt(m_FileSrc.GetLength() - 1) != '\\')
  26. m_FileSrc += "\\";
  27. m_destPath.SetWindowText(m_FileSrc);
  28. }
  29. else
  30. {
  31. }
  32. }
  33. int CTestDocDlg::StartConvert(CString path)
  34. {
  35. CFileFind fileFinder;
  36. CString filePth = path + _T("*.doc");
  37. BOOL bFinished = fileFinder.FindFile(filePth);
  38. // 先搜集文件信息,保存起来,再集中处理!
  39. while(bFinished)
  40. {
  41. bFinished = fileFinder.FindNextFile();
  42. CString fileName = fileFinder.GetFileName();
  43. AddFileInfo(fileName.GetBuffer(0));
  44. //ConvertFile(path + fileName);
  45. }
  46. fileFinder.Close();
  47. std::vector<std::string>::iterator theIter;
  48. for(theIter  = m_vecFileName.begin(); theIter != m_vecFileName.end(); theIter++)
  49. {
  50. ConvertFile(path + theIter->c_str());
  51. }
  52. return 0;
  53. }
  54. int CTestDocDlg::ConvertFile(CString szFileName)
  55. {
  56. CApplication app;
  57. app.CreateDispatch("WPS.APPLICATION");
  58. //app.SetVisible(TRUE);
  59. //app.doc
  60. app.put_Visible(FALSE);
  61. CDocuments docs = app.get_Documents();
  62. CDocument0 doc = docs.Open(szFileName, FALSE, TRUE, FALSE, NULL, NULL, TRUE, NULL, NULL, 0, 0, FALSE, FALSE, 0, FALSE);
  63. CString pdfName = szFileName;
  64. pdfName.Replace("doc", _T("pdf"));
  65. doc.ExportPdf(pdfName, NULL, NULL);
  66. //docs.Close(NULL, NULL, NULL);
  67. //doc.Close(NULL, NULL, NULL);
  68. COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR),
  69. vtTrue((short)TRUE),
  70. vtFalse((short)FALSE);
  71. doc.Close(vtFalse, vtOptional, vtOptional);
  72. return 0;
  73. }
  74. unsigned int WINAPI CTestDocDlg::convertThread(void *pParam)
  75. {
  76. CoInitialize(NULL);
  77. ((CTestDocDlg *)pParam)->ReadConvert();
  78. ::CoUninitialize();
  79. return 0;
  80. }
  81. int CTestDocDlg::ReadConvert()
  82. {
  83. StartConvert(m_FileSrc);
  84. return 0;
  85. }
  86. void CTestDocDlg::AddFileInfo(CString strFileName)
  87. {
  88. m_vecFileName.push_back(strFileName.GetBuffer(0));
  89. }

后面才知道原来C++版本的WPS二次开发,接口也是参考WORD的!!!

参考http://stackoverflow.com/questions/145573/creating-opening-and-printing-a-word-file-from-c

2014/03/22 10:32

总算是解决了文档关闭问题(转PDF)
不关闭的话,doc文件一直被占用,
但调用close函数总是失败,后面参考
http://support.microsoft.com/kb/220911/en-us
重新构造了close函数参数,总算是解决了
 
2014/03/22 11:05
把转换代码放在线程中打开文件总是失败,
后面线程总算是解决了,换了个初始化COM的函数,另外每个线程都要进行初始化!
原始是因为COM组件和线程的关联原因

将doc文件批量转为pdf文件的更多相关文章

  1. php 查询mysql数据批量转为PDF文件二(批量使用wkhtmltopdf html导出PDF)

    上节讲到配置wkhtmltopdf,这节讲下如何批量操作 首先讲下wkhtmltopdf如何使用 直接命令行输入: wkhtmltopdf http://www.baidu.com/  baidu.p ...

  2. php 查询mysql数据批量转为PDF文件一(mac使用配置wkhtmltopdf html导出PDF)

    数据转标准PDF查文档,查资料先转HTML标准格式再html转PDF 转PDF wkhtmltopdf工具是最佳选择 首先下载wkhtmltopdf https://wkhtmltopdf.org/d ...

  3. doc或docx(word)或image类型文件批量转PDF脚本

    doc或docx(word)或image类型文件批量转PDF脚本 1.实际生产环境中遇到文件展示只能适配PDF版本的文件,奈何一万个文件有七千个都是word或者image类型的,由此搞个脚本批量转换下 ...

  4. word批量转pdf文件快捷方法。

    最近在工作中因为要遇到大量的Word文件转化为PDF文件来实现平台的迁移.但是由于文件太多,手动很费力,想到了用代码的方式: 复制下面的代码,保存的记事本,另存为vbs文件:然后把这个vbs文件放到你 ...

  5. 怎样批量删除PDF文件中的注释

    日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释?   操作教程: ...

  6. 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】

    iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...

  7. 史上最强php生成pdf文件,html转pdf文件方法

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  8. 怎么编辑PDF文件内容,PDF文件编辑方法

    怎样编辑PDF文件内容?这是一个常常困扰我们的问题,工作当中我们经常会收到PDF格式的文件,但有时的文件内容不是我们想要的或者是觉得不合理的需要改掉.但是每次有这样的问题时都没有什么好的解决方法,每次 ...

  9. 将caj文件转化为pdf文件进行全文下载脚本(ubuntu下亲测有用)

    最近ubuntu下caj阅读器,突然崩掉了,而偏偏要准备开题,在网上搜索原因未果,准备放弃时候,突然在网上看到一个脚本,说是很好用,可以在指定页面将caj文件转化为pdf文件,亲测有用,这里直接给出脚 ...

随机推荐

  1. android_Activity之Button_OnClickListener

    今天我们要讲的主要是四大组件之一Activity 什么是Android 的四大组件呢?接下来简单了解下. 1.Activity  Activity就是我们应用程序的界面,主要用来跟我们的用户进行交互的 ...

  2. 极客DIY:使用树莓派制作一套“NAS+私有云盘+下载机”

    原创作者:HackLiu 0×00 前言 ‍ ‍ 如果你家里有多台设备需要联网需要娱乐,你一定会或多或少遇到设备碎片化带来的烦恼.当然,已经有很多厂商包括新晋的小米.360在内的互联网公司做了这个事情 ...

  3. Hdu OJ 5113 Black And White (2014ACM/ICPC亚洲区北京站) (搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5113 题目大意:有k种颜色的方块,每种颜色有ai个, 现在有n*m的矩阵, 问这k种颜色的方块能否使任 ...

  4. 缓存大全(Memcached、redis、RabbitMQ )

    Memcached: 简介.安装.使用 python操作Memcached Memcached天生支持集群 Redis: 简介.安装.使用.实例 Python操作Redis String.Hash.L ...

  5. SQL中的循环、for循环、游标

    我们使用SQL语句处理数据时,可能会碰到一些需要循环遍历某个表并对其进行相应的操作(添加.修改.删除),这时我们就需要用到咱们在编程中常常用的for或foreach,但是在SQL中写循环往往显得那么吃 ...

  6. Struts2的值栈和对象栈

    ValueStack 如何得到值栈: 如何将对象存入值栈: 让值栈执行表达式来获得值: 在JSP中跳过栈顶元素直接访问第二层: 在JSP中访问值栈对象本身(而不是它们的属性) ActionContex ...

  7. 再见Unity3d的死循环

    前两天看见http://www.manew.com/thread-89909-1-1.html这篇译文之前几个小时刚好解决了一个莫名的死循环问题,然后忍不住要把另外一种方法告诉蛮友们.这个方法不需要知 ...

  8. jsp 和jspf

    http://www.cnblogs.com/liaojie970/p/5035077.html

  9. Html.DropDownList 选中 mvc view 弱类型

    List<Model.SysGroup> listGroup = sysGroupBll.Where(o => o.IsSb == true, o => o.Id).ToLis ...

  10. SQL语言和DML相关操作以及相应的运算符

    SQL 1.结构化查询语言 2.特点 a.第四代编程语言,更接近自然语言 b必须有数据库系统解释执行 c.对象名,关键字不区分大小写 d.字符串必须要用单引号引起来,不能用双引号 e.每条语句最后用分 ...