📅  最后修改于: 2023-12-03 15:15:40.699000             🧑  作者: Mango
在类似于报告、文档、电子书等场景中,通常需要将 HTML 页面转换为 PDF 文件。而在 HTML 节点中使用不同的背景颜色是一种常见的设计需求。本文将介绍如何使用 Javascript 将 HTML 转换为 PDF,并保留节点的背景颜色。
jsPDF 是一个用于生成 PDF 文件的 Javascript 库,其支持多种格式的页面元素。而 canvg 则是一个用于将 SVG 转换为 Canvas 的 Javascript 库。
综合使用这两个库,可以实现将 HTML 转换为 PDF,并且保留节点的背景颜色。下面是示例代码:
// 引入 jsPDF 和 canvg 库
import jsPDF from 'jspdf';
import canvg from 'canvg';
// HTML 节点字符串
const htmlStr = `
<div>
<h1 style="background-color: #f00;">Hello, World!</h1>
<p style="background-color: #0f0;">This is a demo page.</p>
</div>
`;
// 创建一个 Canvas 元素
const canvas = document.createElement('canvas');
canvas.width = 600;
canvas.height = 800;
// 将 HTML 转换为 Canvas
canvg(canvas, htmlStr);
// 创建一个 jsPDF 实例
const doc = new jsPDF('p', 'pt', 'a4');
// 将 Canvas 中的内容添加到 PDF 中
const imgData = canvas.toDataURL('image/png');
doc.addImage(imgData, 'PNG', 0, 0, 600, 800);
// 保存 PDF 文件
doc.save('demo.pdf');
canvg(canvas, svgStr, {
ignoreMouse: true,
ignoreAnimation: true,
ignoreDimensions: true,
scaleWidth: canvas.width,
scaleHeight: canvas.height,
renderCallback: function () {
// 渲染完成后执行的回调函数
}
});
const doc = new jsPDF('p', 'pt', 'a4');
这里的参数含义分别为:页面方向(p-横向,l-纵向),页面单位(pt-磅,mm-毫米,cm-厘米,in-英寸),页面大小(a4、a3、letter 等常见规格)。
doc.addPage();
使用 jsPDF 和 canvg 库可以很方便地将 HTML 转换为 PDF,并且保留节点的背景颜色。代码量相对较少,适合在前端项目中快速应用。同时可以根据实际需求对页面大小和方向进行设置,还可以添加图片、分页符等元素,实现多样化的文档生成需求。