我的目的主要是想将一篇word文档打印成pdf文件,但是操作后老是在printout函数处报错,说“类型不支持”,不知道出于什么原因,大家有什么好建议吗?谢谢

解决方案 »

  1.   

    #include "stdafx.h"
    #import "E:\Program Files\Microsoft Office\Office10\MSWORD.OLB" named_guids raw_interfaces_only  rename("ExitWindows", "wordExitWindows")
    void wordprint()
    {
    Word::_ApplicationPtr app;
    app.CreateInstance("Word.Application");
    Word::DocumentsPtr docs;
    app->get_Documents(&docs);
    Word::_DocumentPtr doc;
    _variant_t vFileName("c:\\a.doc");
    _variant_t vOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
    _variant_t vTrue(VARIANT_TRUE);
    _variant_t vFalse(VARIANT_FALSE);
    docs->Open (
    /*[in]*/&vFileName,
    /*[in] VARIANT * ConfirmConversions*/&vOptional,
    /*[in] VARIANT * ReadOnly*/&vOptional,
    /*[in] VARIANT * AddToRecentFiles*/&vOptional,
    /*[in] VARIANT * PasswordDocument*/&vOptional,
    /*[in] VARIANT * PasswordTemplate*/&vOptional,
    /*[in] VARIANT * Revert*/&vOptional,
    /*[in] VARIANT * WritePasswordDocument*/&vOptional,
    /*[in] VARIANT * WritePasswordTemplate*/&vOptional,
    /*[in] VARIANT * Format*/&vOptional,
    /*[in] VARIANT * Encoding*/&vOptional,
    /*[in] VARIANT * Visible*/&vOptional,
    /*[in] VARIANT * OpenAndRepair*/&vOptional,
    /*[in] VARIANT * DocumentDirection*/&vOptional,
    /*[in] VARIANT * NoEncodingDialog*/&vOptional,
    /*[out,retval]*/ &doc );
    _variant_t vCopies((short)1);
    app->PrintOut (
    /*[in] VARIANT * Background = &vtMissing*/ &vTrue ,
    /*[in] VARIANT * Append = &vtMissing*/&vOptional ,
    /*[in] VARIANT * Range = &vtMissing*/ &vOptional ,
    /*[in] VARIANT * OutputFileName = &vtMissing*/&vOptional ,
    /*[in] VARIANT * From = &vtMissing*/ &vOptional,
    /*[in] VARIANT * To = &vtMissing*/ &vOptional,
    /*[in] VARIANT * Item = &vtMissing*/ &vOptional,
    /*[in] VARIANT * Copies = &vtMissing*/&vCopies ,
    /*[in] VARIANT * Pages = &vtMissing*/ &vOptional,
    /*[in] VARIANT * PageType = &vtMissing*/&vOptional ,
    /*[in] VARIANT * PrintToFile = &vtMissing*/ &vFalse,
    /*[in] VARIANT * Collate = &vtMissing*/ &vOptional,
    /*[in] VARIANT * FileName = &vtMissing*/ &vOptional,
    /*[in] VARIANT * ActivePrinterMacGX = &vtMissing*/ &vOptional,
    /*[in] VARIANT * ManualDuplexPrint = &vtMissing*/&vOptional ,
    /*[in] VARIANT * PrintZoomColumn = &vtMissing*/ &vOptional,
    /*[in] VARIANT * PrintZoomRow = &vtMissing*/ &vOptional,
    /*[in] VARIANT * PrintZoomPaperWidth = &vtMissing*/ &vOptional,
    /*[in] VARIANT * PrintZoomPaperHeight = &vtMissing*/ &vOptional) ;
    Sleep(3000);
    app->Quit(&vOptional,&vOptional,&vOptional);}
    int _tmain(int argc, _TCHAR* argv[])
    {
    printf("Automate word to print a document, test by masterz with VC.NET2003 on WindowXP, OfficeXP\n");
    CoInitialize(NULL);
    wordprint();
    CoUninitialize();
    return 0;
    }
      

  2.   

    非常感谢,不过我还有几点想请教:
    1。_variant_t vOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
    DISP_E_PARAMNOTFOUND这个参数是表示什么呢?我在什么地方可以查到,谢谢
    2。/*[in] VARIANT * OutputFileName = &vtMissing*/&vOptional ,
    假如我将这个参数设定默认的文件名的话,打印会出现问题,即生成的pdf文件出错。谢谢指教!
      

  3.   

    我做过这个不过要装pdf的完全版本,首先将word文档由distiller打印机转换成.ps文件,再由控制distiller应用程序将.ps文件转换成pdf文档。