“阅读本文大概需要 6 分钟

WordExcelPDFC++
读写 Word
Word
没有十全十美的方案,任何方案都存在优点和缺点,下面来详细看下这几种方案的优缺点以及适用场景
XML 模板替换
“
Word
优点
代码量相对较少、导出速度快 跨平台,支持多个系统,系统不安装 office 也能导出; 支持图片以及固定格式导出;
缺点
导出格式固定,可扩展性不强,如果需求变化导出格式变了,那么模板也要跟着改变; 一种格式对应一份模板,如果导出格式较多,需要准备的模板文件较多,这样比较繁琐; Word
举个栗子
Word
Word XMLXML-Template.xml读取文档内容进行变量替换
file"XML-Template.xml"
if
"open xxml file fail. "
return0
"$VALUE0""1"
"$VALUE1""法外狂徒张三"
"$VALUE2""考试不合格"
"$VALUE3""2"
"$VALUE4""李四"
"$VALUE5""合格"
newFile"export.doc"
if
"file open fail."
return0
保存替换后的内容,写入文件
XMLXML
这种方式适合模板内容不太复杂,内容较少的情况下使用
COM 组件方式
“
Micro Soft
COM 技术概述
QtQt ActiveX
优点
实现简单,快速上手;
缺点
导出写入速度慢,因为相当于打开 word 文档操作; Windows需要程序运行的电脑安装 office word,否则调用失败
举个栗子
pro
QT *= axcontainer
打开文档写入内容
newstd
bool"word.Application"
if
returnfalse
// 设置是否显示
"Visible"false
"Documents"
ifnullptr
returnfalse
// 新建一个空白文档
"Add (void)"
// 获取激活的文档并使用
"ActiveDocument"
ifnullptr
returnfalse
// 插入字符串
"Selection"
ifnullptr
"TypeText(const QString&)""公众号:devstone"
可以看出来使用起来不难,对于新手友好一点,很多写入操作方法比较繁琐,需要自己重新封装一套接口
这种方案比较适合那些排版比较复杂,图片、文字、表格混排的场景下,而且内容都是动态变化的,可以很好的实现定制化
WordD:\\Soft\test.pngOffice Word
Excel
HTML 方式
“
WordHTML.doc
优点
Windows导出速度快、代码可扩展;
缺点
HTML插入的图片是本地图片文件的链接,导出的 word文档拷贝到其它电脑图片无法显示
举个栗子
HTML2Word::getHtmlContent()
""
"<html>"
"<head>"
"<title>测试生成word文档</title>"
"<head>"
"<body style=\"bgcolor:yellow\">"
"<h1 style=\"background-color:red\">测试qt实现生成word文档</h1>"
"<hr>"
"<p>这里是插入图片<img src=\"D:\\title.jpg""picture\" width=\"100\" height=\"100\"></p>"
"</hr>"
"</body>"
"</html>"
return
// 保存写入文件
file"D:/htmp2Word.doc"
if
returnfalse
out(&file)
HTML
图片问题其实可以手动进行转化,文档导出成功后手动拷贝内容到新的文档,这样图片就真正插入到文档中,文档发送给别人也不会丢失图片了
WPSweb
某些电脑分辨率变化也会导致生成的文档中字体等产生变化
第三方开源库
可以使用的第三方库几乎没有,网络上找到的有这么几个
OpenOffice: 兼容性差,集成调用难度大 LibOffice: 太庞大,不容易集成 DuckX: 太小众,只能简单的使用 docx:小众库
DuckX库docx库
WordC++JavaC#PythonC++
所以怎么选择还是看自己项目需求吧,没有十全十美的方案
WrodWord
这种需求应该不会很多,而且显示难度更大一些
COMQAxWidget officeQtofficeWord
WordPDFPDFPDF
读写 Excel
目前有一个支持比较好的第三方库可以使用,整体使用基本可以满足日常使用
QXlsx
这款开源库支持跨平台,Linux、Windows、Mac、IOS、Android,使用方式支持动态库调用和源码直接集成,非常方便
qmakecmake
// 设置一些样式
// 边框样式
1130// 设置行高
// 设置对齐方式
// 插入文本
11"微信公众号:devstone"
// 合并单元格
2144
// 导出保存
"D:/xlsx_export.xlsx"
// 添加工作表
"devstone"
Qt Api
“
MITMIP
COMExcelCOM
读写 PDF
PDFC++
mupdfpopplern
Github
qpdf 库
pdf.jsWebEngineJavaScript
项目地址
直接从本地文件加载; 支持从内存数据直接加载渲染 PDF 内容;
QtWebEngine
qtpdf 库
QtAPIQt
Qt 官方
小试牛刀
关于如何使用,官方已经给了我们非常详细的步骤了,直接跟着下面几步就 OK 了
官方教程
//code.qt.io/qt-labs/qtpdf
pdfiumGitHub
可正常访问的仓库地址:https://github.com/PDFium/PDFium
相关类可以看这个文档:https://developers.foxit.com/resources/pdf-sdk/c_api_reference_pdfium/modules.html
“
BSD 3-ClauseBSD
总结
以上就是项目中常用的文档处理方法总结,当然了肯定也还有其它方案可以实现,毕竟条条大路通罗马,如果你还要不错的方案和建议欢迎留言
GitHub
取之互联网、回报互联网
原创不易,如果觉得对你有帮助,欢迎点赞、在看、转发
推荐阅读
Qt Creator 源码学习笔记01,初识QTC Qt Creator 源码学习笔记02,认识框架结构结构 Qt Creator 源码学习笔记03,大型项目如何管理工程 Qt Creator 源码学习笔记04,多插件实现原理分析 Qt Creator 源码学习笔记 05,菜单栏是怎么实现插件化的?