ReportGeneration/report_generation.py

88 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from jinja2 import Environment, FileSystemLoader
import pdfkit
import config
import pypandoc
def render_html(template, output_file_path):
# 定义报告数据
report_data = {
'report_title': '电动机起动分析报告',
'sections': [
{'title': '章节一', 'content': '内容一'},
{'title': '章节二', 'content': '内容二'}
],
'static_descriptions': [
{'name': '组件1', 'description': '这是组件1的静态描述内容。'},
{'name': '组件2', 'description': '这是组件2的静态描述内容。'}
],
'dynamic_contents': ['动态内容1', '动态内容2'],
'naming_rules': '报告的命名规则包括...',
'version_management': {
'current_version': '1.0',
'description': '初始版本',
'status': '可用'
},
'classification_attributes': '电动机态势感知类',
'table_data': [
{'col1': '数据1-1', 'col2': '数据1-2', 'col3': '数据1-3'},
{'col1': '数据2-1', 'col2': '数据2-2', 'col3': '数据2-3'}
],
'highlight_content': '这是高亮显示的内容。',
'images': [
{'src': config.image_path, 'alt': '图片1', 'caption': '这是一张示例图片1'},
{'src': config.image_path, 'alt': '图片2', 'caption': '这是一张示例图片2'}
],
'contact': {
'name': '张三',
'phone': '1234567890',
'email': 'zhangsan@example.com'
}
}
# 渲染模板
report_html = template.render(report_data)
with open(output_file_path, 'w', encoding='utf-8') as f:
f.write(report_html)
def html2pdf(html_path, pdf_path):
# 将HTML文件转换为PDF
options = {
'page-size': 'Letter',
'margin-top': '0.35in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'no-outline': None,
'enable-local-file-access': None
}
pdfkit.from_file(html_path, pdf_path, options=options)
print("pdf报告生成成功")
def html2docx(html_path, docx_path):
# 将HTML文件转换为WORD
pypandoc.convert_file(html_path, 'docx', outputfile=docx_path)
print("Word报告生成成功")
def html2docx_spire(html_path, docx_path):
from spire.doc import FileFormat,XHTMLValidationType,Document
# from spire.doc.common import *
document = Document()
document.LoadFromFile(html_path, FileFormat.Html, XHTMLValidationType.none)
document.SaveToFile(docx_path, FileFormat.Docx2016)
document.Close()
def main():
env = Environment(loader=FileSystemLoader(config.template_dir))
template = env.get_template("report_template.html")
render_html(template, config.output_html_path)
html2pdf(config.output_html_path, config.output_pdf_path)
html2docx(config.output_html_path, config.output_docx_path)
if __name__ == "__main__":
main()