ToB企服应用市场:ToB评测及商务社交产业平台

标题: Qt/C++基于Word Xml模板方式天生word文档 [打印本页]

作者: 拉不拉稀肚拉稀    时间: 2024-10-23 10:34
标题: Qt/C++基于Word Xml模板方式天生word文档
C++天生word文档的方式大概有四种1.XML模板标签更换2.COM组件(MFC利用较多)3.HTML方式4.第三方库天生(aspore)必要付费。假如是小开发者发起采用Qt自带的格式或者XML模板标签更换的方法。今天这篇文章主要陈诉的是利用Word Xml的方式来举行输出Word陈诉格式。
一、XML格式
WordXML文档是一种基于XML的文件格式,用于存储和处理Microsoft Word文档的内容和布局。它结合了XML的可读性、易于剖析和易于扩展的特性,以及Word的文档处理本领。WordXML文档可以包含文档的文本内容、格式设置、表格、图像等元素,并且可以通过XML标签来形貌这些元素的布局和数据。1
WordXML文档的布局包罗:
声明部门:包含XML版本号和字符集声明,用于指定文件的XML版本和所利用的字符集。
根元素:全部元素都必须包含在一个根元素中,它是XML文件的出发点。
元素:元素包含开始标记、竣事标记和中间的数据,用于形貌文档中的不同部门。
属性:元素可以包含属性,用于形貌元素的特性。
WordXML文档的应用场景包罗:
数据交换:作为通用的数据交换格式,用于在不同平台和编程语言之间交换Word文档数据。
数据存储:用于存储和管理Word文档的内容和格式设置,如配置信息和用户数据。
数据传输:在Web应用和移动应用中,用于在互联网上传输Word文档数据。
配置文件:作为配置文件格式,用于配置Word应用步伐和体系的参数和选项。
为了利用WordXML文档中的数据,必要对XML文件举行剖析和处理。常见的XML剖析和处理方式包罗DOM剖析,它将XML文件剖析为一个树形布局,然后可以利用节点操作方法来访问和操作XML文件中的数据。
必要注意的是word2013之后word就不再支持含有自定义标记的word文档的打开的,你必要全部删除自定义标记才能够正常打开,但是wps是支持的,但是这并不影响我们利用xml模板来天生word文档
二、XML模板更换的优缺点
长处


缺点


三、利用方法

另存为xml格式的文档.我们打开文档如下图




如上图所示内里包含图片的部门已经列出来了,图片会被以二进制的方法举行写入到xml中,稍后我们会列出此种方法。



如上图看到我们预留的时间占位符。
采用qt读取文件并更换我们预留的占位符就可以了代码如下

  1. QTextCodec* codec = QTextCodec::codecForName("UTF-8");//或者"GBK",不分大小写QTextCodec::setCodecForLocale(codec);QFile file(strPath);QFileInfo qinf(strPath);QString strdir = qinf.absoluteDir().path();QString strbase = qinf.baseName();QString strout = strdir + "\" + strbase + "_2.doc";if (!file.open(QIODevice::ReadOnly)){    qDebug() << "open xxml file fail. " << file.errorString();    return ;}QByteArray baContent = file.readAll();file.close();QString strAllContent = QString::fromLocal8Bit(baContent);QString strImagePaht = "C:\\Users\\pengd\\Desktop\\image2.png";QString strBase = ImageToBase64(strImagePaht);strAllContent.replace("$Name", "张三");strAllContent.replace("$Time", "2024/04/18");
  2. QFile newFile(strout);if (!newFile.open(QIODevice::WriteOnly)){    qDebug() << "file open fail." << newFile.errorString();;    return ;}
  3. newFile.write(strAllContent.toLocal8Bit());newFile.close();
复制代码
上述代码中,有一个将图片转换为Base64的字符串的函数就是将图片转换成二进制代码的方法

  1. QString ImageToBase64(QString strImagePath){    QImage image(strImagePath);    QByteArray ba;    QBuffer buf(&ba);    image.save(&buf, "png");    qDebug() << ba.toBase64();    QString str = ba.toBase64();    return str;}
复制代码
下面这幅图就是图片在xml字段的嵌入方式,这些我们没必要去改,它是通过rid的方法去上面谁人图片字段里去查找图片的编号,然后通过编号查找图片的二进制字符串然后重新绘制在word文档里的

好了,文章到此竣事!!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4