jsPDF生成pdf文件和中文编码
jsPDF的简单使用以及中文编码问题的解决
文中js通过CDN引入,若是为了加载时间最好下载至本地。
jsPDF的使用
- jsPDF简介
jsPDF 是一个基于 HTML5 的客户端解决方案,用于在客户端JavaScript中生成PDF的库。有着方法简单,易于实现的优点。
简单使用
因为为了页面美观,使用bootstrap进行简单设计,所以要先引入bootstrap相关的css和javascript。
css:<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">javascript:
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdn.bootcss.com/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://cdn.bootcss.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>html片段:
<div class="container">
<div class="row">
<h2>导出demo</h2>
<table class="table table-striped" id="myTable">
<thead>
<tr>
<th scope="col">ID</th> <th scope="col">First</th>
<th scope="col">Last</th> <th scope="col">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th> <td>Mark</td>
<td>Otto</td> <td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th> <td>Jacob</td>
<td>Thornton</td> <td>@fat</td>
</tr>
<tr>
<th scope="row">3</th> <td>Larry</td>
<td>the Bird</td> <td>@twitter</td>
</tr>
</tbody>
</table>
<button class="btn btn-primary" onclick="exportPDF()">导出表格</button>
</div>
</div>接下来引入jsPDF的相关javascript:
<!--PDF插件START-->
<script src="https://cdn.bootcss.com/jspdf/1.3.5/jspdf.min.js"></script>
<script src="https://cdn.bootcss.com/jspdf/1.3.5/jspdf.debug.js"></script>
<!--PDF插件END-->实现方式:
function exportPDF() {
var doc = new jsPDF('p', 'pt');
//pdf标题设置
doc.text(20, 20, 'hello world!'); doc.save('导出.pdf');
}导出表格
为了处理相关表格数据,根据jsPDF引入相关javascript:<script src="https://cdn.bootcss.com/jspdf-autotable/3.0.0-alpha.1/jspdf.plugin.autotable.min.js"></script>
简单实现
<script type="text/javascript">
var myTable = $("#myTable");
// 获取title
var tableThs = myTable.find("thead th");
//获取每个tr
var tableTrs = myTable.find("tbody tr");
var columns = [];
//处理title数组
tableThs.each(function () {
columns.push({title: $(this).text(), key: $(this).text()});
});
//处理数据数组
var data = [];
tableTrs.each(function () {
var tds = $(this).children();
var object = {};
//生成数据对象
$.each(columns, function (i, r) {
var tdTitle = columns[i].key;
//'object'跟上文对象名称一致,动态件加属性和值
eval('object.' + tdTitle + '="' + $(tds).eq(i).text() + '"');
});
data.push(object);
}); function exportPDF() {
var doc = new jsPDF('p', 'pt');
doc.text(20, 20, 'hello world!');
doc.autoTable(columns, data, {}); doc.save('导出.pdf');
}
</script>中文处理
导出过程中发现中文显示乱码,根据文档发现jsPDF不支持中文,网上资料是使用html2canvas
方式转换canva
方式,并不是十分灵活。后根据项目jsPDF-CustomFonts-support引入中文字体,解决了导出pdf后中文字体显示乱码的问题。
这个插件并没有CDN,将项目源码下载到本地,dist文件夹下为相关脚本,font文件夹下为相关字体文件。<script src="../js/jspdf.customfonts.debug.js"></script>
<script src="../js/jspdf.customfonts.min.js"></script>
<script src="../js/default_vfs.js"></script>脚本实现
var doc = new jsPDF('p', 'pt');
doc.addFont('NotoSansCJKtc-Regular.ttf', 'NotoSansCJKtc', 'normal');
//pdf标题设置
doc.setFont('NotoSansCJKtc');
//pdf标题设置
doc.text(20, 20, '导出标题');
//doc.autoTable(columns, data, {});
// https://github.com/simonbengtsson/jsPDF-AutoTable 主要属性参考
doc.autoTable(columns, data, {styles: {cellPadding: 0.5, fontSize: 8, font: "NotoSansCJKtc"}}); doc.save('导出.pdf');- 最终样式
jsPDF生成pdf文件和中文编码的更多相关文章
- ThinkPHP3.2.3扩展之生成PDF文件(MPDF)
目前是PHP生成PDF文件最好的插件了,今天介绍下在ThinkPHP3.2.3里如何使用. 先安照路径放好如图. 下面是使用方法 public function pdf(){ //引入类库 Vendo ...
- 在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all
在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all 前天来了个新需求, 有一个授权书的文件要点击下载, 需要在前端生成, ...
- linux下编译bib、tex生成pdf文件
实验: 在linux环境下,编译(英文)*.bib和*.tex文件,生成pdf文件. 环境: fedora 20(uname -a : Linux localhost.localdomain 3.19 ...
- [轉載]史上最强php生成pdf文件,html转pdf文件方法
之前有个客户需要把一些html页面生成pdf文件,然后我就找一些用php把html页面围成pdf文件的类.方法是可谓是找了很多很多,什么html2pdf,pdflib,FPDF这些都试过了,但是都没有 ...
- asp.net生成PDF文件 (1)
asp.net生成PDF文件 (1) 这个是例子是网上淘来的,哈哈,很有用的! 首先要到网上下载itextsharp.dll,然后添加引用,主程序如下: 1 2 3 4 5 6 7 8 9 10 11 ...
- 怎么用PHP在HTML中生成PDF文件
原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PH ...
- JAVA生成PDF文件
生成PDF文件是主要应用的是ITEXT插件 import java.awt.Color; import java.io.File; import java.io.FileOutputStream; i ...
- .NET生成PDF文件
C#未借助第三方组件,自己封装通用类,生成PDF文件. 调用方式: //路径 string path = @"C:\yuannwu22.pdf"; //内容 string strC ...
- 史上最强php生成pdf文件,html转pdf文件方法
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
随机推荐
- Eclipse使用github并开启命令行
1. 安装EGit插件 2. 导入git项目 选择Import: 选择“Clone URI” 输入想要导入的git项目地址和用户名密码: 选择代码分支: 一路点击next完成导入github项目即可. ...
- 利用Mocking Framework 单元测试Entity Framework
一.前言 在实际编写程序时,往往需要与数据库打交道,在单元测试中直接使用数据库又显得太重,如果可以方便的编写一些测试数据,这样更易于检测功能.如何模拟数据库行为便是本篇的主题.微软有教程说明Moq E ...
- Git 一般性操作
git全局设定 git config --global user.name “码云账号” git config --global user.email “码云注册邮箱” git 定位文件夹cd进入到需 ...
- EJS学习(三)之语法规则中
⚠️实例均结合node,也就是AMD规范版本 ejs中使用render()表示渲染文本 接收三个参数:模版字符串.data.options,返回一个字符串 const ejs = require('e ...
- jquery中的obj.attr()和obj.data
实例一 obj.attr('data-max-width','aa'): obj.data('max-width') 问题 data只会获取第一次select赋值的值 区别 .data每次是从jque ...
- jQuery 遍历 - 后代
向下遍历 DOM 树 下面是两个用于向下遍历 DOM 树的 jQuery 方法: children() find() jQuery children() 方法 children() 方法返回被选元素的 ...
- adb进阶知识,如何过滤只查看某一个app的日志
前面大概学习了adb基础,但是adb的存在,在测试人员中究竟有什么必要,以及看log时,那么多的log,让我们看个屁啊,所以这一次,我决定一定要把adb这件事情搞清楚. 1.先来看最感兴趣的adb ...
- VMware安装CentOS6.3
这里测试的是 CentOS-6.3-x86_64-bin-DVD1 链接:点击进入提取码: zs32 如果这里CentOS下载太慢的话 点击进入下载
- python 写入JSON中文乱码解决方法
在将一个字典添加入json中时多加入一个参数就可以了 json.dumps(dict(item), ensure_ascii=False) 例子 with open('zh-cn.json','w', ...
- 第一篇.1、python基础之核心风格
一.语句和语法 #:注释 \:转译回车,继续上一行,在一行语句较长的情况下可以使用其来切分成多行,因其可读性差所以不建议使用 ::将两个语句连接到一行,可读性差,不建议使用 ::将代码的头和体分开 语 ...