【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<QVariant> &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的操作,使用其他操作用法大同小异,具体对照文档来使用就可以了

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值