【Qt】利用QAxObject实现word转pdf

 

通过QAxObject类操作office的com组件操作word,调用word的接口保存为pdf,所以必须安装了office才能用。

下面先贴代码再做说明

QAxObject *pWordApplication = new QAxObject("Word.Application", 0);
    QAxObject *pWordDocuments= pWordApplication->querySubObject("Documents");

    QString fileName = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/11.docx";
    QString toFilePath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/11.pdf";

    QVariant filename(fileName);
    QVariant confirmconversions(false);
    QVariant readonly(true);
    QVariant addtorecentfiles(false);
    QVariant passworddocument("");
    QVariant passwordtemplate("");
    QVariant revert(false);
    //打开
    QAxObject* doc = pWordDocuments->querySubObject("Open(const QVariant&, const QVariant&,const QVariant&, "
                                                 "const QVariant&, const QVariant&, "
                                                 "const QVariant&,const QVariant&)",
                                                 filename,
                                                 confirmconversions,
                                                 readonly,
                                                 addtorecentfiles,
                                                 passworddocument,
                                                 passwordtemplate,
                                                 revert);

    QVariant OutputFileName(toFilePath);
    QVariant ExportFormat(17);      //17是pdf
    QVariant OpenAfterExport(false); //保存后是否自动打开
    //转成pdf
    doc->querySubObject("ExportAsFixedFormat(const QVariant&,const QVariant&,const QVariant&)",
                                    OutputFileName,
                                    ExportFormat,
                                    OpenAfterExport
                                    );

    //关闭
    doc->dynamicCall("Close(boolean)", false);

首先是获取Word.Application对象

QAxObject *pWordApplication = new QAxObject("Word.Application", 0);

接着获取操作窗口对象

QAxObject *pWordDocuments= pWordApplication->querySubObject("Documents");

接着就是打开一个word的文档,如果打开失败就什么都没有,所以需要判断是否打开成功,我这里做演示,没有加。

QAxObject* doc = pWordDocuments->querySubObject("Open(const QVariant&, const QVariant&,const QVariant&, "
                                                 "const QVariant&, const QVariant&, "
                                                 "const QVariant&,const QVariant&)",
                                                 filename,
                                                 confirmconversions,
                                                 readonly,
                                                 addtorecentfiles,
                                                 passworddocument,
                                                 passwordtemplate,
                                                 revert);

这些接口可以通过查看微软的官方文档找到,这里贴个链接https://msdn.microsoft.com/zh-cn/vba/word-vba/articles/documents-open-method-word,具体的传参看文档,第一个参数文件名是必传的,其他的参数看自己的需要。

这里说一下querySubObject的用法,参数传得少的时候可以使用上面那种做法,如果多的话就用另外的重载版本

QAxObject* querySubObject(const char *name, QList &vars);

装到一个list里面就行传参就行了。

接着调用接口转成pdf,接口说明链接https://msdn.microsoft.com/zh-cn/vba/word-vba/articles/document-exportasfixedformat-method-word,第一第二个参数是必传的

doc->querySubObject("ExportAsFixedFormat(const QVariant&,const QVariant&,const QVariant&)",
                                    OutputFileName,
                                    ExportFormat,
                                    OpenAfterExport
                                    );

最后把word关掉。传参为true时为退出时保存更改。

doc->dynamicCall("Close(boolean)", false);

关闭的时候我们使用的是dynamicCall,和querySubObject区别就是querySubObject有返回值,而dynamicCall没有,所以调用接口的时候看看有没有返回值来选用。

这里列举了转为pdf的操作,使用其他操作用法大同小异,具体对照文档来使用就可以了

你可能感兴趣的:(Qt)