Word文档生成

简介:

非常多的时候,都需要在程序当中生成一些文档,这些文档可能是csv,word,pdf,PPT,xls等文件格式。

生成csv还是比较简单的,但是要生成word,excel就麻烦多了。

当然,Tiny框架也面临这个问题,如何才能帮助开发人员快速生成这些文档呢?

一般来说,现在用java生成Word有如下方式:

POI,iText,当然还有Xml形式。

对于采用POI,iText来说,要生成复杂的Doc文件,其实并不容易。而采用Xml结构生成,去把一个文档生成xml文件,看看里面的内容,估计也会是满头是汗。

Tiny构建者,认为,生成Doc,Xls,PDF等文档类型是管理系统绕不过去的坑,那既然没有办法绕过,那就是说无论如何都要过了?

随便百度Google一下,发现这种方案其实许多人已经做过了,比如在下面的连接中,作者已经有了良好的实践:http://developer.51cto.com/art/201106/270815.htm

本文的解决方案,与之存在类似之处--都是采用模板语言结合xml来生成xml格式Word文件,但是实现模式还是不一样的,本文提供的方案更具有通用性、易用性,易用到像做网站一样生成Word文档。

为此,Tiny框架对于生成文本格式文件的内容进行了抽象,只要是生成文本格式的文件,都可以通过Tiny框架的文档生成框架进行扩展,使得开发人员可以方便快捷的生成文本类型的文档。

由于Office文档已经有了xml格式的存储方式,由于pdf可以通过xml生成,因此,最常用的office文档和pdf文档都可以通过本框架快速生成,当然,有一些基础性工作还是要自己做的(偷偷的透露一下:常用的模板框架中都会包含的)。

角色分配

文档生成框架扩展

文档生成框架扩展是非常简单的,你不用编写代码,只要编写配置文件即可

1.编写Bean文件

?
1
2
3
4
5
6
7
< bean id = "docTemplateFileProcessor" scope = "singleton" class = "org.tinygroup.docgen.fileresolver.TemplateFileProcessor" >
     < property name = "fileExtName" value = ".doctemplate" ></ property >
     < property name = "documentType" value = "doc" ></ property >
</ bean >
注意:
fileExtName属性是指模板文件的扩展名
documentType属性是指文档类型

宏文件编写

文档生成框架本身并不能直接生成各种文档,需要高级开发人员进行模板编写。
这部分主要是定义Velocity模板文件了。
比如:定义下面的宏,可以用来生成word文件中的链接

?
1
2
3
4
#macro(link $url)
$bodyContent
</w:hlink
#end

文档模板编写

普通开发利用高级开发人员编写的宏文件,就可以简单快捷的编写文档模板了。

比如下面的代码就可以生成新浪网的链接地址:

#link("http://www.sina.com.cn/") #p("新浪网") #end

是不是不用知道Word文档格式,也可以方便快速的编写Word文档了?

示例

编写下面的模板文件

#@wordDocument()
#@body()
#h("Tiny Framework" 1)
#h("Tiny Framework" 2)
#h("Tiny Framework" 3)
#h("Tiny Framework" 4)
#h("Tiny Framework" 5)
#end
#end 

编写下面的java代码:

DocumentGeneraterManager manager = SpringUtil.getBean(DocumentGeneraterManager.MANAGER_BEAN_NAME);
File file=new File("test.xml");
FileOutputStream outputStream=new FileOutputStream(file);
manager.getFileGenerater("doc").generate("/test.docpage", new ContextImpl(), new OutputStreamWriter(outputStream));
outputStream.close();

运行用Word打开生成的test.xml的结果:

当然,框架中已经定义了Word中大量的元素,也就是说大部分都可以像上面的方式来添加表格,样式,等等元素。再结合上各种数据获取,生成各种类型文档都是手到捻来。在Tiny框架就有大量的运行时数据,比如:服务定义,组件定义,插件定义等等,都是直接通过文档生成框架即时生成,保证了文档的可用性及有效性。

当然,不仅仅可以且来生成Word,所有以文本格式的存储的文件都可以通过上述方式生成。


相关文章
|
Web App开发 JavaScript 前端开发
网页VUE纯前端在线预览编辑Office,支持doc/docx、xls/xlsx、ppt/pptx、pdf等格式
随着互联网技术的不断发展,越来越多的企业开始采用在线办公模式,微软Office Word 是最好用的文档编辑工具,然而doc、docx、xls、xlsx、ppt、pptx等格式的Office文档是无法直接在浏览器中直接打开的,如果可以实现Web在线预览编辑OffIce,肯定会还带来了更高效、便捷的办公体验,为我们的工作带来了更多可能性。
4087 21
|
6月前
|
人工智能 缓存 算法
大模型推理优化:推测解码技术详解
本文深入解析大语言模型推理中的革命性技术——推测解码(Speculative Decoding)。通过分析自回归解码的序列性瓶颈,详细阐述推测解码的核心原理、验证机制和实现策略。文章包含完整的算法实现、多方案性能对比以及实际部署指南,展示如何在不影响生成质量的前提下将推理速度提升2-3倍。
793 0
|
Java Spring
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
`@RequiredArgsConstructor(onConstructor = @__(@Autowired))` 是一个注解,通常用于在类中生成一个包含所有`final`和`@NonNull`注解的字段的构造函数,并且对这些字段进行自动注入(使用Spring框架的`@Autowired`注解)。让我们详细解释一下: 1. **`@RequiredArgsConstructor` 注解:** - **作用:** Lombok 提供的注解,用于自动生成类的构造函数。 - **生成的构造函数:** 生成一个包含所有`final`字段的构造函数,同时也包括被`@NonNull`注解
1778 1
|
XML 存储 C#
自己动手做一个批量doc转换为docx文件的小工具
自己动手做一个批量doc转换为docx文件的小工具
537 0
|
SQL 存储 关系型数据库
如何巧用索引优化SQL语句性能?
本文从索引角度探讨了如何优化MySQL中的SQL语句性能。首先介绍了如何通过查看执行时间和执行计划定位慢SQL,并详细解析了EXPLAIN命令的各个字段含义。接着讲解了索引优化的关键点,包括聚簇索引、索引覆盖、联合索引及最左前缀原则等。最后,通过具体示例展示了索引如何提升查询速度,并提供了三层B+树的存储容量计算方法。通过这些技巧,可以帮助开发者有效提升数据库查询效率。
1204 2
|
8月前
|
数据采集 JavaScript 物联网
智能工厂四大核心系统:ERP/PLM/MES/WMS规划架构图详解
企业数字化转型需要构建ERP、PLM、MES、WMS等核心系统协同运作的完整体系。ERP整合企业资源管理,PLM管理产品全生命周期数据,MES实现车间生产执行管控,WMS优化仓储物流管理。各系统通过数据流紧密衔接:PLM为ERP提供BOM数据,ERP为MES下达生产计划,MES与WMS协同物料调度。
|
存储 IDE 开发工具
ModelScope魔搭25年1月版本发布月报
随着2025年帷幕的缓缓拉开,ModelScope团队怀着新年新气象的美好期许,为广大开发者带来了1月份的重磅更新。
634 13
|
Java 容器
SpringBoot3 事件和监听器
SpringBoot3 事件和监听器
|
Prometheus 监控 Cloud Native
自定义grafana_table(数据源Prometheus)
综上所述,自定义 Grafana 表格并将 Prometheus 作为数据源的关键是理解 PromQL 的查询机制、熟悉 Grafana 面板的配置选项,并利用 Grafana 强大的转换和自定义功能使数据展示更为直观和有洞见性。随着对这些工具更深入的了解,您将可以创建出更高级的监控仪表盘,以支持复杂的业务监控需求。
1300 1
|
人工智能 前端开发 JavaScript
前端学习路线图
前端学习路线图
561 2