diff --git a/src/infrastructure/reporting/generators.py b/src/infrastructure/reporting/generators.py
index faa9ad9..61a416f 100644
--- a/src/infrastructure/reporting/generators.py
+++ b/src/infrastructure/reporting/generators.py
@@ -26,6 +26,12 @@ from .templates import HTMLTemplates
MAX_CONCURRENT_DOWNLOADS = 10
AVATAR_CACHE_EXPIRE_TIME = 259200
+_VIEWPORT_TAG_PATTERN = re.compile(
+ r']*>', re.IGNORECASE
+)
+_DESKTOP_VIEWPORT_TAG = (
+ ''
+)
class ReportGenerator(IReportGenerator):
@@ -409,6 +415,7 @@ class ReportGenerator(IReportGenerator):
logger.error("HTML报告渲染失败:返回空内容")
return None, None
+ html_content = self._force_desktop_viewport(html_content)
logger.info(f"HTML 内容生成完成,长度: {len(html_content)} 字符")
# 保存 HTML 文件
@@ -479,6 +486,24 @@ class ReportGenerator(IReportGenerator):
encoded_relative_url = quote(relative_url, safe="/")
return caption + f"\n{base_url.rstrip('/')}/{encoded_relative_url}"
+ @staticmethod
+ def _force_desktop_viewport(rendered_html: str) -> str:
+ """统一导出 HTML 的 viewport,避免移动端按窄屏重排。"""
+ if _VIEWPORT_TAG_PATTERN.search(rendered_html):
+ return _VIEWPORT_TAG_PATTERN.sub(
+ _DESKTOP_VIEWPORT_TAG, rendered_html, count=1
+ )
+
+ head_close = rendered_html.lower().find("")
+ if head_close != -1:
+ return (
+ rendered_html[:head_close]
+ + f" {_DESKTOP_VIEWPORT_TAG}\n"
+ + rendered_html[head_close:]
+ )
+
+ return f"{_DESKTOP_VIEWPORT_TAG}\n{rendered_html}"
+
def generate_text_report(self, analysis_result: dict) -> str:
"""生成文本格式的分析报告"""
stats = analysis_result["statistics"]