截圖與視覺檢查

結合資料回讀、真實渲染截圖與簡報版面檢查。

視覺檢查將內容模型轉換為可驗證的影像與版面證據。Agent 先檢查資料與公式,再檢查真正渲染出的文字、圖形與頁面;發現問題後透過 Facade 修正,再驗證新的內容狀態。

三類證據,回答不同問題

證據可確認的內容
結構化讀回原始值、公式與結果、段落和物件屬性。
PNG 截圖可見內容、裁切、圖表、顏色與整體排版。
版面診斷依渲染幾何回傳規則、物件 ID、邊界與問題位置,方便定向修正。

準備內容狀態與依賴

截圖與 Layout Lint 接收已物化 UnitData,不負責連線遠端 target 或解讀 changeset。協作內容先 pull(),公式修改後等待計算套用,再 exportUnitData()。Worktree 必須取對應草稿;應用程式可隨報告儲存目標、revision 與範圍,明確指出審閱狀態。

主 Unit Snapshot 不包含所有依賴。跨 Unit 公式以 formulaReferenceUnits 提供 Sheet/Relational Table 來源,嵌入內容以 embeddedUnits 提供子 Unit。Render Page 先物化依賴再建立宿主。UUID 圖片可由 resolveUnitScreenshotImageAssets() 與應用程式 resolver 補齊;這是 best-effort 解析,仍需核查遺漏資源。

從內容到穩定畫面

100%

univer-render-runtime 在 Node.js 託管應用程式建置的 Render Page 並啟動瀏覽器,頁面透過產品外掛還原內容,雙方驗證協定版本。同一 Runtime 的操作進入循序佇列,可跨多輪檢查重用,最後由擁有者 close()。

就緒條件依產品而異。公式形狀等待結果離開 pending,必要時等待連續影格像素穩定,避免擷取中間動畫;Relational Table 等待字型、計算、活動 table/view 與 DOM/Canvas 版面穩定。離開 pending 仍可能是錯誤結果,必須核對值與狀態。

目前以主 UnitData、公式來源與嵌入內容的序列化結果產生雜湊,作為渲染工作階段 key。同 Unit ID 的資料變更也會產生不同 key,避免只按 ID 重用舊畫面。

依產品選擇範圍

產品範圍與輸出
Sheet指定工作表與 A1 範圍,輸出區域 PNG;重要結果宜明確指定範圍。
Doc選擇或列舉頁面,輸出逐頁 PNG。
Slide以 1 起始頁碼或 page ID 選擇,可額外產生 contact sheet。
Relational Table以瀏覽器 DOM + Canvas 擷取開啟後的活動表格/檢視工作台。
Canvases全頁內容邊界,或互斥的 region / elementIds;可加 padding 並回傳版面證據。

unit-screenshot 回傳 bytes、尺寸、頁面/區域身分與建議檔名,由應用程式儲存。Scale 為 0.1–4,可設定 maxPages 與單圖 maxPixels。放大兩倍約有四倍像素,大量內容宜分區檢查。PDF 不屬於此五產品入口。

截圖與版面檢查共用內容狀態

以下對同一 Slide 資料與公式來源截圖並執行 Layout Lint。renderRuntime 是既有渲染 Runtime,slideData 為準備好的快照。能力本身不寫檔案,頁面建置與關閉方式見 AI SDK 視覺檢查。

TypeScript
import { createUnitScreenshot } from '@univer-cli/unit-screenshot'import { createUnitLayoutLint } from '@univer-cli/unit-layout-lint'const source = {  unitType: 'slide' as const,  unitData: slideData,  formulaReferenceUnits,}const screenshot = createUnitScreenshot({ runtime: renderRuntime })const lint = createUnitLayoutLint({ runtime: renderRuntime })const capture = await screenshot.capture({  ...source,  target: { kind: 'slide-pages', pages: [1], scale: 2 },})const report = await lint.lint({ ...source, pages: [1] })

Slide:以字形墨跡定位問題

Layout Lint 使用瀏覽器產生的版面事實:declared 是模型宣告框,文字 ink 是字形實際墨跡範圍,結合排版、對齊與旋轉映射至頁面座標。文字框未越界,不代表字形也未越界。

目前規則檢查依據
text-off-page實際文字 ink 超出頁面。
text-escapes-container文字明顯溢出匹配到的較小不透明容器。
text-overlaps-text兩段實際文字 ink 顯著重疊。

報告的 coverage.pages 與 coverage.rules 標明檢查範圍。Finding 帶 pageId、元素 id、text.ink,以及相關 overflow、container 或 other,穩定 fingerprint 可比對修復輪次。目前 finding 都是供搭配截圖複查的 warning;空清單僅代表所選範圍未觸發這些規則。

Canvases:驗證實際連線路徑

Canvases 截圖額外回傳 layoutAnalysis,包含瀏覽器解析的 routes、issues 與 summary,與僅支援 Slide 的 unit-layout-lint 為不同入口。模型中的自動連線可能尚未解析,應以 source: 'rendered' 檢查最終路徑。

診斷可指出連線穿越元素、交叉、箭頭碰撞或標籤衝突,提供 connectorIds、elementIds 與 focusBounds。Agent 可修正對應物件,再做 region 或 elementIds 局部截圖,最後回到全圖確認,將視覺問題落實為具體 Facade 修改。

將檢查證據帶入交付

100%

一併保留結構化結果、範圍與頁面資訊、圖片及診斷。截圖不能證明公式正確,Lint 也不能取代視覺判斷。工具列、焦點與彈出選單等完整互動仍應在 Web 編輯器驗收,跨 Unit 依賴也要確認載入。

在 Worktree 標記 Ready 前完成檢查,讓審閱者對照內容變更與視覺證據。執行機制見無頭與伺服器計算,編排見 Agent 與自動化。

返回功能總覽

你覺得這篇文檔如何?

© 2026 DreamNum Co., Ltd.