在 ReactJS 中使用 jsPDF 从 SVG 生成 PDF 是一个常见的需求,尤其是在需要将图表或其他图形导出为 PDF 文件的应用中。以下是如何在 React 应用中实现这一功能的详细步骤:
首先,你需要安装 jsPDF
。此外,由于 jsPDF
对 SVG 的支持可能不是完全直接的,我们通常会使用 canvg
库来帮助转换 SVG 到 Canvas,然后再从 Canvas 导出到 PDF。
npm install jspdf canvg
在你的 React 应用中,创建一个组件,其中包括一个 SVG 元素和一个按钮用于触发 PDF 的生成。
import React from 'react';
import { jsPDF } from 'jspdf';
import canvg from 'canvg';
function ExportPDF() {
const svgRef = React.useRef(null);
const downloadPdf = () => {
const svgElement = svgRef.current;
const svgString = new XMLSerializer().serializeToString(svgElement);
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvg(ctx, svgString, {
ignoreMouse: true,
ignoreAnimation: true,
});
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({
orientation: 'landscape',
});
pdf.addImage(imgData, 'PNG', 0, 0);
pdf.save('download.pdf');
};
return (
<div>
<svg ref={svgRef} width="200" height="200">
{/* Example SVG */}
<circle cx="100" cy="100" r="80" fill="green" />
</svg>
<button onClick={downloadPdf}>Download PDF</button>
</div>
);
}
export default ExportPDF;
ref
关联到 React 组件,以便可以直接访问 SVG 的 DOM。downloadPdf
函数会被触发。这个函数首先将 SVG 元素转换为字符串,然后使用 canvg
将这个 SVG 字符串渲染到一个新创建的 canvas
元素上。canvas.toDataURL
方法将 canvas 转换为图片数据,然后使用 jsPDF
实例将这个图片添加到 PDF 文档中。最后,使用 pdf.save
方法保存并下载 PDF 文件。确保你的组件在浏览器中正常工作,并能够生成预期的 PDF 文件。你可能需要调整 SVG 和 PDF 的尺寸设置,以确保输出的格式符合你的需求。
canvg
完美支持,复杂的 SVG 或特殊效果可能无法正确渲染。通过上述步骤,你可以在 React 应用中实现从 SVG 到 PDF 的转换功能。这对于报告生成、图形导出等功能非常有用。
领取专属 10元无门槛券
手把手带您无忧上云