在前端开发中,将HTML内容转换为PDF是常见的需求,很多人会疑惑HTML能不能免插件转pdf,实际上通过纯前端技术栈就可以实现这个功能,不需要用户安装任何额外插件,也不需要依赖后端服务支持,下面介绍两种主流的实现方案。

方案一:html2canvas + jsPDF组合实现
这种方案的原理是先使用html2canvas将HTML元素渲染为canvas,再将canvas转换为图片,最后通过jsPDF将图片插入到PDF中生成文件,兼容性较好,适合大多数常规页面场景。
实现步骤
- 引入html2canvas和jsPDF的依赖库
- 使用html2canvas捕获目标HTML元素生成canvas
- 将canvas转换为base64格式的图片
- 创建jsPDF实例,将图片添加到PDF页面中
- 触发文件下载
代码示例
// 引入依赖 如果是模块化项目可以通过import引入
// <script src="https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js"></script>
// <script src="https://cdn.jsdelivr.net/npm/jspdf@2.5.1/dist/jspdf.umd.min.js"></script>
function exportPdf() {
// 获取需要转换的HTML容器元素
const targetElement = document.getElementById('pdf-content');
// 配置html2canvas参数
const canvasOptions = {
scale: 2, // 提升导出清晰度
useCORS: true, // 允许加载跨域图片
backgroundColor: '#ffffff' // 设置背景色为白色
};
// 调用html2canvas生成canvas
html2canvas(targetElement, canvasOptions).then(canvas => {
// 将canvas转换为图片的base64数据
const imgData = canvas.toDataURL('image/png');
// 获取图片宽高,用于计算PDF尺寸
const imgWidth = canvas.width;
const imgHeight = canvas.height;
// 计算PDF页面尺寸,A4纸宽度是210mm,这里按像素比例换算
const pdfWidth = 595.28;
const pdfHeight = 592.28;
// 计算图片在PDF中的缩放比例
const scale = pdfWidth / imgWidth;
const scaledHeight = imgHeight * scale;
// 创建jsPDF实例,方向为纵向,单位为pt,尺寸为A4
const pdf = new jsPDF('p', 'pt', 'a4');
// 添加图片到PDF,参数依次是图片数据、格式、x坐标、y坐标、宽度、高度
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, scaledHeight);
// 如果内容超过一页,需要处理分页逻辑,这里仅做简单示例
// 保存PDF文件,指定文件名
pdf.save('导出文件.pdf');
});
}
方案二:使用浏览器原生打印功能导出
这种方案不需要引入任何第三方库,直接利用浏览器自带的打印功能,将页面内容打印为PDF,实现成本最低,但是样式可控性较差,适合简单的静态页面导出场景。
实现步骤
- 编写专门用于打印的CSS样式,隐藏不需要导出的元素
- 调用window.print()方法触发打印面板
- 用户在打印面板中选择保存为PDF即可
代码示例
<!-- 页面结构 -->
<div id="print-content">
<h3>需要导出的内容标题</h3>
<p>这是需要导出到PDF的文本内容</p>
<table border="1">
<tr>
<th>列1</th>
<th>列2</th>
</tr>
<tr>
<td>数据1</td>
<td>数据2</td>
</tr>
</table>
</div>
<button onclick="exportByPrint()">打印导出PDF</button>
<style>
/* 打印样式,仅在打印时生效 */
@media print {
/* 隐藏不需要打印的元素 */
body > *:not(#print-content) {
display: none;
}
/* 调整打印内容的样式 */
#print-content {
width: 100%;
padding: 20px;
}
table {
width: 100%;
border-collapse: collapse;
}
th, td {
border: 1px solid #000;
padding: 8px;
text-align: center;
}
}
</style>
<script>
function exportByPrint() {
// 触发浏览器打印功能
window.print();
}
</script>
两种方案对比
| 对比项 | html2canvas + jsPDF方案 | 浏览器原生打印方案 |
|---|---|---|
| 第三方依赖 | 需要引入两个库 | 无依赖 |
| 样式可控性 | 较高,可通过代码调整导出内容 | 较低,依赖浏览器打印样式 |
| 兼容性 | 支持大部分现代浏览器 | 依赖浏览器自身打印功能,兼容性好 |
| 实现复杂度 | 中等,需要处理分页等逻辑 | 低,仅需少量代码 |
如果项目需要高度自定义PDF的内容和样式,推荐使用html2canvas + jsPDF的组合方案,如果需要快速实现简单的导出功能,浏览器原生打印方案是更合适的选择,两种方案都可以实现HTML免插件转pdf的需求。
HTML转PDFjsPDFhtml2canvas前端导出PDF修改时间:2026-06-13 10:21:25