app.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from flask import Flask, render_template, request, send_file
  2. from docxtpl import DocxTemplate
  3. import subprocess
  4. import platform
  5. app = Flask(__name__)
  6. @app.route('/')
  7. def index():
  8. """显示表单页面"""
  9. return "it works"
  10. @app.route('/generate', methods=['POST'])
  11. def generate():
  12. """生成 Word 文档"""
  13. # 1. 获取用户提交的表单数据
  14. context = request.json;
  15. if context["tpl"]==None :
  16. return "请选择模板"
  17. # 2. 使用 DocxTemplate 渲染模板
  18. doc = DocxTemplate(context["tpl"])
  19. doc.render(context)
  20. savepath = "./save.docx"
  21. doc.save(savepath)
  22. if context["type"]=="pdf":
  23. pdf_output = "save.pdf"
  24. if platform.system() == "Darwin":
  25. subprocess.run(["soffice", "--headless", "--convert-to", "pdf","--outdir","./", savepath])
  26. else:
  27. subprocess.run(["libreoffice", "--headless", "--convert-to", "pdf","--outdir","./", savepath])
  28. savepath = pdf_output
  29. # 3. 将生成的文件返回给用户下载
  30. return send_file(
  31. savepath,
  32. as_attachment=True,
  33. download_name="generated_report.docx"
  34. )
  35. if __name__ == "__main__":
  36. app.run(host='0.0.0.0', port=9997)