1. 程式人生 > >【Qt】利用QAxObject實現word轉pdf

【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);

這裡說一下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的操作,使用其他操作用法大同小異,具體對照文件來使用就可以了