【jspdf】前端html生成pdf的两种办法 以及 引入中文字体

warning: 这篇文章距离上次修改已过190天,其中的内容可能已经有所变动。

在前端生成PDF文件,可以使用jsPDF库。以下是两种常见的方法:

方法一:使用html2canvas将HTML转换为canvas,然后再将canvas转为图片。

方法二:使用html2pdf.js直接将HTML转为PDF。

引入中文字体,需要使用自定义字体或者将中文转为图片。

以下是具体的实现方式:

方法一:使用html2canvas将HTML转换为canvas,然后再将canvas转为图片。




//引入jsPDF
import jsPDF from 'jspdf';
//引入html2canvas
import html2canvas from 'html2canvas';
 
function downloadPDF() {
    const element = document.body; // 需要转换的DOM元素
    html2canvas(element).then((canvas) => {
        // 新建PDF文档,并添加图片
        const pdf = new jsPDF('p', 'mm', 'a4');
        const img = canvas.toDataURL('image/png');
        pdf.addImage(img, 'PNG', 0, 0, 210, 297);
        pdf.save('download.pdf'); // 保存
    });
}

方法二:使用html2pdf.js直接将HTML转为PDF。




//引入jsPDF
import jsPDF from 'jspdf';
//引入html2pdf.js
import html2pdf from 'html2pdf.js';
 
function downloadPDF() {
    const element = document.body; // 需要转换的DOM元素
    html2pdf().set({
        html2canvas: {
            scale: 2, // 提高分辨率
            dpi: 192, // 打印质量
            letterRendering: true, // 使用更佳的文字渲染
        },
        jsPDF: {
            unit: 'mm',
            format: 'a4',
            orientation: 'portrait' // 方向
        }
    }).from(element).save();
}

引入中文字体,可以使用jspdf的addFont方法,但是需要字体文件,并且需要将字体转为base64。




//引入自定义字体
import 'jspdf/dist/polyfills.js';
import font from 'jspdf/dist/standard_fonts/font.js';
import fontBase64 from '../path/to/font.base64'; // 中文字体的base64
 
// 添加自定义字体
font.addFont('中文字体', 'normal', 'normal', fontStyle.normal, fontWeight.normal, [fontBase64]);
 
// 使用自定义字体
const pdf = new jsPDF('p', 'mm', 'a4');
pdf.setFont('中文字体');
pdf.text('你好,世界!', 10, 20);
pdf.save('download.pdf');

由于中文字体较大,通常采用将中文字体转为图片的方式来解决。




//引入jsPDF
import jsPDF from 'jspdf';
 
// 创建canvas
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
 
// 设置字体样式
ctx.font = '20px 微软雅黑';
// 设置字体颜色
ctx.fillStyle = '#000';
// 绘制文本
ctx.fillText('你好,世界!', 0, 20);
 
// 将canvas转为图片
const img = new Image();
img.src = canvas.toDataURL('image/png');
 
const pdf = new jsPDF('p', 'mm', 'a4');
pdf.addImage(img, 'PNG', 10, 10, 50, 20);
pdf.save('download.pdf');

以上就是使用jspdf生成PDF文件的两种方法以及引入中文字

最后修改于:2024年08月16日 14:12

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日