你好,这是文章系列的最后一篇文章。您可以将文本记录导出到格式化的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