热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c/c++常用代码doc,ppt,xls文件格式转PDF格式[转]

[转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import

[转]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 

int EXCEL2PDF(std::wstring inputFileName,std::wstring outputFileName)
{
    HRESULT hr;
    int nR = 0;


    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);
        return 1;
    } 
    try
    {
        pThisWorkbook = pApplication->GetWorkbooks()->Open(szBstrInputFileName);

        pThisWorkbook->ExportAsFixedFormat(Excel::XlFixedFormatType::xlTypePDF,szBstrOutputFileName);

        pThisWorkbook->Close();
        pThisWorkbook.Release();
        pThisWorkbook = NULL;
    }catch(...)
    {
        nR = 2;
    }

    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;
     int     nR = 0;
     
     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); 
         return 1; 
     } 
 
     spPres = spPpApp->Presentations; 
     if(spPres==NULL)
     {
         nR = 2;
         goto _RELEASE_APP;
     }
     try{
         pPre = spPres->Open(szBstrInputFileName,
             Office::MsoTriState::msoTrue,Office::MsoTriState::msoFalse,Office::MsoTriState::msoFalse);
         if(pPre ==NULL)
         {
             nR = 3;
             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==4;
     }
_RELEASE_APP:
    spPpApp-> Quit(); 
    spPpApp.Release(); 
    spPpApp = NULL;

    return nR;
}

int Word2PDF(std::wstring inputFileName,std::wstring outputFileName)  
{
    int nR = 0;
    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)
    {
        return 1;
    }

    Word::DocumentsPtr   pDocs   =   NULL; 
    pWordApp-> get_Documents(&pDocs);
    if(pDocs==NULL)
    {
        nR = 2;
        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,1,1,
            Word::WdExportItem::wdExportDocumentContent,VARIANT_TRUE,VARIANT_TRUE,
            Word::WdExportCreateBookmarks::wdExportCreateNoBookmarks,VARIANT_TRUE,VARIANT_TRUE,VARIANT_FALSE);

        pDoc-> Close(); 
        pDoc.Release(); 
        pDoc   =   NULL; 
    }catch(...)
    {
        nR = 3;
    }

_RELEASE_APP:
    pWordApp-> Quit(); 
    pWordApp.Release(); 
    pWordApp   =   NULL; 

    return nR;
}


int _tmain(int argc, _TCHAR* argv[])
{
    int nR = 0;

    CoInitialize(NULL); 

    std::wstring wsCmd;
    std::wstring wsS;
    std::wstring wsD;

    if(argc!=4)
    {
        std::cout<<"Command Usage: Office2PDF -[e|p|w]  "<<std::endl;
        std::cout<<"         e.g.: Office2PDF -e myName.xlsx myName.pdf"<<std::endl;
        return 1;
    }

    wsCmd = argv[1];
    wsS   = argv[2];
    wsD   = argv[3];
    
    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(); 

    if(nR!=0)
        std::cout<<"Error:"<std::endl;

    return nR;
}

 


推荐阅读
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • ARM汇编基础基于Keil创建STM32汇编程序的编写
    文章目录一、新建项目(1)工具介绍(2)创建项目:二、配置环境(1)配置芯片&#x ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 使用 Vuex 管理表单状态:当输入框失去焦点时自动恢复初始值 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
author-avatar
kenvilen_106
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有