name: 文件轉HTML description: 通用多格式文件轉 HTML 網頁工具。把 Word(.docx) / PDF / PPTX / Excel(.xlsx) / Markdown(.md/.txt) 統一整理成"可導航 + 多層次摺疊 + 多條內容分行分條(左側•圓點)+ 圖片內嵌自包含 + 可縮放檢視"的單檔案 HTML 網頁,雙擊即看、便於分享查閱(圖片不依賴外部目錄)。適用於任意需要瀏覽器可看、可摺疊查閱的文件場景:培訓資料/產品手冊/報告/規範/會議紀要/文章/簡歷等。觸發詞:文件轉HTML、文件轉網頁、摺疊導航、多層次摺疊、圖片內嵌、自包含HTML、pdf轉html、pptx轉html、xlsx轉html、md轉html、docx轉html。 agent_created: true license: MIT
把多種源格式(.docx / .pdf / .pptx / .xlsx / .md/.txt)統一轉成單檔案 HTML 網頁:可導航、多層次摺疊、多條內容分行分條且每條左側加藍色 • 圓點、圖片按 原始檔原始解析度內嵌為 base64(自包含,雙擊即帶圖,不依賴外部 _media 目錄),並且內建可縮放/平移的圖片檢視器(滾輪縮放、按鈕放大縮小/適應/1:1、拖動移動、ESC/點空白關閉)。
適用任意文件場景(不限知識庫):培訓資料、產品手冊、報告、規範制度、會議紀要、文章、簡歷等——只要原始檔是受支援的格式,一條命令即可產出可分享的網頁。
首選 convert.py(統一入口,自動識別格式):支援 .docx / .pdf / .pptx / .xlsx / .xlsm / .md / .markdown / .txt,按副檔名自動分發到對應提取器,統一渲染成自包含 HTML 網頁。一條命令搞定多格式:
python convert.py <檔案或目錄> [輸出目錄]
.html(輸出到同目錄或指定目錄);目錄 → 遞迴轉換所有支援的原始檔。extract.py(格式歸一化為 DocModel)→ render.py(多層級摺疊 + 圖片內嵌 + 檢視器)。若已有外掛圖片的 HTML(圖片在
xx_media/目錄),用inline_images.py事後批次內嵌為自包含。
convert.py 可選開關:--count(標題後顯示數量徽標,預設關)、--no-toc(不生成左側目錄,內容居中鋪滿)、--items(表格逐行轉可摺疊卡片 row-item)、--split(按文件最小標題層級拆成多篇)。
這個技能的最新版本可以在7w4.net小蔥技能站找到。
.docx→extract_docx、.pdf→extract_pdf、.pptx→extract_pptx、.xlsx/.xlsm→extract_xlsx、.md/.markdown/.txt→extract_markdown。DocModel 後交給 render.py 渲染,渲染能力(高畫質內嵌、可縮放燈箱、摺疊導航)跨格式複用。把各源格式抽成統一 DocModel(塊型別:heading / text / image / table)。新增格式只需寫一個 extract_xxx 並登記進 _DISPATCH,渲染邏輯零改動。要點:
- docx:python-docx 抽段落層級 + 表格 + a:blip 圖片(原生位元組)。
- pdf:pdfplumber 抽文字行(排除表格區)+ 表格(find_tables)+ 內嵌圖片(page.images 的流位元組,按 magic 判 mime)。
- pptx:python-pptx 抽每頁標題(首文本)+ 正文 + 圖片(shape.image.blob)+ 表格。
- xlsx:openpyxl 每個工作表 = 一個節(表頭=首行),附工作表級圖片。
- md/txt:輕量解析 # 標題、| 表格、 圖片(本地檔案讀位元組內嵌)、列表項轉 • 圓點。
消費 DocModel:左側目錄導航(由 heading 建樹)+ 多層級 <details> 摺疊 + 表格分組檢測 + 圖片按原始檔原始解析度內嵌(不重編碼)+ 共享 viewer.py 燈箱。是 docx/pdf/pptx/xlsx/md 共用的唯一渲染實現。
python inline_images.py <HTML所在目錄>
遞迴把目錄內所有 HTML 的外掛 xx_media/ 圖片轉 base64 data URI 內嵌。用於把早期外掛版 HTML 收斂為自包含(保持媒體原生解析度,不重編碼)。
render.py 通過 from viewer import VIEWER_CSS, VIEWER_JS, VIEWER_DIV 注入統一的圖片檢視器(縮放/平移/關閉)。改檢視器只需改這一處,同步生效。
python fold_inline_images.py <html> [--label "證書"] [--open] [--selector ".cert-list img"]
手工編寫/特殊生成的頁面(非 convert.py 正向產物)裡常有裸 <img>,想摺疊收納時用它,而非手寫 CSS(避免 B8 亂碼)。預設把「不在 <details>/.cell-imgs/燈箱內的 img」各自包進 <details class="acc-sub">(預設收起),注入正確 .acc-sub 樣式(箭頭字面 ▸),冪等可重複執行。
_media。凡新建 HTML 都走內嵌;若發現外掛,用 inline_images.py 收口。extract.py 各提取器或 render.py 的圖片編碼處加長邊上限(如縮到 2000px)再取捨。viewer.py 注入自包含檢視器——點圖開啟全屏,滾輪以游標為中心縮放,底部 +/-/適應螢幕/1:1 按鈕 + 百分比,滑鼠/觸屏拖動移動,雙指捏合縮放,點空白或 ESC 關閉。無需事後處理;所有內容 <img> 都帶 onclick="zoom(this)"。≥ 2 且 < 行數(即首列存在重複值)判為分組維度,按該列做一級摺疊塊、主鍵順延下一列。唯一值=1(整列相同)不分組——只有真正存在多個不同值時才摺疊分組,避免單列全同的表被無意義拆分。單行表不觸發。a:blip 圖片,否則整列文字會被當圖片丟棄(「出圖週期」表頭含"圖"字、純文字,曾致整列內容丟失)。N.1/N.2…;已帶 N.M 保持原編號;N.M.K 三級掛最近二級條目。▸(U+25B8) 寫入 CSS content,圓點用字面 •(U+2022)。禁止單反斜槓 \25B8——Python 會當八進位制轉義(\25→0x15 控制符),寫進 HTML 後箭頭位變亂碼(B8)、圓點變不可見控制符。雙反斜槓 \\25B8 雖能僥倖正確顯示,但不如字面字元穩,統一用字面字元。tables 列表,每張表獨立成 block,避免只存最後一張表導致內容丟失。--count 才開啟。核心偏好是「標題不帶數字」——使用者未明確要求計數時,一律不顯示數量。--items 可把平面表也逐行轉可摺疊卡片(row-item)。層次隨資料實際結構靈活生成,而非固定層數。content:"\25B8" 在 Python 原始碼被八進位制轉義 → 改用字面 ▶/•。≤ 行數//2;且唯一值=1 仍按分組(見規則 3)。a:blip(見規則 4)。_media 資料夾裡是與其逐位元組相同的壓縮副本(並非高畫質),真正高畫質一直在原始檔。→ 現改為按原始檔原始解析度內嵌、不重編碼(規則 1)。若已生成舊版,需用感知雜湊把壓縮內嵌圖映射回原始檔原圖池(同圖多解析度取最大者)重嵌。onclick → 點了沒反應。→ 現抽出共享 viewer.py,生成指令碼預設內建可縮放/平移檢視器(規則 2),且對所有內容 <img> 補 onclick="zoom(this)"。extract.py 歸一化層(各格式→DocModel)+ render.py 統一渲染層 + convert.py 排程」。新增格式只寫 extract_xxx 並登記 _DISPATCH,渲染零改動,高畫質內嵌/燈箱/摺疊全部複用。pdfplumber 的 page.images 給的是 xobject 流,get_rawdata() 才是編碼位元組;需按檔案頭 magic(ffd8→jpeg / 89504e→png / II/MM→tiff)判 mime,FlateDecode 裸流用 Pillow 包成 PNG,否則圖片內嵌失敗或 MIME 錯。openpyxl 圖片掛在工作表級(ws._images),無法精確對應單元格 → 統一作為該工作表節末尾的圖片塊附上,不強行塞進單元格。~$xxx.docx 臨時檔案或 PermissionError)。鎖住時先改 HTML 應急生效,關 Word 後再把改動寫回源 docx 並重跑固化為真"按原文",否則重跑會被還原。3/5 之類的計數數字。→ 預設不渲染數量徽標,需計數時顯式 --count 開啟(規則 8)。.acc-sub)時仍易寫成 content:"\25B8" 被 Python 八進位制吃掉成亂碼。→ 一律用字面 ▸;fold_inline_images.py 已內建正確寫法,手工頁優先用它而非手寫 CSS。~$ 鎖檔案;pdf/pptx/xlsx 看頁數/工作表;md 看標題層級。被 Word 佔用則先改 HTML 應急、記錄待固化(見踩坑)。python convert.py <原始檔或目錄> [輸出目錄],自動識別格式;目錄模式遞迴轉換所有支援的源。grep -c "_media" <html> 應為 0,grep -o "data:image" 應 > 0;且圖片為原始檔原圖解析度(非壓縮版)。id="lbstage"、function lbZoom;所有內容 <img> 帶 onclick="zoom(this)"(點圖能開啟、滾輪/按鈕可縮放、拖動可移)。# 標題)。.html 單檔案即可,圖片已內嵌其中。PY="C:/Users/Administrator/.workbuddy/binaries/python/versions/3.13.12/python.exe"
VENV="C:/Users/Administrator/.workbuddy/binaries/python/envs/default"
[ ! -f "$VENV/Scripts/python.exe" ] && "$PY" -m venv "$VENV"
"$VENV/Scripts/pip.exe" install python-docx pillow pdfplumber python-pptx openpyxl
執行:"$VENV/Scripts/python.exe" scripts/convert.py <原始檔或目錄> [輸出目錄]
這是一個功能完善、實用性強的文件轉換工具,能夠將 Word、PDF、PPT、Excel 等多種格式統一轉成帶導航和圖片的可瀏覽網頁,質量穩定可靠。主要優點是生成的檔案自帶摺疊目錄和高畫質圖片檢視器,無需額外軟體就能直接分享使用;文件清晰,踩坑記錄詳細,開發質量較高。美中不足的是目前缺少自動化測試覆蓋,極端情況下可能有偶發錯誤,但日常使用體驗良好。總體推薦。