pdf转html本质是内容提取而非格式还原,需先明确需求:pdf2htmlex适合生成可读网页,pdfminer.six适合开发者提取结构化文本,浏览器打印为html是零配置快捷方案。

PDF 转 HTML 本质是「内容提取」而非「格式还原」
PDF 不是网页,它没有语义结构,只有绝对定位的文本块和图形。直接转成 html 文件后,你看到的多半是错位的文字、丢失的换行、乱码的中文字体,甚至整页变成一张图——这不是工具不行,而是 PDF 本身就不适合当网页源。真正能用的转换,得先判断:你要的是「可读网页」还是「可编辑源码」?前者优先选 pdf2htmlEX 或浏览器打印为 HTML;后者才考虑 pdfminer 或 PyPDF2 解析。
用 pdf2htmlEX 生成带样式的 HTML(推荐给普通用户)
它能把 PDF 渲染成接近原貌的 HTML + CSS,支持中文、保留链接和目录,生成结果可直接双击打开。但注意:pdf2htmlEX 不维护了,最新稳定版是 0.18.1,macOS 需用 brew install pdf2htmlEX(加 --with-poppler-data 否则中文乱码),Linux 用户别用 Ubuntu 默认源里的老版本。
- 基础命令:
pdf2htmlEX --zoom 1.3 input.pdf output.html(--zoom补偿缩放,不然文字太小) - 如果输出空白或字体缺失,加参数:
--fallback-font "Noto Sans CJK SC" - 不支持加密 PDF;遇到「Failed to load page」错误,先用
qpdf --decrypt input.pdf decrypted.pdf解密 - 生成的 HTML 里内联了大量 CSS 和字体 base64,文件体积大,不适合直接扔进 CMS
用 Python 的 pdfminer.six 提取纯文本再手写 HTML(适合开发者)
当你需要控制段落逻辑、过滤页眉页脚、或把 PDF 当作数据源时,pdfminer.six 是更可靠的选择。但它不生成 HTML 标签,只给你文本坐标和字体信息,你得自己判断哪段是标题、哪段是列表。
- 安装:
pip install pdfminer.six - 简单提取:
pdf2txt.py -p 1-5 -O utf-8 input.pdf > content.txt(-p指定页码范围) - 想保留结构?用
LTTextBoxHorizontal类遍历文本框,按y0坐标排序模拟阅读顺序——但 PDF 排版混乱时,这步极易出错 - 表格基本无法自动识别;遇到扫描版 PDF,必须先过 OCR(
pytesseract+pdf2image)
浏览器「打印为 HTML」是个被低估的快捷方案
Chrome / Edge 地址栏输入 chrome://print/,加载 PDF 后点「目标打印机」选「另存为 PDF」→ 改后缀为 .html?不行。正确做法是:用开发者工具(F12)切换到「Rendering」→ 勾选「Emulate CSS media type」→ 选 screen,再右键页面 → 「Save as…」→ 保存为 Webpage, complete。这样得到的 HTML 有基本样式,且兼容性好。
立即学习“前端免费学习笔记(深入)”;
- 优点:零配置、支持 JavaScript 交互的 PDF(比如表单)、自动处理字体嵌入
- 缺点:页边距和分页会失真;多页 PDF 会生成多个 HTML 文件(
index.html+page_2.html等) - 别用「另存为 Webpage, HTML only」——会丢掉所有样式和图片引用
最麻烦的从来不是转换动作本身,而是 PDF 的来源:扫描件、加密文档、LaTeX 生成的复杂公式、含 SVG 图表的商业报告……这些都会让任何工具在第二步就卡住。动手前,先用 pdfinfo input.pdf 看看是否加密、是否含文本层,比盲目试工具省两小时。











