issue: chat PDF export cuts lines of text in half at every page boundary

使用 Open WebUI 的“Stylized PDF Export”(默认开启)导出聊天 PDF 时,如果内容跨越多页,页面接缝处的文字行会被水平切成两半。该问题属于导出渲染按固定 A4 高度切片导致的版面缺陷,优先排查是否开启 Stylized PDF Export,并决定是否临时改用纯文本导

快速结论:使用 Open WebUI 的“Stylized PDF Export”(默认开启)导出聊天 PDF 时,如果内容跨越多页,页面接缝处的文字行会被水平切成两半。该问题属于导出渲染按固定 A4 高度切片导致的版面缺陷,优先排查是否开启 Stylized PDF Export,并决定是否临时改用纯文本导出。

适用环境:Open WebUI v0.13.0(Docker 安装),Ubuntu 26.04;报告者在最新 release 和当时的 dev 分支上均复现。Issue 未提供浏览器、Ollama、Python、CUDA、显卡等信息。

最快修复方案:暂无确认的一步修复方案。Issue 中已确认可用的临时规避方法:在 Settings > Interface 中关闭 Stylized PDF Export,改走纯文本 jsPDF 导出路径,分页发生在行与行之间,但会丢失格式。

注意事项:该 Issue 已被维护者关闭,且维护者明确表示不重新打开、不接受针对此问题的 PR;相关导出重构已列入计划,但没有明确时间,也不属于高优先级。临时规避只能保留纯文本,无法保留 Markdown 样式、代码块、表格等排版。

问题场景

在 Open WebUI 中打开一个包含多条较长助手回复的聊天(内容足以导出 3 页以上),保持 Settings > Interface > Stylized PDF Export 为默认开启状态,然后通过聊天 ... 菜单选择 Download > PDF document (.pdf)。导出的 PDF 中,每一处页面边界上的文字行都被水平切断:该行的上半部分位于第 N 页底部,下半部分位于第 N+1 页顶部。报告者提供的示例为 5 页 PDF,每页由 jsPDF + html2canvas-pro 生成一张 JPEG 图片,浏览器控制台没有报错。

报错原文

issue: chat PDF export cuts lines of text in half at every page boundary

原因分析

根据 Issue 中的代码分析,Stylized PDF Export 会把渲染后的聊天内容按固定 A4 像素高度切片,每页高度为 pagePixelHeight = 800 * 297 / 210,下一页从上一页结束处继续(offsetY += sliceHeight)。切片边界不考虑行或块(段落、列表项、代码行、表格行)的边界,因此任何跨过边界的行都会被切到两页上。相关逻辑出现在 src/lib/components/layout/Navbar/Menu.svelte,Sidebar/ChatMenu.svelte 和 notes/utils.ts 中也有同样逻辑。此前修复长聊天导出失败(“Canvas exceeds max size”)的 PR #32459 有意保留了这个行为,其描述明确说明跨页行仍会被切开。

报告者提出的可能修复思路是:利用为 #32459 构建的 blocks 列表(已记录每个叶子块的 top/bottom),在渲染每个切片前,把切片结束位置提前到第一个跨越 offsetY + pagePixelHeight 的块的 top,并且仅在该块短于一页时这样做,以保留超高代码块的正常切分;随后让 offsetY 按调整后的高度推进。该思路尚未被维护者采纳或验证。

环境排查

  • 确认 Open WebUI 版本是否为 v0.13.0,或是否已包含 PR #32459 的按页渲染逻辑。
  • 确认是否通过 Docker 安装,以及是否能在同一容器内复现导出问题。
  • 确认 Settings > Interface > Stylized PDF Export 是否处于开启状态。
  • 确认聊天内容是否足以生成 3 页以上 PDF,以便观察跨页处是否存在文字被切断。
  • 检查导出的 PDF 是否每页为一张 JPEG 图片(jsPDF + html2canvas-pro 输出),这与该问题路径一致。
  • Issue 未提供浏览器、Ollama、Python、CUDA 或显卡信息,这些不属于本问题的已确认排查项。

解决步骤

  1. 先按报告者的步骤复现:打开多页长聊天,保持 Stylized PDF Export 开启,通过 Download > PDF document (.pdf) 导出,并检查页与页之间的接缝处是否有文字被水平切断。
  2. 若需要在当前版本正常阅读聊天内容,进入 Settings > Interface,关闭 Stylized PDF Export,然后重新导出 PDF。此时使用纯文本 jsPDF 路径,分页会发生在行与行之间。
  3. 如果必须保留样式,可关注 Open WebUI 导出重构的后续进展;Issue 已确认该重构会覆盖此类问题,但目前没有明确时间表。
  4. 不要等待 Issue #33870 被重新打开或合并修复:维护者已明确关闭该 Issue,表示不接受针对此问题的 PR,并将其关联到仍在开放的重构 PR 作为跟踪项。

验证方法

关闭 Stylized PDF Export 后重新导出同一段聊天,打开 PDF 检查页面边界:文字行应完整保留在单页内,不再出现上半部分在第 N 页、下半部分在第 N+1 页的情况。同时确认导出内容仍完整,但会以纯文本形式呈现,不带格式。

参考来源

open-webui/open-webui #33870

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 33408

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注