zoukankan      html  css  js  c++  java
  • 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 FilesCommon FilesMicrosoft SharedOffice12mso.dll" 
    rename("RGB","_OfficeRGB")         
    
    #import  "C:Program FilesCommon FilesMicrosoft SharedVBAVBA6VBE6EXT.OLB" 
        rename("Reference", "ignorethis")
    
    #import   "C:Program FilesMicrosoft OfficeOffice12msword.olb " 
        rename("FindText","_FindText")
        rename("Rectangle","_Rectangle")
        rename("ExitWindows","_ExitWindows")
    
    #import   "C:Program FilesMicrosoft OfficeOffice12MSPPT.OLB"
    
    #import "c:Program FilesMicrosoft OfficeOffice12EXCEL.exe" 
        rename("DialogBox","_DialogBox") 
        rename("RGB","_RGB") 
        exclude("IFont","IPicture")
    
    #include <string>
    #include <iostream>
    
    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
    ", 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
    ", 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] <source file name> <destination file name>"<<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:"<<nR<<std::endl;
    
        return nR;
    }
  • 相关阅读:
    Scrapy 扩展中间件: 针对特定响应状态码,使用代理重新请求
    Scrapy 扩展中间件: 同步/异步提交批量 item 到 MySQL
    Scrapy 隐含 bug: 强制关闭爬虫后从 requests.queue 读取的已保存 request 数量可能有误
    Scrapyd 改进第二步: Web Interface 添加 STOP 和 START 超链接, 一键调用 Scrapyd API
    简单示例理解神闭包
    ejs 模板使用方法
    我使用的开源组件汇总,以备学习使用
    了不起的Node.js--之五 TCP连接
    Windows7下Java运行时环境搭建
    了不起的Node.js--之四
  • 原文地址:https://www.cnblogs.com/vc60er/p/4043246.html
Copyright © 2011-2022 走看看