做了项目填报的应用,需要导出docx文件进行打印或者存档,导出的需要和原始的docx类似(之前是在纸上填饱的,现在做成线上),原始的docx很长很多,差不多有30页面。
现在的想法是在原始的文档上面预留一些模板标签,然后后台根据标签替换来生成正确的文档供用户导出。
比如文档的模板有可能是下面这样子的:
红色框里面的就是写的两个标签(用{}来表示标签),后台渲染了之后自动体会成实际的值。
目前用python-docx来做基本上能够实现,但是速度太慢了,比较复杂的文档,差不多5秒钟才能渲染好一页。
还有个问题是,有的地方还涉及到二维的表格,比如下面这种,可能涉及到需要用循环来渲染:
这方面有没有做过的前辈,给个思路或者方向,谢谢。
私は以前にあなたと似たようなプロジェクトをやったことがあり、要件も似ていましたが、それを Java で書きました。私のアイデアをあなたと共有できます。
Docx ファイルは本質的には圧縮パッケージです。サフィックス名
.docxを.zipに変更すると、その中にdocuments.xmlファイルが含まれていることがわかります。 Wordのデータを置換文字{replace}なども含めてこのファイルに置きます。そこで、私たちのアイデアは、
documents.xmlファイルを圧縮ファイルのように Word で読み取り、置換操作を実行することです。 Python での圧縮ファイルの読み取りについては、「Python による ZIP 形式ファイルの読み取りと書き込み」を参照してください。この観点から試してみると、より高速になる可能性があります。この時処理していたWordファイルは100ページ以上あり、Excelからデータソースを読み込む時間も含めると2~3秒程度で置き換えられました。データに HTML タグが含まれていない場合は、XML テンプレート + freemark タグを使用することをお勧めします