Maison > Questions et réponses > le corps du texte
做了项目填报的应用,需要导出docx文件进行打印或者存档,导出的需要和原始的docx类似(之前是在纸上填饱的,现在做成线上),原始的docx很长很多,差不多有30页面。
现在的想法是在原始的文档上面预留一些模板标签,然后后台根据标签替换来生成正确的文档供用户导出。
比如文档的模板有可能是下面这样子的:
红色框里面的就是写的两个标签(用{}来表示标签),后台渲染了之后自动体会成实际的值。
目前用python-docx来做基本上能够实现,但是速度太慢了,比较复杂的文档,差不多5秒钟才能渲染好一页。
还有个问题是,有的地方还涉及到二维的表格,比如下面这种,可能涉及到需要用循环来渲染:
这方面有没有做过的前辈,给个思路或者方向,谢谢。
三叔2016-10-22 16:49:51
恰好之前做过一个跟你类似的项目,需求也类似,不过我是用Java写的,思路可以给你分享下。
Docx文件本质上是一个压缩包,你把后缀名 .docx 改成 .zip 就可以用普通压缩文件打开了,可以看到里面有一个documents.xml 的文件,word的核心数据就是放在这个文件里面的,包括你的替换符 {replace} 等。
所以,我们的思路就是按照压缩文件一样来读取word中的 documents.xml 的文件,然后做替换操作。关于python读取压缩文件,可以参考这篇文章:《python读写zip格式文件》,你可以尝试从这个角度试试看,或许可以快一些。我们当时处理的word文件有100多页,花了2~3秒左右替换好,这个时间还包括了从Excel中读取数据源的时间哦。