1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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)
|