pandoc可直接将utf-8编码html转pdf/docx/markdown,但pdf需额外安装tinytex,复杂css布局建议用浏览器打印导出,docx样式丢失主因是语义映射与字体兼容性问题。

用 pandoc 一次性转成 PDF / DOCX / Markdown
直接装 pandoc,它能吃 HTML、吐出几乎所有常用文档格式,不用开浏览器、不依赖在线服务。Windows/macOS/Linux 全支持,命令行一条搞定。
- 先确保 HTML 文件编码是 UTF-8(否则中文乱码),用编辑器另存为时勾选
UTF-8 without BOM - 基础转换命令:
pandoc input.html -o output.docx或pandoc input.html -o output.pdf - 转 PDF 需额外装
texlive(Linux/macOS)或tinytex(推荐,轻量),否则会报错Could not find pandoc-citeproc或直接卡住 - 如果 HTML 含内联样式或
<style></style>,pandoc默认忽略;加--css=style.css可引入外部 CSS,但对复杂布局(如 Flex/Grid)基本无效
浏览器打印 → PDF 是最稳的“保真”方案
当 HTML 有大量 CSS 动画、响应式布局或自定义字体时,pandoc 会丢样式、错排版,这时候别硬刚,用浏览器原生能力更可靠。
- Chrome / Edge 打开 HTML 文件 →
Ctrl+P(Win)或Cmd+P(Mac)→ 目标选Save as PDF - 关键设置:在打印预设里关掉
Headers and footers,勾选Background graphics(否则 CSS 背景色/图全丢) - 注意路径问题:如果 HTML 引用了本地
./images/logo.png,但你是双击打开的file://协议,部分图片可能因安全策略不加载 —— 改用python3 -m http.server起个本地服务再访问,就正常了
转 Word(.docx)时样式丢失的三个真实原因
pandoc 转 DOCX 不是“所见即所得”,它把 HTML 标签映射成 Word 的语义结构(比如 <h2></h2> → “标题2”样式),而不是像素级还原。
<div style="float:right"> 这类纯表现型标签会被忽略,Word 没有浮动概念;改用 <code><table> 或 <code><aside></aside>+ CSS 类再映射样式更靠谱- 自定义字体(如
font-family: "HarmonyOS Sans")进 DOCX 后变成默认字体,因为 Word 只认系统已安装字体;要么提前在系统装好,要么导出前用 CSS 把字体回退到SimSun, Arial等通用名 - 表格边框消失?加
--standalone参数再试,否则pandoc默认生成“片段”,Word 无法正确解析内联样式 -
weasyprint渲染质量高、纯 Python、支持大部分 CSS3,但不支持 JavaScript;安装:pip install weasyprint,注意它依赖系统级cairo和pango(Ubuntu 要apt install libpango-1.0-0 libcairo2) -
pdfkit底层调 Chrome/Chromium,兼容性更好,但必须本地装好 Chrome,且启动慢;错误信息里出现WKHtmlTopdfNotFoundError就是没配好路径 - 二者都不处理
file://下的相对资源(如<img src="data:image/png;base64,..." alt="html文件怎么转换_html转其他文档格式【工具】" >安全,但src="img/a.jpg"会 404)—— 统一转成绝对路径或 base64 内联
Python 用 weasyprint 或 pdfkit 做自动化 PDF
如果你要批量转、加水印、动态插入页码,或者集成进脚本,别用手点浏览器,用库更可控。
立即学习“前端免费学习笔记(深入)”;
document.write、fetch()、Vue/React 渲染的页面,得先跑一遍 JS 再保存为静态 HTML,否则转出来的就是空壳。










