|
@@ -0,0 +1,50 @@
|
|
|
|
+
|
|
|
|
+from flask import Flask, render_template, request, send_file
|
|
|
|
+from docxtpl import DocxTemplate
|
|
|
|
+import subprocess
|
|
|
|
+import platform
|
|
|
|
+
|
|
|
|
+app = Flask(__name__)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@app.route('/')
|
|
|
|
+def index():
|
|
|
|
+ """显示表单页面"""
|
|
|
|
+ return "it works"
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@app.route('/generate', methods=['POST'])
|
|
|
|
+def generate():
|
|
|
|
+ """生成 Word 文档"""
|
|
|
|
+ # 1. 获取用户提交的表单数据
|
|
|
|
+ context = request.json;
|
|
|
|
+
|
|
|
|
+ if context["tpl"]==None :
|
|
|
|
+ return "请选择模板"
|
|
|
|
+
|
|
|
|
+ # 2. 使用 DocxTemplate 渲染模板
|
|
|
|
+ doc = DocxTemplate(context["tpl"])
|
|
|
|
+ doc.render(context)
|
|
|
|
+ savepath = "./save.docx"
|
|
|
|
+
|
|
|
|
+ doc.save(savepath)
|
|
|
|
+
|
|
|
|
+ if context["type"]=="pdf":
|
|
|
|
+ pdf_output = "save.pdf"
|
|
|
|
+ if platform.system() == "Darwin":
|
|
|
|
+ subprocess.run(["soffice", "--headless", "--convert-to", "pdf","--outdir","./", savepath])
|
|
|
|
+ else:
|
|
|
|
+ subprocess.run(["libreoffice", "--headless", "--convert-to", "pdf","--outdir","./", savepath])
|
|
|
|
+ savepath = pdf_output
|
|
|
|
+
|
|
|
|
+ # 3. 将生成的文件返回给用户下载
|
|
|
|
+ return send_file(
|
|
|
|
+ savepath,
|
|
|
|
+ as_attachment=True,
|
|
|
|
+ download_name="generated_report.docx"
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+if __name__ == "__main__":
|
|
|
|
+ app.run(host='0.0.0.0', port=9997)
|
|
|
|
+
|