【Qt】利用QAxObject實現word轉pdf
阿新 • • 發佈:2018-12-17
通過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);
這裡說一下querySubObject的用法,引數傳得少的時候可以使用上面那種做法,如果多的話就用另外的過載版本
QAxObject* querySubObject(const char *name, QList<QVariant> &vars);
裝到一個list裡面就行傳參就行了。
doc->querySubObject("ExportAsFixedFormat(const QVariant&,const QVariant&,const QVariant&)", OutputFileName, ExportFormat, OpenAfterExport );
最後把word關掉。傳參為true時為退出時儲存更改。
doc->dynamicCall("Close(boolean)", false);
關閉的時候我們使用的是dynamicCall,和querySubObject區別就是querySubObject有返回值,而dynamicCall沒有,所以呼叫介面的時候看看有沒有返回值來選用。
這裡列舉了轉為pdf的操作,使用其他操作用法大同小異,具體對照文件來使用就可以了