0

0

怎么将html文件转换为pdf_网页转文档格式方法【工具】

雪夜

雪夜

发布时间:2026-03-06 19:11:03

|

534人浏览过

|

来源于php中文网

原创

weasyprint 是纯 python 的轻量 pdf 渲染工具,适合静态 html;需处理字体路径、绝对样式链接、避免 unsupported css;puppeteer 依赖 chromium,适合动态内容,但需注意编码、渲染兼容性与字体嵌入问题。

怎么将html文件转换为pdf_网页转文档格式方法【工具】

weasyprint 直接渲染 HTML 到 PDF,不依赖浏览器

如果你的 HTML 是静态页面、含内联样式或简单 CSS(比如报表、邮件模板),weasyprint 是最轻量且可控的选择。它基于 Python,纯 Python 实现的 CSS 渲染引擎,不启动 Chromium 或 WebKit,生成的 PDF 更稳定、更易批量处理。

常见错误现象:WeasyPrintFailed to load stylesheet,其实是相对路径没转成绝对路径;或者中文显示为方块,因为默认没加载中文字体。

  • 安装后必须显式指定字体路径:weasyprint input.html output.pdf --fonts /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc
  • CSS 中避免用 @import url(...),改用 <link rel="stylesheet"> 且 href 必须是绝对路径或 base64 内联
  • 不支持 position: fixed 用于页眉页脚以外的场景,打印时会错位
  • 表格跨页断裂不可控,加 page-break-inside: avoid 仅对块级容器有效,<tr> 上加无效 <h3>用 <code>puppeteer 走 Chromium 渲染,适合动态/交互型 HTML

    如果 HTML 里有 JS 初始化图表(如 ECharts)、Vue/React 渲染后的内容,或需要截图式精确还原,puppeteer 是更可靠的选择。它本质是控制一个无头 Chrome,所以兼容性接近真实浏览器。

    使用场景:导出带 ECharts 的监控看板、含 localStorage 数据的前端管理页、需登录态的内部报告页。

    立即学习前端免费学习笔记(深入)”;

    万彩AI
    万彩AI

    多功能AI创作工具合集,支持AI写作、AI换脸、AI数字人等

    下载
    • 务必等 JS 执行完成再截取,不能只靠 page.waitForTimeout(2000),应监听关键 DOM 出现:await page.waitForSelector('#chart-container canvas')
    • page.pdf() 默认用 A4 尺寸,但网页宽度超 210mm 会导致横向压缩变形,加 format: 'letter' 或手动设 width/height
    • Linux 服务器上运行常报 chrome not found,不是没装 Chrome,而是 puppeteer 下载的 Chromium 权限被 SELinux 拦截,建议用 --no-sandbox 启动,但仅限可信环境
    • PDF 中的超链接默认失效,需加 printBackground: true 和 CSS @media print { a::after { content: ' (' attr(href) ')'; } } 才能保留可读性

    遇到 UnicodeEncodeError 或乱码?先确认 HTML 声明和编码一致

    很多“转 PDF 中文变问号”问题,根源不在工具,而在 HTML 文件本身编码混乱。浏览器能容错,weasyprintpuppeteer 却很严格。

    错误现象:UnicodeEncodeError: 'latin-1' codec can't encode character '\u4f60';或 PDF 里中文全成空白/方框。

    • 检查 HTML 文件开头是否有 <meta charset="utf-8">,且文件实际保存为 UTF-8(无 BOM)
    • file -i your.html 确认编码,不是 “us-ascii” 或 “iso-8859-1”
    • weasyprint 读文件时若没指定 encoding,默认按系统 locale 解码,Linux 服务器常是 en_US.UTF-8,但某些 Docker 镜像 locale 是 C,导致 decode 失败
    • 稳妥做法:用 Python 脚本读取 HTML 字符串,显式 .decode('utf-8') 后传给 HTML(string=...),绕过文件读取环节

    生成 PDF 后字体发虚、线条锯齿?别怪工具,先查 CSS 渲染模式

    PDF 导出后文字边缘模糊、SVG 图标出现灰边、细线断续——这类问题通常不是 DPI 设置低,而是 CSS 中触发了非标准渲染路径。

    典型诱因:用了 transform: scale()filter: drop-shadow()、或 backface-visibility: hidden 这类强制硬件加速的属性。

    • weasyprint 完全忽略 transformfilter,遇到就静默降级,可能让布局塌陷,间接导致字体重排模糊
    • puppeteer 虽支持,但 PDF 导出时 Chromium 会把 transform 后元素光栅化成位图,分辨率锁定在 96dpi,放大即糊
    • 解决方案:导出前用 JS 移除这些样式:document.querySelectorAll('*').forEach(el => el.style.transform = '')
    • SVG 图标务必用 <svg></svg> 内联,不要 <img src="icon.svg" alt="怎么将html文件转换为pdf_网页转文档格式方法【工具】" >,否则 puppeteer 无法嵌入矢量数据
    字体嵌入、CSS 分页、页眉页脚变量替换这些事,得一层层试,没有一键完美的路径。真正卡住的,往往是 HTML 里某个没意识到的 CSS 特性,在 PDF 渲染链路里被悄悄吞掉了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1035

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

826

2023.11.06

ECharts是什么
ECharts是什么

ECharts是基于JavaScript的开源可视化库,能够帮助开发者轻松地实现各种复杂的数据可视化效果,提供了丰富的图表类型和交互功能。本专题为大家提供ECharts是什么的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.04

echarts自适应大小设置
echarts自适应大小设置

使用ECharts的自适应大小设置可以使图表能够根据不同屏幕尺寸和设备进行自适应。一种是使用resize事件,在图表容器大小改变时重新渲染图表;另一种是使用CSS样式,通过设置图表容器的宽度和高度为百分比值,使图表容器根据父元素的大小进行自适应。根据实际需求选择合适的方法,可以使图表在不同设备上都能够良好地显示和交互 。

482

2023.09.13

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

17

2026.02.03

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

950

2023.08.02

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

204

2025.12.04

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

1

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

AngularJS教程
AngularJS教程

共24课时 | 4万人学习

CSS教程
CSS教程

共754课时 | 40.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号