c/c++常用代码---doc,ppt,xls文件格式转PDF格式[转]
[转]doc,ppt,xls文件格式转PDF格式
http://blog.csdn.net/lee353086/article/details/7920355
确实好用。
需要注意的是#import文件路径要和自己电脑上的文件路径对应
/* 功能: Office文件格式(docx、xlsx、pptx)转PDF格式文件 Author: Kagula by 2012-08-29 使用前提 [1]Office 2007(Word,Excel,PPT) [2]Office 2007导PDF插件 编译环境: [1]VS2008SP1 [2]WinXPSP3 */ #pragma warning(disable:4786) #import "C:\Program Files\Common Files\Microsoft Shared\Office12\mso.dll" \ rename("RGB","_OfficeRGB") #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" \ rename("Reference", "ignorethis") #import "C:\Program Files\Microsoft Office\Office12\msword.olb " \ rename("FindText","_FindText")\ rename("Rectangle","_Rectangle")\ rename("ExitWindows","_ExitWindows") #import "C:\Program Files\Microsoft Office\Office12\MSPPT.OLB" #import "c:\Program Files\Microsoft Office\Office12\EXCEL.exe" \ rename("DialogBox","_DialogBox") \ rename("RGB","_RGB") \ exclude("IFont","IPicture") #include <string> #include <iostream> int EXCEL2PDF(std::wstring inputFileName,std::wstring outputFileName) { HRESULT hr; ; Excel::_ApplicationPtr pApplication = NULL; Excel::_WorkbookPtr pThisWorkbook = NULL ; BSTR szBstrInputFileName; BSTR szBstrOutputFileName; szBstrInputFileName=SysAllocString(inputFileName.c_str()); szBstrOutputFileName=SysAllocString(outputFileName.c_str()); if (FAILED(pApplication.CreateInstance(__uuidof(Excel::Application)))) { wprintf(L"CreateInstance failed w/err 0x%08lx\n", hr); ; } try { pThisWorkbook = pApplication->GetWorkbooks()->Open(szBstrInputFileName); pThisWorkbook->ExportAsFixedFormat(Excel::XlFixedFormatType::xlTypePDF,szBstrOutputFileName); pThisWorkbook->Close(); pThisWorkbook.Release(); pThisWorkbook = NULL; }catch(...) { nR = ; } pApplication-> Quit(); pApplication.Release(); pApplication= NULL; return nR; } int PPT2PDF(std::wstring inputFileName,std::wstring outputFileName) { PowerPoint::_ApplicationPtr spPpApp; BSTR szBstrInputFileName; BSTR szBstrOutputFileName; BSTR szBstrEmpty; HRESULT hr; PowerPoint::PresentationsPtr spPres; PowerPoint::_PresentationPtr pPre; ; szBstrInputFileName=SysAllocString(inputFileName.c_str()); szBstrOutputFileName=SysAllocString(outputFileName.c_str()); szBstrEmpty=SysAllocString(L""); if (FAILED(spPpApp.CreateInstance(__uuidof(PowerPoint::Application)))) { wprintf(L"CreateInstance failed w/err 0x%08lx\n", hr); ; } spPres = spPpApp->Presentations; if(spPres==NULL) { nR = ; goto _RELEASE_APP; } try{ pPre = spPres->Open(szBstrInputFileName, Office::MsoTriState::msoTrue,Office::MsoTriState::msoFalse,Office::MsoTriState::msoFalse); if(pPre ==NULL) { nR = ; goto _RELEASE_APP; } pPre->ExportAsFixedFormat(szBstrOutputFileName,PowerPoint::PpFixedFormatType::ppFixedFormatTypePDF, PowerPoint::PpFixedFormatIntent::ppFixedFormatIntentPrint,Office::MsoTriState::msoTriStateMixed, PowerPoint::PpPrintHandoutOrder::ppPrintHandoutHorizontalFirst,PowerPoint::PpPrintOutputType::ppPrintOutputSlides, Office::MsoTriState::msoFalse,NULL,PowerPoint::PpPrintRangeType::ppPrintAll,szBstrEmpty, VARIANT_TRUE,VARIANT_FALSE,VARIANT_TRUE,VARIANT_TRUE,VARIANT_FALSE); pPre->Close(); pPre.Release(); pPre = NULL; }catch(...) { nR==; } _RELEASE_APP: spPpApp-> Quit(); spPpApp.Release(); spPpApp = NULL; return nR; } int Word2PDF(std::wstring inputFileName,std::wstring outputFileName) { ; Word::_ApplicationPtr pWordApp = NULL; Word::_DocumentPtr pDoc = NULL; HRESULT hr; BSTR szBstrOutputFileName; szBstrOutputFileName=SysAllocString(outputFileName.c_str()); hr = pWordApp.CreateInstance(__uuidof(Word::Application)); if(hr!=S_OK) { ; } Word::DocumentsPtr pDocs = NULL; pWordApp-> get_Documents(&pDocs); if(pDocs==NULL) { nR = ; goto _RELEASE_APP; } try { pDoc = pDocs->Open(&(_variant_t(inputFileName.c_str()))); if(pDoc==NULL) goto _RELEASE_APP; pDoc->ExportAsFixedFormat(szBstrOutputFileName,Word::WdExportFormat::wdExportFormatPDF,VARIANT_FALSE, Word::WdExportOptimizeFor::wdExportOptimizeForPrint,Word::WdExportRange::wdExportAllDocument,,, Word::WdExportItem::wdExportDocumentContent,VARIANT_TRUE,VARIANT_TRUE, Word::WdExportCreateBookmarks::wdExportCreateNoBookmarks,VARIANT_TRUE,VARIANT_TRUE,VARIANT_FALSE); pDoc-> Close(); pDoc.Release(); pDoc = NULL; }catch(...) { nR = ; } _RELEASE_APP: pWordApp-> Quit(); pWordApp.Release(); pWordApp = NULL; return nR; } int _tmain(int argc, _TCHAR* argv[]) { ; CoInitialize(NULL); std::wstring wsCmd; std::wstring wsS; std::wstring wsD; ) { std::cout<<"Command Usage: Office2PDF -[e|p|w] <source file name> <destination file name>"<<std::endl; std::cout<<" e.g.: Office2PDF -e myName.xlsx myName.pdf"<<std::endl; ; } wsCmd = argv[]; wsS = argv[]; wsD = argv[]; if(wsCmd==L"-e") nR = EXCEL2PDF(wsS.c_str(),wsD.c_str()); else if(wsCmd==L"-p") nR = PPT2PDF(wsS.c_str(),wsD.c_str()); else if(wsCmd==L"-w") nR = Word2PDF(wsS.c_str(),wsD.c_str()); CoUninitialize(); ) std::cout<<"Error:"<<nR<<std::endl; return nR; }
c/c++常用代码---doc,ppt,xls文件格式转PDF格式[转]的更多相关文章
- 文档资源搜索小工具 - 支持PDF,DOC,PPT,XLS
最近做了一个文档搜索小工具,当然不是网盘搜索工具,这个工具支持四种文件格式搜索(pdf,doc,ppt,xls),你只需要在搜索框中输入你想要搜索资源的关键词,点击搜索按钮即可获取相关资源,点击下载按 ...
- NSIS常用代码整理
原文 NSIS常用代码整理 这是一些常用的NSIS代码,少轻狂特意整理出来,方便大家随时查看使用.不定期更新哦~~~ 1 ;获取操作系统盘符 2 ReadEnvStr $R0 SYSTEMDRIVE ...
- XSS(跨站脚本攻击) - 常用代码大全
XSS(跨站脚本攻击) - 常用代码大全-版本一 1'"()&%<acx><ScRiPt >prompt(915149)</ScRiPt> < ...
- GCD 常用代码
GCD 常用代码 体验代码 异步执行任务 - (void)gcdDemo1 { // 1. 全局队列 dispatch_queue_t q = dispatch_get_global_queue(0, ...
- 转--Android实用的代码片段 常用代码总结
这篇文章主要介绍了Android实用的代码片段 常用代码总结,需要的朋友可以参考下 1:查看是否有存储卡插入 复制代码 代码如下: String status=Environment.getE ...
- 刀哥多线程之03GCD 常用代码
GCD 常用代码 体验代码 异步执行任务 - (void)gcdDemo1 { // 1. 全局队列 dispatch_queue_t q = dispatch_get_global_queue(0, ...
- jquery常用代码集锦
1. 如何修改jquery默认编码(例如默认GB2312改成 UTF-8 ) 1 2 3 4 5 $.ajaxSetup({ ajaxSettings : { contentT ...
- IOS 使用webview 显示 doc/docx/xls/pdf等
在一款项目里添加阅读各种文档功能 那么对在线的文档或者是下载后的文档 进行阅读,比如 doc/docx/xls/pdf等文件 有两种方法总结如下: 1. - (void)viewDidLoad { [ ...
- Mysql:常用代码
C/S: Client Server B/S: Brower Server Php主要实现B/S .net IIS Jave TomCat LAMP:L Mysql:常用代码 Create table ...
随机推荐
- [AngularJS 1] Introduction to AngularJS
introduction:this article is going to introduce AngularJS in generally. I will write it through five ...
- STM32F05 学习中............
今天,拿到stm32f05的板子已经三个月了吧,但是没有真的研究过,真的对板子过意不去了...所以决定今天好好的对待我的板子.
- 添加 SecondaryNameNode
网络上的很多人写的过程都是错的,关键配置反而不写. SecondaryNameNode的启动有两种方式 一:在整个hdfs系统启动时,在namenode上执行start-dfs.sh则namenode ...
- sqlite:多线程操作数据库“database is locked”解决方法(二)
上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ...
- DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置
DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置 一.DNS简介 1.DNS DNS是域名系统(Domain Name System)的简称,它是一个将域名和IP相互映射的分布式数据库 ...
- 视频特效制作:如何给视频添加边框、水印、动画以及3D效果
2014-12-08 09:47 编辑: suiling 分类:iOS开发 来源:叶孤城的blog 招聘信息: iOS手机软件开发工程师 iOS工程师 Web后端高级开发工程师 iOS软件工程师 ja ...
- [原]打造Python开发环境之Python环境
人生苦短,我用Python 一.升级到python2.7 开发环境的系统是centos 6.0, 默认的python版本是2.6.6, 由于线上环境是python2.7,为了防止版本差异产生的问题,所 ...
- PHP empty函数报错的解决办法
PHP empty函数在检测一个非变量情况下报错的解决办法. PHP开发时,当你使用empty检查一个函数返回的结果时会报错:Fatal error: Can't use function retur ...
- js8月-4号,,思想
1.js使用观察者模式,做异步编程.面向事件编程. 2.事件执行 (1)用户触发事件(2)定时执行 作业:选项卡,导航栏.
- 16.python中的浅拷贝和深拷贝
在讲什么是深浅拷贝之前,我们先来看这样一个现象: a = ['scolia', 123, [], ] b = a[:] b[2].append(666) print a print b