你好,这是文章系列的最后一篇文章。您可以将文本记录导出到格式化的word文档中,以便于阅读。(大卫亚设,Northern Exposure)同样,相关代码都在gitee开源中。

整体架构

这一篇处于整个转换过程的第三阶段,如下图所示。

整个流程流

docx文档格式简介

先大致介绍一下docx文档格式。Docx实际上是压缩格式文件,因此可以手动将后缀更改为zip,然后解压缩。通常,主要内容结构位于解压缩的word文件中。

例如,下图是文本中只有“你好”一词的最简单的word文档。

Docx示例文档

文档后缀为。使用zip修改后解压缩文档时,word的主要内容如下

?嗯?Xml版本=' 1.0 ' encoding=' utf-8 ' standalone=' yes '?

W:文档

xmlns : MC=';

xmlns : w=';

xmlns : w 14=';

MC : ignorable=' w 14 w 15 w 16 se w 16 cid w 16 w 16 cex wp14 '

W:body

w : p w 143360 para id=' 6d 5 aff 05 ' w 143360 text id=' 678 c 6 fac ' w 3360 RS IDR=' 000933 a 6 ' w : rsidr default

W:r

W:rPr

w : r fonts w : hint=' Eastasia '/

/w:rPr

W:t你好/w:t

/w:r

/w:p

/w:body

/w:文档

从以上文件可以大致看到word文档的基本结构。

W:p是段落W3360R。段落中的行w:rPr是行样式信息W3360T。文本内容docx4j库的默认逻辑与上述XML配置结构相对应。也就是说,将上述XML的内容转换为相应的Java对象和方法,以实现文档创建、编辑等功能。

docx4j文档操作

基于docx4j库处理word文档。

首先,介绍docx4j相关性:

GroupIdorg.docx4j/groupId

工件docx4j-jax b-reference impl/工件id

版本8.1.6/版本

首先记录每个视频文件的对话,生成以下模式的表单:

内容表格范例

映射表的处理逻辑如下:

//建立标头

Tbl TBL=Con()。create TBL();

//设置表格默认样式,包括边框等

String strTblPr='w:tblPr '

Name

单击“”

w : TBL style w : val=' table grid '/'

W:tblW w:w=\

4;0\" w:type=\"auto\"/>" + "<w:tblLook w:val=\"04A0\"/>" + "</w:tblPr>"; try { TblPr tblPr = (TblPr) XmlU(strTblPr); (tblPr); } catch (JAXBException e) { log.error("基于XML解析生成TblPr出错", e); } // 设置标题行 Tr hearTr = Con().createTr(); ().add(hearTr); geneTblHearderCell(hearTr, "D9D9D9", 2629, docPart.createParagraphOfText("时间")); geneTblHearderCell(hearTr, "D9D9D9", 5667, docPart.createParagraphOfText("内容")); // 设置内容行 (taskId).forEach(result -> { Tr tr = Con().createTr(); ().add(tr); //创建第一个单元格 Tc tc1 = Con().createTc(); ().add(formatSecond()))); //创建第二个单元格 Tc tc2 = Con().createTc(); ().add())); //将单元格加入到表格中 ().addAll(tc1, tc2)); }); //将表格加入到文档中 docPart.getContent().add(tbl); //增加分页符 docPart.getContent().add(createNextPage());

有一点特别提醒下,建议尽量不要使用XmlU来生成对象,除了上述参考官方示例在创建表头TblPr外,本项目所有其他结构,均是采用java对象来构建。原因是直接基于xml解析,很容易出现命名空间的错误。

docx4j还支持将图片插入到文档中,例如:

//将图片写入到word文档中 inline inline = null; try { BinaryPartAbstractImage imagePart = BinaryPar(wordPackage, Files.readAllByte("doc\\;))); inline = imagePart.createImageInline("开源工程地址", "二维码图片", 1, 2, false); } catch (Exception e) { log.error("创建图片对象出现异常", e); } ObjectFactory factory = Con(); P p = (); R r = (); p.getContent().add(r); drawing drawing = (); r.getContent().add(drawing); drawing.getAnchorOrInline().add(inline);

以下是设置标题及章节,分别将内容样式设置为Title和Heading1即可:

//设置文档标题 mainDocumen("Title", THOMAS_DOCX_NAME); //取出第一行,作为章节名称 mainDocumen("Heading1", ());

生成目录也很简单:

//生成目录,该段内容要放到最后面 Toc.setTocHeadingText("目录"); TocGenerator tocGenerator = new TocGenerator(wordPackage); (5, " TOC \\o \"1-3\" \\h \\z \\u ", true);

需要提醒的是,generateToc方法中的第一个参数是将目录插入到文档中的位置,上述代码是将目录插入到第五个位置。

文档结构组装完成后,直接WordprocessingMLPackage的save方法即可保存文档。

最后

至此,我们终于完成将MP4视频中的对话,最终转化为文字,并且输出为一个格式规范的word文档,实现过程如有有错漏之处,敬请反馈,谢谢。

本系列采用《托马斯和朋友》动画视频作为素材,起源是孩子们特别喜欢这个动画节目,特别喜欢听托马斯的故事,为了更好的给孩子们讲托马斯睡前故事,一时兴起实现了这些功能,希望对你也有帮助

1.《【文件zip格式怎么转word】用手旋转视频文本(3- word导出)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《【文件zip格式怎么转word】用手旋转视频文本(3- word导出)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/2506636.html