热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Qt多线程下Word转换为PDF

在工作的项目中需要让计算机自动生成公司生产产品的电子版的质检报告.我首先用的是让软件生成Word格式的报告,但是这个格式容易修改因此领导不太满意.现在只能修改成PDF格式.因为公

在工作的项目中需要让计算机自动生成公司生产产品的电子版的质检报告.

我首先用的是让软件生成Word格式的报告,但是这个格式容易修改因此领导不太满意.现在只能修改成PDF格式.因为公司的质检报告有固定的的模板,使用Qt很方便的实现生成Word版本,所以用的方法是先生成Word格式的质检报告然后格式进行转换.

一个重要的问题就是格式转换需要很长的时间,在转换期间软件会处于冻结转态.因此需要使用到多线程的方法加快转换的速度.

下面是以四个Word文档转换为例讲解.

 

 

代码结构如下

QT += axcontainer .pro下面

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();WorkThread *workThread[4];
private:Ui::Widget *ui;
};
#endif // WIDGET_H

workthread.h

#ifndef WORKTHREAD_H
#define WORKTHREAD_H
#include
#include
class WorkThread : public QThread
{Q_OBJECT
public:WorkThread(int i);int odd;
protected:void run() ;};#endif // WORKTHREAD_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
#include
#include
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{int j = 0;for (int i=1;i<=7;i+=2){workThread[j] = new WorkThread(i); //新建多线程 一共创建四个j++;}for(int i =0;i<4;i++) //依次启动{workThread[i]->start();}// ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}
void WorkThread::run()
{QTime t;t.restart(); //测试多线程下的转换时间HRESULT r = OleInitialize(0);//初始化框架QAxObject *pWordApplication = new QAxObject("Word.Application",0);QAxObject *pWordDocuments = pWordApplication->querySubObject("Documents");QString fileName = "D:\\KHDCheckReport\\2020-1-11\\"+QString::number(odd)+".docx";QString toFilePath = "D:\\KHDCheckReport\\2020-1-11\\"+QString::number(odd)+".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); //转换PDFQVariant OpenAfterExport(false);doc->querySubObject("ExportAsFixedFormat(const QVariant&,const QVariant&,const QVariant&)",OutputFileName,ExportFormat,OpenAfterExport);doc->dynamicCall("Close(boolean)",false);qDebug()<<"运行时间:"<

workthread.cpp

#include "workthread.h"WorkThread::WorkThread(int i)
{odd = i;
}

main.cpp

#include "widget.h"#include int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

 

程序很简单不需要过多说明


推荐阅读
  • Qt 学习笔记(5)绘图   五子棋游戏
    在上一篇博客CQt学习笔记(4)绘图中介绍了Qt中的绘图方法,基于上一篇的博客的知识,使用QPainter设计一个五子棋的棋 ... [详细]
  • 开发笔记:Java多线程深度探索
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java多线程深度探索相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Gson转换json数据为对象
    可以通过Gson使用两种方法,将json字符串转换为对象,以下面该段报文做测试{id:84041462,lastName:小华,age:32 ... [详细]
  • ApacheTrafficServer6.2.2发布了,TrafficServer是一套快速、模块化 ... [详细]
  • 开发笔记:sql盲注之报错注入(附自动化脚本)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了sql盲注之报错注入(附自动化脚本)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Flex中使用filter过滤数据 ... [详细]
  • 发现很多时候展示一堆文字,需要让局部的某些字变粗啊,变大、变颜色、能点击等等要求,今天在这简单总结下方便日后直接复用(用ht ... [详细]
  • #import挂载对象所需要的参数(UIAlertView挂载对象)staticconstcharkRepresente ... [详细]
  • 一、如果使用默认的1521端口,让实例自动注册到该监听上,那么local_listener无需设置,listener.ora文件按照正常方 ... [详细]
  • Matlab中利用mex编译Opencv实现画板绘图功能
    图形绘制是标记和可视化数据的重要方法.通过在Matlab中集成画板绘图功能,可为科学计算提供便利.1设置Matlab支持Opencv编译操作系统:麒麟14.04(基于Ubu ... [详细]
  • 一、域名解析记录说明记录类型A:用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP ... [详细]
  • 先看看效果是不是自己想要的吧item及item内部控件点击事件不懂的可以先点击查看 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
author-avatar
hy11011_847
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有