Qt显示pdf系列2——QAxWidget打开Office文件及pdf
- 序
- 一QAxwidget操作office
- 二QAxwidget操作pdf
- 三总结
承接上章,该扯皮的扯完了,直接进入正题:
序
顾名思义,这篇先介绍下QAxwidget来操作office和pdf
QAxwidget,即一个ActiveX控件的qt版本,方便我们在qt程序中调用显示,可以直接调用com组件。关于QAxwidget的介绍,官网上有更详细的,可以自行查看:
QAxwidget官网介绍
此外,引用别人的一张图,能够更好理解继承结构:
传送门
开发环境:windows7+vs2013+qt5.4(32位)。
一、QAxwidget操作office:
如果仅仅是使用QAxwidget来打开pdf文件还是较为简单的,网上也更多这方面的例子,但也基本上浅尝辄止,没有更深的内容了,很遗憾,我也是,如果要详细的api,需要直接去找com组件的api,但是我当时只看了pdf的api。
使用QAXwidget操作office文件时,必须电脑装有office,office2007以上都可以(03没试过,未知),同时qt5.7如果是调用dilaog打开文件来显示有效果,如果是直接load没效果,大约是一个bug。
准备工作:使用QAxwidget需要添加库:
QT += axcontainer
1、搞个简单的界面:
点击按钮打开个文件选择框(QFileDialog),根据选择文件来确定打开的文件格式
void MainWindow::on_pushButton_clicked()
{QFileDialog dialog;dialog.setFileMode(QFileDialog::ExistingFile);dialog.setViewMode(QFileDialog::Detail);dialog.setOption(QFileDialog::ReadOnly, true);dialog.setWindowTitle(QString("QAXwidget操作文件"));dialog.setDirectory(QString("./"));dialog.setNameFilter(QString("所有文件(*.*);;excel(*.xlsx);;word(*.docx *.doc);;pdf(*.pdf)"));if (dialog.exec()){//根据文件后缀打开QStringList files = dialog.selectedFiles();for(auto filename : files){if(filename.endsWith(".xlsx")){this->OpenExcel(filename);}else if(filename.endsWith(".docx") || filename.endsWith(".doc")){this->OpenWord(filename);}}}
}
2、根据所选择的文件打开:
void MainWindow::OpenExcel(QString &filename)
{this->CloseOffice();officeContent_ = new QAxWidget("Excel.Application", this->ui->widget);officeContent_->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体officeContent_->setProperty("DisplayAlerts", false);auto rect = this->ui->widget->geometry();officeContent_-> setGeometry(rect);officeContent_->setControl(filename);officeContent_->show();
}void MainWindow::OpenWord(QString &filename)
{this->CloseOffice();officeContent_ = new QAxWidget("Word.Application", this->ui->widget);officeContent_->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体officeContent_->setProperty("DisplayAlerts", false);auto rect = this->ui->widget->geometry();officeContent_-> setGeometry(rect);officeContent_->setControl(filename);officeContent_->show();
}
3、就打开了,效果如下(忽略word文档内容,以前的博客内容):
4、需要注意的是,使用完之后记得关干净,不然打开的word.exe还在进程。
void MainWindow::CloseOffice()
{if(this->officeContent_){officeContent_->close();officeContent_->clear();delete officeContent_;officeContent_ = nullptr;}
}
二、QAxwidget操作pdf:
其实打开pdf也类似,在放弃office文件之后选择了打开pdf文件。
注意,需要安装adobe pdf reader:
1、在打开文件后选择分支处加一个选项:
else if(filename.endsWith(".docx") || filename.endsWith(".doc")){this->OpenWord(filename);}else if(filename.endsWith(".pdf")){this->OpenPdf(filename);}
2、打开pdf文件:
在布局上加一个类型gridLayout:
添加函数:
void MainWindow::OpenPdf(QString &filename)
{this->CloseOffice();officeContent_ = new QAxWidget(this);if(!officeContent_->setControl("Adobe PDF Reader"))QMessageBox::critical(this, "Error", "没有安装pdf!");this->ui->gridLayout->addWidget(officeContent_);officeContent_->dynamicCall("LoadFile(const QString&)",filename);
}
这里有点不一样了,不能通过打开office的方式来直接打开。
有兴趣的话可以翻看官方文档,我找了好久找到了:传送门
3、完事儿,打开效果如下:
三、总结:
通过QAxwidget来操作office文件和pdf文件,有以下几点优缺点:
1、很方便显示这些,几乎没什么代码量,直接可以看到效果。
2、本质其实就是调用别的软件来显示,跟自己没半毛钱关系,屏蔽不了按键,不能让他无法编辑,无法复制,无法保存,故而弃之。
3、需要源码的话可以留评论,我再上传。
更新:
代码地址:
传送门
Qt显示pdf系列2——QAxWidget打开Office文件及pdf相关推荐
- android第三方打开office文件,Android应用集成Office文件能力完全攻略
Android应用打开office和pdf文件.常用的有以下四种解决方案: 在线网页打开文件方案:通过微软或谷歌提供的在线页面打开office和pdf文件 集成相关文档处理开源库:通过集成开源库类似于 ...
- android 读取wps_安卓APP调用WPS打开Office文件并返回APP
原创文章:转载请注明出处 安卓APP调用WPS打开Office文件并返回APP功能实现(附wps工具) 在某些app(如OA系统app)开发工程中,往往会遇到编辑Office文档的需求,而我们一般采取 ...
- 通过Jacob调用WPS将office文件转为PDF文件
访问https://sourceforge.net/projects/jacob-project/ 想要调启Windows里的程序需要对应的dll库,下载之后解压 将符合你电脑的dll文件复制到jdk ...
- PHP实现office文件转PDF功能
之前因为业务需要接触过在线浏览office文件,用过一些接口,例如:I DOC View(收费).Office Web 365(有免费版,详情可点击查看).online doc(有免费 ...
- python office转pdf_python 如何将office文件转换为PDF
在平时的工作中,难免需要一些 小Tip 来解决工作中遇到的问题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx/ppt/pptx/xls/xlsx)文件批量或者单一文件转 ...
- office文件转换为pdf文件
office文件转换为pdf文件 首先安装openoffice,自行百度 导入jar包,自行百度 引入坐标: <!-- 转pdf配置 --><dependency><gr ...
- word无法验证服务器,Win8系统打开office文件提示“无法验证此产品的许可证”如何解决...
Office是办公室人员经常会用到的软件,而在使用过程中难免遇到一些情况,比如有win8系统用户在打开office文件的时候,却提示"无法验证此产品的许可证",这是怎么回事呢,现在 ...
- python office转pdf linux_python 如何将office文件转换为PDF
在平时的工作中,难免需要一些 小Tip 来解决工作中遇到的问题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx/ppt/pptx/xls/xlsx)文件批量或者单一文件转 ...
- python win32转pdf 横版_Python 小技巧之 Office 文件转 PDF
文章来源于公众号:Python技术 作者:派森酱 在日常的生活工作中,难免需要用到一些 小Tip 来解决工作中遇到的小难题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx ...
最新文章
- 用缓存拦截接口频繁的请求
- scrapy-splash抓取动态数据例子八
- 【PM模块】预防性维护(下)
- 【数据结构与算法】之深入解析“外观数列”的求解思路与算法示例
- 极路由2 root及校园802.1x拨号经验帖(西南校园)
- 告白——一个loser的手记
- cdn转发防攻击_一个既可以加速又可以防御的CDN产品
- 【干货】推荐系统解构.pdf(附下载链接)
- 根据成交量变化寻找黑马
- 真不好意思,让你贱笑了
- Python爬虫实践(二) -- 爬虫进阶:爬取数据处理、数据库存储
- 用python画散点图
- 在excel 同时冻结行和列
- 根据已订房客人资料快速登记
- 利用JS模拟排队系统
- 音量控制面板项目说明
- 无利不起早:理性看待IBM倾“芯”中国
- 投影仪怎么看电视直播?安装这些软件带你共享2022世界杯盛宴
- ERRno::ECONNRESTE: An existing connection was forcibly closed by the remote
- 求字符串中的回文数或者是回文单词