【QT】 Word模板编辑、转PDF格式

很高兴在雪易的CSDN遇见你 ,给你糖糖

欢迎大家加入雪易社区-CSDN社区云 


前言

本文分享基于QT进行Word模板编辑以及Word转PDF的技术,希望对各位小伙伴有所帮助!

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的点赞就是我的动力(^U^)ノ~YO

目录

前言

1. 制作Word模板

2. 基于QT编辑Word模板

3. Word转PDF

结论:


1. 制作Word模板-添加书签

        》新建Word文档

        》插入---标签

                将待插入内容制作为标签

        》保存为.dot格式

2. 基于QT编辑Word模板

        》书签 替换为 文本

    //新建一个word应用程序QAxWidget* word = new QAxWidget("Word.Application", 0, Qt::MSWindowsOwnDC);//并设置为不可见word->setProperty("Visible", false);//获取所有的工作文档QAxObject* documents = word->querySubObject("Documents");//以test2.dot为模板新建一个文档documents->dynamicCall("Add(QString)", strTemplatePath);//获取当前激活的文档QAxObject* document = word->querySubObject("ActiveDocument");//获取文档中名字为name的标签QAxObject* bookmark_name = document->querySubObject("Bookmarks(QVariant)", "name");//选中标签,将字符textg插入到标签位置if (!bookmark_name->isNull()){QString sText = ui->lineEdit_name->text();                          //此处为替换内容bookmark_name->dynamicCall("Select(void)");                             //选中要选中的区域bookmark_name->querySubObject("Range")->setProperty("Text", sText);      //进行替换操作}//获取文档中名字为sex的标签QAxObject* bookmark_sex = document->querySubObject("Bookmarks(QVariant)", "sex");//选中标签,将字符textg插入到标签位置if (!bookmark_sex->isNull()){QString sText = ui->lineEdit_sex->text();                          //此处为替换内容bookmark_sex->dynamicCall("Select(void)");                             //选中要选中的区域bookmark_sex->querySubObject("Range")->setProperty("Text", sText);      //进行替换操作}//将文件保存为doc,同样可以生成docx文档QString pathsave = QApplication::applicationDirPath() + QString::fromLocal8Bit("\\Report\\report_template.docx");if (pathsave.isEmpty() == true){return;}document->dynamicCall("SaveAs(const QString&))", QDir::toNativeSeparators(pathsave));document->dynamicCall("Close (boolean)", false);word->dynamicCall("Quit()");QMessageBox::warning(this, "完成", "文件已经保存", QMessageBox::Yes);

        》书签 替换为 图片

bool insertPic(QAxObject* document, QString sLabel, QString sFile)
{if (!document)return false;QAxObject* bookmark_pic = document->querySubObject("Bookmarks(QString)", sLabel);if (bookmark_pic){bookmark_pic->dynamicCall("Select(void)");QAxObject* range = bookmark_pic->querySubObject("Range");QVariant tmp = range->asVariant();QList<QVariant> qList;qList << QVariant(sFile);qList << QVariant(false);qList << QVariant(true);qList << tmp;QAxObject* Inlineshapes = document->querySubObject("InlineShapes");Inlineshapes->dynamicCall("AddPicture(const QString&,QVariant,QVariant,QVariant)", qList);delete Inlineshapes;}return true;
}

3. Word转PDF

void zxKneeReportWidget::convertToPDF(QString strWordPath, QString strTargetPath)
{if (strWordPath.isEmpty() || strTargetPath.isEmpty()) return;QAxObject* pWordApplication = new QAxObject("Word.Application", 0);QAxObject* pWordDocuments = pWordApplication->querySubObject("Documents");QString fileName = strWordPath;QString toFilePath = strTargetPath;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是pdfQVariant OpenAfterExport(false); //保存后是否自动打开//转成pdfdoc->querySubObject("ExportAsFixedFormat(const QVariant&,const QVariant&,const QVariant&)",OutputFileName,ExportFormat,OpenAfterExport);//关闭doc->dynamicCall("Close(boolean)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?

一、引言 在实际应用中&#xff0c;特征选择作为机器学习和数据挖掘领域的重要环节&#xff0c;对于提高模型性能和减少计算开销具有关键影响。特征选择是从原始特征集中选择最相关和最具区分力的特征子集&#xff0c;以提高模型的泛化能力和可解释性。 特征选择在实践中具有以…

计算机竞赛 python opencv 深度学习 指纹识别算法实现

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python opencv 深度学习 指纹识别算法实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;4分创新点&#xff1a;4分 该项目较为新颖…

什么是Java中的观察者模式?

Java中的观察者模式是一种设计模式&#xff0c;它允许一个对象在状态发生改变时通知它的所有观察者。这种模式在许多情况下都非常有用&#xff0c;例如在用户界面中&#xff0c;当用户与界面交互时&#xff0c;可能需要通知其他对象。 下面是一个简单的Java代码示例&#xff0…

代码质量检查工具SonarQube

Devops流水线之SonarQube 文章目录 Devops流水线之SonarQube1. 软件功能介绍及用途2. 软件环境搭建与使用2.1 使用方法2.2 SonarQube相关属性说明2.3 Sonar配置文件内容说明 3. 使用环节4. 检查方法 1. 软件功能介绍及用途 SonarQube是一个用于代码质量管理的开源平台&#xf…

element-ui table表格,根据缩放自适应

安装依赖 npm install af-table-columnmain.js 中引入依赖&#xff0c; import Vue from vue import ElementUI from element-ui //需要按需引入&#xff0c;先引入vue并引入element-ui import AFTableColumn from af-table-column Vue.use(AFTableColumn)demo样式&#xff1…

Python Opencv实践 - 图像放射变换

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols img.shape[:2] print(img.shape[:2])#使用getAffineTransform来获得仿射变换的矩阵M #cv.getAffineTransform(…

Java:正则表达式案例:爬数据,重复数据替换,数据分割

使用正则表达式查找一段文本中的内容 需求:请把下面文本中的电话&#xff0c;邮箱&#xff0c;座机号码&#xff0c;热线都爬取出来。 String data "电话:1866668888&#xff0c;18699997777\n" "或者联系邮箱: boniuitcast.cn&#xff0c;\n" "座机…

Loop Transformations

Java的Loop Transformations 很多人都知道,在编程中,循环结构是十分重要的。但是,在不同的情况下,相同的循环结构可能会导致不同的性能表现。因此,在优化程序的性能时,循环结构的优化是一个不可忽略的方面。这就是Loop Transformations(循环转换)的作用。本文将以详细…

16 dplsys GAN

和有监督的分类工作不同&#xff0c;生成任务的目标更不明确。难以评价生成结果的好坏。 Oracle discriminator 假设我们有一个先知判别器oracle discriminator可以分辨我们生成的内容是真还是假。 我们想让生产成的结果足够真实&#xff0c;所以要 fool Oracle discriminato…

Android布局【GridLayout】

文章目录 GridLayout概述常见属性子控件属性项目结构主要代码 GridLayout概述 GridLayout也名网格布局,该布局与TableLayout类似&#xff0c;但与其相比&#xff0c;GridLayout会更加的灵活&#xff0c;比如 TableLayout不能将两行进行一个合并&#xff0c;只能将两列进行一个…

Declare 关键字在 TypeScript 中如何正确使用?

如果您编写 TypeScript 代码的时间足够长,您就已经看到过declare关键字。但它有什么作用,为什么要使用它? declare关键字告诉 TypeScript 编译器存在一个对象并且可以在代码中使用。 本文解释了声明关键字并通过代码示例展示了不同的用例。 定义 在 TypeScript 中,decl…

【MySQL--->数据类型】

文章目录 [TOC](文章目录) 一、数据类型分类二、整型类型三、bit(位)类型四、float类型五、decimal类型六、char和varchar类型1.char类型2.varchar3.char与varchar的区别 七、日期与时间类型八、enum和set 一、数据类型分类 二、整型类型 数值类型有数据存储上限,而且每个类型都…

4、Rocketmq之存储原理

CommitLog ~ MappedFileQueue ~ MappedFile集合 正常情况下&#xff0c;RocketMQ支持消息体字节数最多为1个G。注意该消息体并不单单是消息体body。如果生产的消息其字节数超过1个G则该消息是无法被落盘处理的。因为没有一个MapperFile文件可以承载该消息所有的字节数。 1.All…

【力扣每日一题】617. 合并二叉树 dfs bfs 8.14打卡

文章目录 题目思路代码 题目 617. 合并二叉树 难度&#xff1a; 简单 描述&#xff1a; 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff0…

阿里云ACP知识点

前言&#xff1a;记录ACP错题 1、在创建阿里云ECS时&#xff0c;每台服务器必须要包含_______用来存储操作系统和核心配置。 系统盘&#xff08;不是实例&#xff0c;实例是一个虚拟的计算环境&#xff0c;由CPU、内存、系统盘和运行的操作系统组成&#xff1b;ESC实例作为云…

C++11 异步与通信之 std::async

概念简介 std::async 异步运行一个函数&#xff0c;将返回值保存在std::future中。 含有2个策略参数&#xff1a; launch::deferred 延迟执行&#xff0c;当调用wait()和get()时&#xff0c;任务才会被运行&#xff0c;且不创建线程&#xff1b;launch::async : 创建线程并执…

react项目做的h5页面加载缓慢优化(3s优化到0.6s)

打包到生产环境时去掉SOURCEMAP 禁用生成 Source Map 是一种权衡&#xff0c;可以根据项目的实际需求和优化目标来决定是否禁用。如果您对调试需求不是特别强烈&#xff0c;可以考虑在生产构建中禁用 Source Map 以获取更好的性能。但如果需要保留调试能力&#xff0c;可以在生…

【量化课程】08_1.机器学习量化策略基础实战

文章目录 1. 常用机器学习模型1.1 回归模型1.2 分类模型1.2.1 SVC介绍1.2.2 SVC在量化策略中的应用 2. 机器学习量化策略实现的基本步骤3. 策略实现 1. 常用机器学习模型 1.1 回归模型 线性回归多层感知器回归自适应提升树回归随机森林回归 1.2 分类模型 线性分类支持向量机…

Android布局【FrameLayout】

文章目录 常见属性说明项目结构主要代码 常见属性 android:foreground&#xff1a;设置前景android:foregroundGravity&#xff1a;设置前景位置 说明 FrameLayout的其他属性与前面学的差不多&#xff0c;只不过需要特别注意上面两个即可 项目结构 主要代码 activity_main…

【leetcode】第2章 链表

203. 移除链表元素 方法&#xff1a;添加一个虚拟节点&#xff0c;这不用考虑头节点删除情况 public ListNode removeElements(ListNode head, int val) {// 虚拟节点&#xff0c;指向头节点ListNode dummy new ListNode(0);dummy.next head;ListNode p dummy;// 找到被删…