iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
Software Development

從零打造網頁簡報編輯器系列 第 27 篇

Day 27|用批次格式與格式刷統一簡報樣式

  • 分享至 

  • xImage
  •  

系列:一張投影片背後的工程:從零打造網頁簡報編輯器

對應程式:package.json 版本 0.20.0 的工作目錄。批次文字格式與格式刷分別在 V18、V19 開發階段完成;本篇使用目前保留的實作與 2026-10-02 截圖,不宣稱存在同名 Git tag。

前兩篇已經讓簡報能夠播放,並輸出成 PDF 交付。接下來要讓製作過程更省事,先從多頁之間的樣式一致性開始。

做完幾頁簡報後,我發現兩個標題的字級不一樣,一個有底線,另一個用了不同顏色。逐一調整可以解決,但頁數一多就容易漏掉。

今天把這件事縮短成兩種操作:同一頁可以多選文字框,批次調整指定格式;已經有滿意的範例時,可以複製整套文字樣式,再跨頁套用。

多選後,先誠實顯示差異

選到兩個不同字級的文字框,屬性面板不應只拿第一個字級當作共同狀態。目前會把不一致的值顯示為「混合」:

https://ithelp.ithome.com.tw/upload/images/20261007/20182759i34LhcO5Ix.png

2026-10-02 的 Edge 自動化畫面。畫面也選到矩形,但文字格式只套用到兩個文字框。

getCommonTextStyle() 先把舊資料缺少的欄位依預設值解讀,再比較全部文字。例如字型預設為 sans-serif、粗體預設為 normal。全部相同才顯示共同值,不同則回傳 undefined,由介面呈現混合狀態。

按下混合的「粗體」時會全部設成粗體,再按一次全部取消。每個欄位只修改自己負責的格式;例如開啟底線,仍保留各文字框原本的刪除線。

這裡處理的是整個文字框,尚未支援同一框內某幾個字使用另一套格式。

批次操作只提交一個動作

如果迴圈對每個文字框各提交一次修改,按一次粗體可能產生好幾步復原。這一版先建立各目標的樣式 patch,再提交一次;以格式刷的提交為例:

updateDocument({
  type: 'element/set-styles',
  slideId: resolvedActiveSlideId,
  styles: copiedFormatPatches,
})

reducer 走訪該頁物件,只修改有對應 patch 的文字。圖片、圖形、文字內容與位置都保留;鎖定位置的文字框也能調整格式。

若 patch 套用後沒有差異,就沿用原文件,避免無意義的復原紀錄與儲存提示。對使用者來說,重要的結果是「一次批次設定,可以一次復原」。

格式刷複製當下的完整樣式

格式刷使用另一種意圖:把來源的整套文字樣式交給目標。它先以 copyTextStyle() 補齊所有預設欄位,再保存快照。

例如來源沒有粗體,目標原本有粗體,套用後就應取消目標粗體。如果只複製來源實際出現的可選欄位,反而可能留下目標舊樣式。

這份快照包含字型、字級、顏色、對齊、粗斜體、底線與刪除線、行距,以及目前版本的清單格式。它不包含文字內容、座標或大小,也不隨來源後來修改而改變。

https://ithelp.ithome.com.tw/upload/images/20261007/20182759EfthNeu6nQ.png

這是獨立的格式刷測試案例,與上一張混合值圖片使用不同文字內容,並非同一組物件的前後截圖。

操作順序如下:

  1. 單選來源文字框,按「複製格式」。
  2. 切到另一頁,多選需要統一樣式的文字框。
  3. 按「套用格式」,確認內容和位置保留。
  4. 按一次復原,兩個目標應一起回到各自原本的格式;重做則再次套用。

格式可以重複套用,不必每次回來源頁複製。目標若已經是相同格式,套用按鈕會停用。

暫存格式與文件各有自己的生命週期

複製格式只改變介面中的暫存值,不會寫入文件或建立復原紀錄。來源後來修改、刪除,也不會破壞已複製的快照。

重新整理或成功匯入另一份備份時,這個暫存會清空;已經套用到目標的格式則照常保存。匯入失敗時仍保留原專案與暫存,避免失敗流程額外破壞工作狀態。

這個區分讓格式刷可以跨頁使用,又不需要把一次性的剪貼內容塞進專案格式。

驗證一次操作是否真的完整

既有的介面與文字格式測試涵蓋混合值、預設欄位、跨頁套用、快照獨立、批次復原,以及重新整理與匯入時的暫存行為。本次完整測試重跑,10 個檔案、86 項通過。

2026-10-02 的 Edge 紀錄另確認批次修改、格式刷跨頁、來源後續修改、復原與重新載入。截圖取自那次的實際操作,沒有當成今天重新拍攝的畫面。

現在可以快速統一文字樣式;下一個障礙是「我知道文字還在,但被上面的圖形蓋住,點不到它」。下一篇用圖層面板解決這個問題。


上一篇
Day 26|把研究分享簡報輸出成 PDF
下一篇
Day 28|用圖層面板找回被遮住的物件
系列文
從零打造網頁簡報編輯器 共 29 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言