Fixed the PDF Rendering Overflow Issue and Updated the Logic for Rendering PDFs

This commit is contained in:
马一丁
2025-11-19 11:35:58 +08:00
parent a07d6c5292
commit d4f8301fd5
3 changed files with 426 additions and 43 deletions
+22 -9
View File
@@ -405,12 +405,13 @@ class HTMLRenderer:
def _render_body(self) -> str:
"""
拼装<body>结构,包含头部、导航、章节和脚本。
新版本:移除独立的cover section,标题合并到hero section中。
返回:
str: body片段HTML。
"""
header = self._render_header()
cover = self._render_cover()
# cover = self._render_cover() # 不再单独渲染cover
hero = self._render_hero()
toc_section = self._render_toc_section()
chapters = "".join(self._render_chapter(chapter) for chapter in self.chapters)
@@ -433,7 +434,6 @@ class HTMLRenderer:
{header}
{overlay}
<main>
{cover}
{hero}
{toc_section}
{chapters}
@@ -502,6 +502,7 @@ class HTMLRenderer:
def _render_hero(self) -> str:
"""
根据layout中的hero字段输出摘要/KPI/亮点区。
新版本:将标题和总览合并在一起,去掉椭圆背景。
返回:
str: hero区HTML,若无数据则为空字符串。
@@ -509,6 +510,11 @@ class HTMLRenderer:
hero = self.metadata.get("hero") or {}
if not hero:
return ""
# 获取标题和副标题
title = self.metadata.get("title") or "智能舆情报告"
subtitle = self.metadata.get("subtitle") or self.metadata.get("templateName") or ""
summary = hero.get("summary")
summary_html = f'<p class="hero-summary">{self._escape_html(summary)}</p>' if summary else ""
highlights = hero.get("highlights") or []
@@ -535,14 +541,21 @@ class HTMLRenderer:
"""
return f"""
<section class="hero-section">
<div class="hero-content">
{summary_html}
<ul class="hero-highlights">{highlight_html}</ul>
<div class="hero-actions">{actions_html}</div>
<section class="hero-section-combined">
<div class="hero-header">
<p class="hero-hint">文章总览</p>
<h1 class="hero-title">{self._escape_html(title)}</h1>
<p class="hero-subtitle">{self._escape_html(subtitle)}</p>
</div>
<div class="hero-side">
{kpi_cards}
<div class="hero-body">
<div class="hero-content">
{summary_html}
<ul class="hero-highlights">{highlight_html}</ul>
<div class="hero-actions">{actions_html}</div>
</div>
<div class="hero-side">
{kpi_cards}
</div>
</div>
</section>
""".strip()