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