PDF化:從HTML文檔到可檢索離線參考的完整指南)
簡(jiǎn)介GameBryo是常用于個(gè)人電腦與移動(dòng)平臺(tái)的游戲引擎網(wǎng)上成體系的資料較少且多以CHM格式流傳移動(dòng)端閱讀不便。這份PDF幫助手冊(cè)整理自官方文檔面向游戲開發(fā)者、美術(shù)師、策劃等不同角色。它從核心概念與工作流程講起再按讀者類型拆分美術(shù)與設(shè)計(jì)師可學(xué)習(xí)三維模型、紋理和動(dòng)畫的導(dǎo)入與管理新開發(fā)者可了解集成開發(fā)環(huán)境與工程配置資深開發(fā)者能深入性能優(yōu)化、調(diào)試與功能擴(kuò)展。手冊(cè)還包含常用接口參考、多語言文本支持、授權(quán)信息并細(xì)化在個(gè)人電腦上搭建項(xiàng)目所需的軟硬件要求、編譯環(huán)境和構(gòu)建參數(shù)。資源為單文件PDF大小約五十六兆字節(jié)無需安裝額外閱讀器在手機(jī)、平板或電腦上均可直接打開。目前已有一百九十人瀏覽學(xué)習(xí)適合希望高效入門GameBryo或需要查閱官方說明的開發(fā)者。手冊(cè)目錄層級(jí)清晰從歡迎頁開始系統(tǒng)學(xué)習(xí)或直接跳到構(gòu)建配置、接口參考等章節(jié)都能快速定位節(jié)省在零散社區(qū)和舊版幫助文檔中反復(fù)搜索的時(shí)間。1. GameBryo 幫助手冊(cè) PDF 版從“紙面文檔”到“可用參考”的最后一公里很多剛接觸 GameBryo 的開發(fā)者第一反應(yīng)是去翻引擎安裝目錄里的 HTML 幫助文檔或者去官網(wǎng)找在線 API。但真到做項(xiàng)目時(shí)就發(fā)現(xiàn)本地文檔的頁面切換太碎上下文一斷就得重新翻老項(xiàng)目編譯環(huán)境和新文檔版本對(duì)不上最頭疼的是離線環(huán)境或者開會(huì)投影時(shí)想快速定位某個(gè)渲染狀態(tài)機(jī)的接口定義鼠標(biāo)要點(diǎn)好幾層。把幫助手冊(cè)整理成 PDF 版本不是為了“有個(gè)文件好看”而是要把分散的引擎說明、類參考、示例代碼說明壓縮成一份可檢索、可批注、可離線分發(fā)的完整參考。這篇文章就是圍繞“GameBryo 幫助手冊(cè) PDF 版本”這件事講清楚它的內(nèi)容邊界、制作路徑、常見坑和一份能直接照做的整理與生成方案。它的價(jià)值不在“轉(zhuǎn)換”這個(gè)動(dòng)作而在把文檔變成真正能陪著項(xiàng)目走完的生命周期材料——尤其適合維護(hù)老游戲項(xiàng)目、需要給團(tuán)隊(duì)做引擎培訓(xùn)、以及長(zhǎng)期在無網(wǎng)環(huán)境開發(fā)的三類從業(yè)者。2. 先搞清 GameBryo 幫助手冊(cè)里到底有什么內(nèi)容盤點(diǎn)與 PDF 化的取舍2.1 幫助手冊(cè)的典型構(gòu)成不止是 API 列表GameBryo 是一套老牌游戲引擎它的幫助文檔體系通常由幾個(gè)層次組成引擎概念說明、類庫參考、工具使用說明、示例教程和版本遷移備注。我第一次整理它的時(shí)候以為就是把 HTML 文件批量轉(zhuǎn) PDF實(shí)際打開看才發(fā)現(xiàn)文檔里的內(nèi)容類型差異極大直接統(tǒng)一轉(zhuǎn)換會(huì)出現(xiàn)大量不可讀頁面。典型組成部分大致可以分成四類。第一類是概念性章節(jié)講場(chǎng)景圖管理、渲染管線、資源加載流程等文字多、圖片少適合線性閱讀。第二類是類參考Class Reference幾乎全是類的成員函數(shù)簽名、參數(shù)說明、返回值這種內(nèi)容最適合做 PDF 里的“檢索型”部分。第三類是工具手冊(cè)比如導(dǎo)出插件、動(dòng)畫編輯器的操作步驟里面有很多截圖和界面標(biāo)注。第四類是示例代碼片段散落在各個(gè)教程里沒有統(tǒng)一入口。PDF 化之前建議先按這個(gè)結(jié)構(gòu)把文檔“分層”。不區(qū)分內(nèi)容類型直接全部合并到一個(gè) PDF結(jié)果往往是概念章節(jié)和類參考混在一起目錄層級(jí)混亂檢索體驗(yàn)比 HTML 還差。我一般會(huì)建議把文檔拆成“概念與教程卷”和“API 參考卷”做成兩個(gè) PDF而不是強(qiáng)行合一本。2.2 哪些內(nèi)容適合進(jìn) PDF哪些內(nèi)容應(yīng)該直接舍棄或僅做索引這里要做一個(gè)明確的取舍。GameBryo 的文檔體系里有一些內(nèi)容天然不適合 PDF 化勉強(qiáng)做進(jìn)去只會(huì)讓文件體積失控、閱讀體驗(yàn)下降。不適合進(jìn) PDF 的主要有三類第一動(dòng)態(tài)生成的繼承關(guān)系圖。類繼承樹在 HTML 里是 JavaScript 動(dòng)態(tài)渲染的直接轉(zhuǎn) PDF 會(huì)變成空白或錯(cuò)誤布局。第二過大的源碼示例文件。有些示例頁面會(huì)把整段 .cpp 貼進(jìn)去幾十屏的內(nèi)容在紙質(zhì)排版里毫無必要。第三多語言切換段落。如果手冊(cè)同時(shí)包含多語言說明轉(zhuǎn)換時(shí)很容易出現(xiàn)亂碼或字符截?cái)?。適合進(jìn) PDF 的應(yīng)該是這些內(nèi)容的“提煉結(jié)果”概念章節(jié)的文字正文、類參考里的成員簽名、工具使用里的步驟描述和關(guān)鍵截圖、示例代碼的“摘要版”。換句話說PDF 版本的價(jià)值不在于“全”而在于“穩(wěn)”。內(nèi)容類型是否適合 PDF處理方式概念說明文字適合直接保留正文去掉側(cè)欄導(dǎo)航類成員函數(shù)簽名適合保留簽名和簡(jiǎn)要說明去掉繼承鏈 JS工具界面截圖看情況高清圖保留模糊圖直接舍棄動(dòng)態(tài)繼承圖不適合轉(zhuǎn)成靜態(tài)文本層級(jí)描述大段源碼部分適合截取關(guān)鍵函數(shù)不貼全文件版本遷移日志適合單獨(dú)成章放在手冊(cè)末尾這個(gè)取舍做完后續(xù)的 PDF 生成才有意義。否則你就是把一個(gè)不好用的網(wǎng)頁變成一本更不好用的“巨型打印件”。我當(dāng)時(shí)第一版就踩了這個(gè)坑把所有 HTML 直接丟給打印驅(qū)動(dòng)程序產(chǎn)出了一個(gè) 2000 多頁、目錄混亂、圖片缺失的 PDF基本沒法用。所以請(qǐng)記住PDF 版的本質(zhì)是“編輯產(chǎn)物”不是“轉(zhuǎn)換產(chǎn)物”。2.3 從文檔結(jié)構(gòu)反推 PDF 的目錄骨架做完內(nèi)容取舍下一步是設(shè)計(jì) PDF 的目錄骨架。GameBryo 幫助手冊(cè)的 HTML 版本通常自帶左側(cè)樹形導(dǎo)航這個(gè)導(dǎo)航的結(jié)構(gòu)基本可以直接復(fù)用為 PDF 書簽。但要注意HTML 導(dǎo)航樹的層級(jí)往往很深有些節(jié)點(diǎn)多達(dá)五層直接搬進(jìn) PDF 書簽會(huì)導(dǎo)致側(cè)邊欄展開困難。我常用的做法是只保留三層目錄。第一層是大部分引擎介紹、場(chǎng)景管理、渲染系統(tǒng)、動(dòng)畫系統(tǒng)、工具鏈、API 參考、版本遷移。第二層是每個(gè)大部分里的核心主題。第三層只保留那些“開發(fā)者真會(huì)去查”的細(xì)項(xiàng)比如某個(gè)具體渲染狀態(tài)類的名稱。超過三層的節(jié)點(diǎn)要么并入上一層要么作為正文里的交叉引用文字出現(xiàn)。這種三層結(jié)構(gòu)做出來的 PDF書簽可展開性最好也符合開發(fā)者查文檔的習(xí)慣——先找大部分再定位主題最后精確到類或函數(shù)。目錄結(jié)構(gòu)定好之后再開始動(dòng)手做轉(zhuǎn)換腳本才不會(huì)做到一半發(fā)現(xiàn)目錄亂套。3. 把 HTML 幫助手冊(cè)轉(zhuǎn)成 PDF 的完整操作兩條路線與參數(shù)設(shè)置3.1 路線一用命令行工具 配置文件批量轉(zhuǎn)換推薦常見做法是用無頭瀏覽器類工具把 HTML 逐個(gè)渲染成 PDF再按目錄順序合并。我一般用 Puppeteer 腳本處理因?yàn)?GameBryo 的 HTML 文檔里有大量 JavaScript 依賴單純用打印驅(qū)動(dòng)的轉(zhuǎn)換方式會(huì)丟失布局。第一步先寫一個(gè)頁面配置文件指明哪些 HTML 文件要轉(zhuǎn)、每個(gè)文件對(duì)應(yīng)的書簽標(biāo)題和層級(jí)。// config.js —— 轉(zhuǎn)換清單配置 module.exports [ { file: docs/Introduction.html, title: 引擎介紹, level: 1 }, { file: docs/SceneGraph/Overview.html, title: 場(chǎng)景圖管理, level: 1 }, { file: docs/SceneGraph/NodeClass.html, title: 節(jié)點(diǎn)類, level: 2 } ];這份配置的核心作用是建立“HTML 文件路徑、PDF 書簽標(biāo)題、書簽層級(jí)”的映射關(guān)系。后續(xù)的合并腳本完全依賴這份配置來生成目錄而不是靠文件名猜。第二步寫轉(zhuǎn)換腳本用無頭瀏覽器逐頁渲染并輸出 PDF。// convert.js —— 逐頁轉(zhuǎn) PDF 的核心腳本 const puppeteer require(puppeteer); const config require(./config.js); (async () { const browser await puppeteer.launch({ args: [--no-sandbox] }); const page await browser.newPage(); for (const item of config) { await page.goto(file:/// __dirname / item.file, { waitUntil: networkidle0, timeout: 60000 }); await page.pdf({ path: out/ item.file.replace(/\//g, _) .pdf, format: A4, printBackground: true, margin: { top: 15mm, bottom: 15mm, left: 12mm, right: 12mm }, headerTemplate: span/span, footerTemplate: span stylefont-size:8px;float:right;margin-right:10mm;span classpageNumber/span / span classtotalPages/span/span }); } await browser.close(); })();這個(gè)腳本里最關(guān)鍵的是waitUntil: networkidle0這個(gè)參數(shù)。GameBryo 的文檔頁面常常在加載后還要請(qǐng)求 CSS、字體、圖片資源如果改成networkidle2可能頁面還沒完全渲染就執(zhí)行打印出來的 PDF 缺樣式。printBackground必須設(shè)為 true否則文檔里的深色代碼塊會(huì)變成白底黑字閱讀體驗(yàn)大打折扣。頁眉頁腳我做了精簡(jiǎn)處理只保留頁碼因?yàn)?HTML 文檔自帶的標(biāo)題已經(jīng)寫進(jìn)正文了頁眉重復(fù)也沒意義。第三步把生成的單頁 PDF 按配置順序合并成一個(gè)文件。// merge.js —— 合并 PDF 文件 const PDFMerge require(pdf-merger-js); (async () { const merger new PDFMerge(); const config require(./config.js); for (const item of config) { const name out/ item.file.replace(/\//g, _) .pdf; await merger.add(name); } await merger.save(GameBryo_Manual.pdf); console.log(合并完成); })();合并這一步有個(gè)容易被忽略的問題PDF 文件合并后的書簽層級(jí)會(huì)丟失只剩下順序關(guān)系。所以在合并之后還要用 PDF 工具重新生成書簽。我常用的做法是在合并腳本執(zhí)行完之后再用命令行工具根據(jù)config.js里的 title 和 level 重新注入書簽——這一步很多人會(huì)漏掉做出來的 PDF 雖然頁數(shù)全對(duì)但沒有側(cè)邊欄目錄檢索效率大打折扣。3.2 路線二用現(xiàn)成轉(zhuǎn)換工具做快速產(chǎn)出適合一次性需求如果只是臨時(shí)需要一份能看能打印的 PDF不想寫腳本也可以用現(xiàn)成的文檔轉(zhuǎn)換工具。常見做法是用瀏覽器打開 HTML 文件后手動(dòng)調(diào)出打印面板選擇“另存為 PDF”。但這個(gè)方法有兩個(gè)硬傷一是只能單頁操作幾十上百個(gè) HTML 文件得一個(gè)個(gè)手動(dòng)處理二是打印面板里默認(rèn)的紙張尺寸、邊距和頁眉頁腳設(shè)置不統(tǒng)一生成的文件風(fēng)格差異很大。如果非要走這條路我一般會(huì)建議在打印面板里做三件事把紙張?jiān)O(shè)為 A4、把邊距設(shè)為“無”或“最小”、把“頁眉和頁腳”勾選去掉。這樣至少能保證單頁 PDF 的內(nèi)容完整。之后再用 PDF 合并工具把所有單頁合成一本。整體效率比腳本方案低很多適合文檔本身只有十幾頁的輕量場(chǎng)景。3.3 兩個(gè)方案的適用邊界與選型建議對(duì)比項(xiàng)腳本方案Puppeteer手動(dòng)打印方案適用文檔量幾十頁以上十頁以內(nèi)自定義程度高可控制書簽、頁眉、邊距低受瀏覽器打印面板限制可重復(fù)性高同一腳本可反復(fù)用低每次手動(dòng)操作技術(shù)門檻需要 Node.js 基礎(chǔ)幾乎為零如果你的 GameBryo 項(xiàng)目文檔是定期更新的強(qiáng)烈建議走腳本方案。因?yàn)槟_本本身可以掛在文檔更新流程里每次手冊(cè)更新后跑一遍就能生成新 PDF不用重新人工操作。我自己的習(xí)慣是把這套腳本存進(jìn)項(xiàng)目的工具目錄下后續(xù)維護(hù)成本幾乎為零。4. PDF 生成后的整理工序書簽、字體、圖片與頁邊距的四個(gè)必調(diào)細(xì)節(jié)4.1 書簽層級(jí)重建讓側(cè)邊欄變得可用合并后的 PDF 書簽是亂的或缺失的這是最影響日常使用的問題。用命令行工具注入書簽時(shí)我會(huì)基于前面config.js里的 title 和 level 字段生成一個(gè)書簽描述文件再執(zhí)行注入。書簽的標(biāo)題不要照搬 HTML 文件名文件名叫NodeClass.html不代表人看得懂書簽里應(yīng)該是“節(jié)點(diǎn)類”這種人類語言。4.2 中文字體嵌入檢查一個(gè)最容易翻車的環(huán)節(jié)GameBryo 的歷史文檔里混合了英文技術(shù)術(shù)語和中文說明轉(zhuǎn)換時(shí)中文字體經(jīng)常出問題。現(xiàn)象是PDF 打開時(shí)中文顯示正常但換一臺(tái)沒有安裝對(duì)應(yīng)字體的機(jī)器中文就變成方框或亂碼。這個(gè)問題的本質(zhì)是 PDF 里沒有嵌入字體子集。解決辦法是在 Puppeteer 腳本里設(shè)置字體路徑或者在合并后統(tǒng)一用工具做字體嵌入。我一般會(huì)在轉(zhuǎn)換腳本里提前處理await page.evaluateOnNewDocument(() { const fonts [Noto Sans CJK SC, Microsoft YaHei, SimSun]; // 這里檢測(cè)文檔使用的字體在缺失時(shí)動(dòng)態(tài)指定回退字體 });如果轉(zhuǎn)換后的 PDF 已經(jīng)生成也可以用命令行工具批量做字體嵌入。這個(gè)步驟不能省否則你辛苦做出來的 PDF 交付給同事后對(duì)方一打開看到的可能是一堆亂碼所有的排版工作都白費(fèi)。字體問題是我在整理過程里遇到的最“玄學(xué)”的一個(gè)坑——本地看完全正常換個(gè)環(huán)境就翻車后來才確認(rèn)是字體子集缺失。4.3 圖片與代碼塊的分頁處理避免內(nèi)容被腰斬GameBryo 文檔里的代碼塊和截圖在轉(zhuǎn) PDF 時(shí)經(jīng)常出現(xiàn)跨頁斷開的情況。代碼塊上半頁、下半頁或者截圖被攔腰截?cái)噙@在紙質(zhì)打印時(shí)尤其難看。處理方式是在 CSS 里增加分頁控制規(guī)則讓代碼塊和圖片盡量保持在同一頁。/* print.css —— 轉(zhuǎn)換時(shí)注入的打印樣式 */ pre, code, img { page-break-inside: avoid; } h1, h2, h3 { page-break-after: avoid; }在 Puppeteer 腳本里可以在頁面加載后注入這段樣式。page-break-inside: avoid的含義是“塊級(jí)元素內(nèi)部盡量不跨頁”這對(duì)代碼塊和圖片特別有效。標(biāo)題的page-break-after: avoid保證標(biāo)題不會(huì)孤零零地出現(xiàn)在頁面底部而正文從下一頁才開始。這兩個(gè)規(guī)則設(shè)置好之后PDF 的可讀性能提升一個(gè)檔次。4.4 頁邊距和頁碼的統(tǒng)一調(diào)整保持整本手冊(cè)風(fēng)格一致合并前的每個(gè)單頁 PDF 可能因?yàn)樵?HTML 的排版差異邊距不一致。我的做法是在page.pdf()參數(shù)里統(tǒng)一指定邊距而不是依賴 HTML 自帶的樣式。左右邊距設(shè) 12mm 左右上下邊距 15mm既能保證內(nèi)容區(qū)域足夠?qū)捰帜茉陧撃_放下頁碼。頁碼格式我習(xí)慣用“當(dāng)前頁 / 總頁數(shù)”因?yàn)?GameBryo 的手冊(cè)動(dòng)輒幾百頁使用者經(jīng)常需要知道總頁數(shù)來估算閱讀進(jìn)度。5. 使用 GameBryo PDF 手冊(cè)的常見問題與避坑排查現(xiàn)象、原因、解決5.1 現(xiàn)象PDF 里代碼塊全部變成純文本縮進(jìn)和顏色丟失這個(gè)坑很常見。原因是 HTML 文檔里的代碼塊使用了 JavaScript 代碼高亮庫直接打印時(shí)高亮樣式還沒執(zhí)行完打印動(dòng)作就開始了。解決方法是把waitUntil從networkidle2改成networkidle0并在打印前強(qiáng)制等待一小段時(shí)間確保高亮腳本執(zhí)行完畢?!靶W(xué)”一點(diǎn)說這個(gè)問題十有八九是“網(wǎng)絡(luò)空閑判斷太早”導(dǎo)致的高亮丟失。5.2 現(xiàn)象目錄書簽點(diǎn)了跳到錯(cuò)誤頁面原因基本可以鎖定在合并順序和書簽注入順序不一致。合并時(shí)是按配置數(shù)組順序添加的但書簽注入工具如果按文件名排序建立索引就會(huì)錯(cuò)位。解決方法是確保書簽注入的輸入文件順序和合并順序完全一致最穩(wěn)妥的做法是直接從合并腳本里導(dǎo)出順序清單再交給書簽注入工具。5.3 現(xiàn)象轉(zhuǎn)換后的 PDF 體積異常大一個(gè)文檔幾百 MBGameBryo 手冊(cè)里的圖片多半是位圖轉(zhuǎn)換為 PDF 時(shí)如果不做壓縮文件會(huì)膨脹得很夸張。解決方法是轉(zhuǎn)換前統(tǒng)一處理圖片把大面積截圖的顏色深度降到 24 位把純文字截圖轉(zhuǎn)成 PNG 壓縮格式然后在 PDF 生成時(shí)啟用圖片壓縮參數(shù)。體積控制的目標(biāo)是整本手冊(cè)控制在 50MB 左右太大不適合郵件附件太小可能是圖片質(zhì)量出了問題。5.4 現(xiàn)象HTML 里的“上一頁 / 下一頁”鏈接變成了 PDF 正文里的文字這個(gè)是直接把 HTML 做“打印為 PDF”最常見的毛病。原因是轉(zhuǎn)換工具把導(dǎo)航鏈接當(dāng)成了正文內(nèi)容渲染進(jìn)頁面。解決方法是在轉(zhuǎn)換前注入樣式把導(dǎo)航欄、面包屑、頁腳鏈接這些元素用display: none隱藏掉。經(jīng)驗(yàn)做法是轉(zhuǎn)換前先手動(dòng)在瀏覽器里打開一個(gè)頁面肉眼識(shí)別導(dǎo)航區(qū)域的選擇器再統(tǒng)一批量隱藏。// 注入樣式隱藏導(dǎo)航相關(guān)元素 await page.addStyleTag({ content: .nav, .breadcrumb, .footer-links, .sidebar { display: none !important; } #content, .main-content { margin-left: 0 !important; } });這個(gè)操作必須在讀取原始樣式之后執(zhí)行否則可能被覆蓋。加了!important能確保隱藏優(yōu)先級(jí)最高。這樣生成的 PDF 就只保留正文內(nèi)容版面干凈很多。5.5 現(xiàn)象英文文檔轉(zhuǎn)出來的 PDF 中出現(xiàn)了孤立字符或亂碼這通常不是轉(zhuǎn)碼問題而是壓縮或字體合成導(dǎo)致的。我遇到過某臺(tái)機(jī)器上生成的 PDF 個(gè)別字符變成方塊排查到最后發(fā)現(xiàn)是操作系統(tǒng)的字體緩存出了問題。解決方法是清空字體緩存后重新生成或者干脆在腳本里統(tǒng)一指定一個(gè)可靠的字體文件路徑不讓系統(tǒng)去自動(dòng)匹配字體。6. 把 PDF 手冊(cè)變成團(tuán)隊(duì)內(nèi)部“活文檔”的進(jìn)階用法6.1 建立版本對(duì)比機(jī)制讓手冊(cè)跟著代碼走GameBryo 的項(xiàng)目通常不是頻繁升級(jí)引擎的但每次升級(jí)都會(huì)伴隨文檔變化。我的習(xí)慣是把 PDF 生成腳本納入項(xiàng)目的文檔發(fā)布流程每次引擎版本變更時(shí)重新生成 PDF同時(shí)生成一份“版本差異摘要”列出從上一版到這一版變化了哪些章節(jié)。這份差異摘要比完整文檔更受團(tuán)隊(duì)歡迎因?yàn)榇蠹叶贾馈翱茨睦镒兞恕北取叭恐匦驴匆槐椤备咝У枚?。具體做法很簡(jiǎn)單保留上一版 PDF 的目錄結(jié)構(gòu)描述跑一個(gè)文本比較腳本找出新增和移除的文檔條目自動(dòng)生成變更記錄表附在 PDF 的最前面。6.2 批注與標(biāo)記把 PDF 作為項(xiàng)目知識(shí)沉淀的載體團(tuán)隊(duì)成員在 PDF 上做批注是沉淀項(xiàng)目知識(shí)最簡(jiǎn)單的方式。我通常會(huì)在團(tuán)隊(duì)內(nèi)部約定一套批注規(guī)則紅色批注表示“引擎踩坑記錄”、黃色高亮表示“本項(xiàng)目常用接口”、藍(lán)色下劃線表示“需要進(jìn)一步驗(yàn)證”。這些批注最終會(huì)反饋回 HTML 源文檔或團(tuán)隊(duì)知識(shí)庫里。PDF 的批注能力是 HTML 文檔很難替代的——你很難在瀏覽器里給一個(gè)網(wǎng)頁做圈注。從這個(gè)角度看GameBryo 幫助手冊(cè) PDF 版本的真正價(jià)值是在“官方文檔”和“項(xiàng)目經(jīng)驗(yàn)”之間搭了一座橋。官方 HTML 文檔永遠(yuǎn)是標(biāo)準(zhǔn)的但它不知道你的項(xiàng)目踩過哪些坑、哪些接口被坑過、哪些參數(shù)在這個(gè)版本里不能動(dòng)。而經(jīng)過批注的 PDF就成了記錄這些“項(xiàng)目特定知識(shí)”的載體。6.3 最后的教訓(xùn)與習(xí)慣在我經(jīng)手的幾個(gè)老引擎項(xiàng)目里最遺憾的事不是文檔整理得不夠快而是整理完之后沒人去維護(hù)。第一次花三天做出來的 PDF 手冊(cè)半年后引擎升級(jí)了一次就過時(shí)了。后來我把生成腳本改成可一鍵執(zhí)行的模式并且規(guī)定每次引擎變更后必須跑一次這個(gè)習(xí)慣才讓 PDF 真正“活”了起來。如果你準(zhǔn)備動(dòng)手整理 GameBryo 幫助手冊(cè)的 PDF 版本我的建議是先花半天時(shí)間把文檔內(nèi)容盤點(diǎn)清楚再花半天寫轉(zhuǎn)換腳本之后每次更新只需要幾分鐘。這套流程里最費(fèi)時(shí)間的永遠(yuǎn)是“決定哪些內(nèi)容要、哪些不要”而不是轉(zhuǎn)換本身。希望這篇筆記能幫你在整理文檔時(shí)少走幾個(gè)彎路也讓你手里的這份 PDF 手冊(cè)真正成為項(xiàng)目里有用的參考而不是躺在文件夾里的“紙面文檔”。本文還有配套的精品資源點(diǎn)擊獲取