0

0

html怎么转pdf_html文件快速转换成PDF方法【指南】

絕刀狂花

絕刀狂花

发布时间:2026-03-05 18:15:10

|

865人浏览过

|

来源于php中文网

原创

wkhtmltopdf 是最稳的本地 pdf 生成方案,支持 css 打印规则、分页和中文;需解决无显示报错、字体乱码、路径问题;puppeteer 更灵活但资源消耗大;jspdf+html2canvas 适合简单前端导出。

html怎么转pdf_html文件快速转换成pdf方法【指南】

wkhtmltopdf 命令行直接转,最稳

本地生成 PDF 且要保留样式、分页、中文,wkhtmltopdf 是目前兼容性最好、可控性最强的选择。它本质是把 WebKit 渲染引擎封装成命令行工具,不是简单截图或 DOM 快照,所以能处理 CSS @media print、page-break-before 这类规则。

常见错误现象:wkhtmltopdfQXcbConnection: Could not connect to display(Linux 无图形环境时)、中文字体乱码、页面截断在第一屏。

  • Linux 服务器上必须加 --no-xserver 或装 headless 依赖(如 xvfb-run
  • 中文字体失效?把字体文件路径显式传给 --font-family,或确保系统已安装并被 Fontconfig 识别(fc-list :lang=zh 可查)
  • HTML 里用了相对路径的 CSS/JS?转 PDF 前先用绝对路径重写,或用 --enable-local-file-access(但有安全风险,仅限可信 HTML)
  • 默认 A4 尺寸下内容被压缩?加 --zoom 1.2 或改 --page-width/--page-height

示例:wkhtmltopdf --margin-top 20 --margin-bottom 20 --page-size A4 --encoding utf-8 index.html output.pdf

前端用 jsPDF + html2canvas 在浏览器里转,适合简单页面

如果用户点击按钮就在当前页面生成 PDF,不走后端,那只能靠前端 JS。但得认清限制:html2canvas 是截图逻辑,无法真正理解 CSS 分页、打印媒体查询,也不支持跨域资源、iframe 内容、SVG 滤镜等。

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

使用场景:内部管理页导出简报、表单结果页、不含复杂布局的静态报告。

Axiom
Axiom

Axiom是一个浏览器扩展,用于自动化重复任务和web抓取。

下载
  • html2canvastransformfilterposition: fixed 支持差,建议提前用 getComputedStyle 检查渲染一致性
  • jsPDFaddImage 接收 base64 图片,但大图易触发内存溢出;建议限制截图区域高度,分页拼接
  • 中文乱码?jsPDF 默认不嵌入中文字体,必须手动加载 TTF 并 addFont,否则显示方块
  • 不要对整个 document.body 截图——滚动条位置、固定定位元素会错位,应指定一个干净的 <div id="pdf-root"> <p>示例关键调用:<code>html2canvas(document.getElementById('pdf-root')).then(canvas => { const img = canvas.toDataURL('image/png'); const pdf = new jsPDF(); pdf.addImage(img, 'PNG', 0, 0); pdf.save('report.pdf'); });

    Node.js 后端用 puppeteer 渲染再保存,灵活性最高

    如果你有 Node 服务,又需要精确控制渲染时机(比如等图表加载完、等动画结束、注入自定义脚本),puppeteer 是比 wkhtmltopdf 更现代的选择。它操控真实 Chromium 实例,支持 await、拦截请求、模拟设备、甚至 PDF 加密。

    性能影响:每次生成都启一个 Chromium 进程,高并发下内存吃紧;建议复用 browser 实例,别每次都 puppeteer.launch()

    • PDF 空白?多半是没等 HTML 完全加载,用 page.waitForSelector('.content-loaded')page.evaluate(() => document.fonts.ready)
    • 字体还是糊?不是加 --font-family,而是让 Puppeteer 加载字体文件:await page.addStyleTag({ content: '@font-face { font-family: "SimSun"; src: url("/fonts/simsun.ttc"); }' })
    • 生成的 PDF 没有页眉页脚?page.pdf()displayHeaderFooter: true 需配合 headerTemplate/footerTemplate,且模板里只支持有限 CSS(不能用外部样式表)
    • Windows 下报 Failed to launch chrome?确认是否安装了 Chromium 二进制,或设 executablePath 指向已有的 Chrome

    示例参数:await page.pdf({ format: 'A4', printBackground: true, margin: { top: '20px' }, path: 'out.pdf' });

    别踩这些坑:路径、编码、字体、跨域

    几乎所有 HTML 转 PDF 失败,根源就这四点。不是工具不行,是环境没对齐。

    • HTML 里的 <link rel="stylesheet" href="css/main.css"> —— 如果没开本地文件访问或没配好 base URL,CSS 就是 404,样式全丢
    • HTML 声明了 <meta charset="gb2312">

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

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

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

1026

2023.08.11

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

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

823

2023.11.06

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

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

866

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

457

2024.06.27

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

558

2023.09.20

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

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

精品课程

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

共46课时 | 3.5万人学习

AngularJS教程
AngularJS教程

共24课时 | 4万人学习

CSS教程
CSS教程

共754课时 | 39.9万人学习

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

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