浦口区网站建站,购物商城英语,做电气的什么招聘网站好,wordpress插件怎么安在跨平台环境中实现写word时#xff0c;如果用现成的库#xff0c;就会涉及跨平台兼容性问题#xff0c;比如在安卓与java中实现写word的功能。还有一个问题就是#xff0c;完全用程序生成word文档#xff0c;工作量较大。所以采用了模板替换的方法。
docx文档本质就是一…在跨平台环境中实现写word时如果用现成的库就会涉及跨平台兼容性问题比如在安卓与java中实现写word的功能。还有一个问题就是完全用程序生成word文档工作量较大。所以采用了模板替换的方法。
docx文档本质就是一个zip文件只要将它的扩展名改成zip就能解压出一系列的xml文件与图片文件它的目录结构如下 [Content_Types].xml定义了文档中所有文件的 MIME 类型。 _rels/包含了文档的元数据和关系信息有一个特殊的文件 .rels定义了文档的内部链接和外部链接。 docProps/这个文件夹包含文档的属性信息如标题、作者、主题等。 app.xml包含应用程序特定的属性core.xml包含核心属性如标题、作者、创建日期等custom.xml包含自定义元数据。 word/这个文件夹包含文档的主要内容和设置。 document.xml这是文档的主要 XML 文件包含了文本、样式、段落、表格和其他内容footer1.xml:页脚header1.xml:页眉styles.xml包含文档中使用的样式定义settings.xml包含文档的设置如页面布局、标题等fontTable.xml包含文档中使用的字体列表numbering.xml包含文档中的编号格式定义theme/包含文档的主题信息如颜色方案、字体方案等media/包含文档中使用的图像和其他媒体文件。
DOCX 文件的 XML 结构是层次化的通常以 w:document 作为根元素然后包含以下主要部分
w:body包含文档的主体内容如段落 (w:p)、表格 (w:tbl)、图片 (w:drawing) 等w:p段落元素包含文本和格式化信息w:r运行元素表示文本的一段连续区域可以包含文本 (w:t) 和格式化信息w:t文本元素包含实际的文本内容w:tbl表格w:trw:tc表格中的行与列。
每个 XML 文件都遵循 OOXML 的命名空间规则并且使用特定的 XML 模式进行定义。
主要内容在word目录下通常关注word目录下的document.xmlheader1.xml、footer1.xml以及media子目录下的图片文件。
在程序中产生的数据通常是规则的比如表格数据如下图非常适合传给freemarker由它替换到word目录下三个xml文件以及media子目录下的文件。注意图片不能用base64格式需要将它转成二进制格式一个小遗憾如果能用模板定义就更简单了。 模板制作方法也很简单用office或wps写一个文档定义好格式在需要占位的地方写上特定的内容只要在xml中容易找到就可以。然后将docx扩展名改成zip解压后在word目录下的document.xmlheader1.xml、footer1.xml中将内容都改成指定的占位符就行了。
freemarker的语法这里就不介绍了。freemarker在安卓中有点点问题具体不记得了。我用的是js把几个xml文档改成js程序样例如下
var xml[];
xml.push(....);
if(conditions...) xml.push(....)
.....
xml.join();//输出最后的内容
把它们放到一个js引擎中比如graalvm的js引擎安卓上的quickjs引擎等因为都是基本js语法不会有兼容性问题。js执行的最终输出结果就是所需的xml文档。
生成完毕按原来的结构压缩成zip包再改成docx扩展名就可以了。
至简网格的服务器要在java与安卓中都能运行兼容性就是个大问题并且资源占用不可能像普通服务器那样没有节制所以用的就是这种方法。因为本身要用js引擎做接口实现的扩展所以js引擎是必须的顺带着部分模板就用js实现拼接。