背景
孩子上小学要开始学认字了,每周有好多字要打印,要是直接拿一张A4纸去打印,字的排版就显得尤为重要,排过来排过去,总感觉不够正式。就想去网上搜一个可以下载的田字格模板。某度搜了半天,倒是搜到一堆好看的模板,要不就是收费下载,要不就是开VIP下载,还有更过分的,打着免费下载的旗号,下载之后,其实是一个免费的app,app可以选择模板制作各种word,要打印或导出的时候就让开永久VIP或者按月的VIP。哥啥东西没见过,套路呀,真多!之前就为了下载一个ppt模板开了个永久VIP,反正看着也便宜,永久的才39.9,谁知道开完没过多久网站就没了,我估计是换了个网站又继续运营去了。跟现在的培训机构跑路一个道理。那我果断不能开VIP啊,就捉摸着自己整个word来吧。
先看一下成品,看看是不是你们想要的,如果不是,请出门左拐去隔壁。
话不多说,直接开干。下面我会详细的来说一下怎么操作吧
- 新建一个word
- 在word上画田字格
- 我用wps,直接插入一个表格
插入之后是这样的,别慌
我们需要调整一下表格的长度和宽度,选中表格,右键,打开表格属性
调整行和列的高度为0.8,这里可以根据个人爱好来调整田字格的大小
调整之后的样子
我们可以点击右侧的加号来添加田字格的数量,直到顶满(这里可以先不做,可以直接复制完成之后的田字格)
- 接下来要将田字格中间的横和竖转换成虚线
选中第一个田字格,同样是右键,打开边框和底纹
先选择方框,线型选择实线(把方框变实线)
再选择自定义,线型选择虚线,颜色根据个人爱好设置,选择右侧的横线和竖线
就变成了一个田字格,还可以根据个人爱好选择线条的宽度,这样一个田字格就做好了
突然发现,要把这一排都变成田字格还挺麻烦,接下来就来复制吧,先把后边的格子选中,删除,再点➕,复制田字格
这里复制出来的田字格边界不清晰,还得设置,这块儿没别的好办法,一个格子一个格子设置吧,仍然是打开边框和底纹 来设置,这里也比较简单,第一个田字格不需要设置,后边选中格子之后点击左侧竖线即可
相信细心的朋友也都发现了,这里还有对角线,可以画米字格了,有需要的朋友可以学起来
好了,到此一行田字格完成
那就有人疑惑了,这个格子怎么写字呢。。。。因为你写的字很可能就写到格子里了,比如这样的
- 如何写出楷体的字体
插入一个文本框
这里写字,调整字体为楷体,大小为小初,并且调整边框颜色和背景色为无
这个文本框中文字稍微靠下靠右,所以需要将格子左移上移一点点,正好对应田字格的正中央。这样的字体看起来端庄大方。
下面就是复制这个文本框给每一个田字格补充字了
你只需要不停的复制粘贴就可以了,很快就可以得到一个完整的田字格文档啦
是不是很有成就感,你以为这就完啦?并没有
首先这样做出来的田字格相当于是一个模板,每次都需要复制出来一份,删除旧的文字,写上新的文字,看似很简单,实则一点儿也不难。但就是挺浪费时间。
接下来就有点专业了,要用代码去提高生产效率。非专业人士就到这结束吧。
我想只输入一行文字,他自动帮我填充到表格中。
- 首先将模板另存为xml格式,打开之后你肯定不认识里面的内容,将其格式化一下。
- 通过springboot+freemarker实现自动将输入的文字填充到word中。
话不多说,上代码
talk is cheap, show me the code
java
private final Configuration configuration;
@GetMapping("/testdoc")
private ResponseEntity<byte[]> testDoc(@RequestParam(name = "word") String word) throws IOException, TemplateException {
Map<String, Object> dataModel = new HashMap<>();
for (int i = 0; i < word.length(); i++) {
dataModel.put("str" + i, word.charAt(i));
}
Template template = configuration.getTemplate("test.ftl");
String processedHtml = FreeMarkerTemplateUtils.processTemplateIntoString(template, dataModel);
// 将HTML转换为Word文档(此处简化处理,实际可能需要使用Apache POI等库)
byte[] wordBytes = convertHtmlToWord(processedHtml);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "document.docx");
return new ResponseEntity<>(wordBytes, headers, HttpStatus.OK);
}
private byte[] convertHtmlToWord(String html) {
// 这里省略了HTML转Word的具体实现,可以使用第三方库如Apache POI等
return html.getBytes(); // 这只是示例,实际返回的应该是Word文档的字节流
}
代码比较简单
yml文件配置
yml
spring:
freemarker:
suffix: .ftl
charset: UTF-8
template-loader-path: classpath:/templates/
xml文件改一下后缀放到这个位置
pom.xml文件需要引这个
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
到这里你可以对外提供服务了,请求get接口,直接可以生成一个doc文件
http://localhost:8080/testdoc?word=你好吗
后边媳妇再要打印认字卡,可以直接通过这种方式生成了。撒花✿✿ヽ(°▽°)ノ✿