jsPDF的简单使用以及中文编码问题的解决

文中js通过CDN引入,若是为了加载时间最好下载至本地。

jsPDF的使用

  1. jsPDF简介
    jsPDF 是一个基于 HTML5 的客户端解决方案,用于在客户端JavaScript中生成PDF的库。

    有着方法简单,易于实现的优点。

  2. 简单使用
    因为为了页面美观,使用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');
    }
  3. 导出表格
    为了处理相关表格数据,根据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>
  4. 中文处理
    导出过程中发现中文显示乱码,根据文档发现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');
  5. 最终样式

jsPDF生成pdf文件和中文编码的更多相关文章

  1. ThinkPHP3.2.3扩展之生成PDF文件(MPDF)

    目前是PHP生成PDF文件最好的插件了,今天介绍下在ThinkPHP3.2.3里如何使用. 先安照路径放好如图. 下面是使用方法 public function pdf(){ //引入类库 Vendo ...

  2. 在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all

    在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all 前天来了个新需求, 有一个授权书的文件要点击下载, 需要在前端生成, ...

  3. linux下编译bib、tex生成pdf文件

    实验: 在linux环境下,编译(英文)*.bib和*.tex文件,生成pdf文件. 环境: fedora 20(uname -a : Linux localhost.localdomain 3.19 ...

  4. [轉載]史上最强php生成pdf文件,html转pdf文件方法

    之前有个客户需要把一些html页面生成pdf文件,然后我就找一些用php把html页面围成pdf文件的类.方法是可谓是找了很多很多,什么html2pdf,pdflib,FPDF这些都试过了,但是都没有 ...

  5. asp.net生成PDF文件 (1)

    asp.net生成PDF文件 (1) 这个是例子是网上淘来的,哈哈,很有用的! 首先要到网上下载itextsharp.dll,然后添加引用,主程序如下: 1 2 3 4 5 6 7 8 9 10 11 ...

  6. 怎么用PHP在HTML中生成PDF文件

    原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PH ...

  7. JAVA生成PDF文件

    生成PDF文件是主要应用的是ITEXT插件 import java.awt.Color; import java.io.File; import java.io.FileOutputStream; i ...

  8. .NET生成PDF文件

    C#未借助第三方组件,自己封装通用类,生成PDF文件. 调用方式: //路径 string path = @"C:\yuannwu22.pdf"; //内容 string strC ...

  9. 史上最强php生成pdf文件,html转pdf文件方法

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

随机推荐

  1. luogu P3226 [HNOI2012]集合选数

    luogu 因为限制关系只和2和3有关,如果把数中2的因子和3的因子都除掉,那剩下的数不同的数是不会相互影响,所以每次考虑剩下的数一样的一类数,答案为每类数答案的乘积 如果选了一个数,那么2的因子多1 ...

  2. SQL这样干,你就是给自己刨坑.....

    SQL是作为一个程序员接触得非常多的一种语言,但是,很多时候,我们会发现,有些SQL的执行效率异常的差,造成了数据库的负担.我们通过分析这些有问题的SQL,就可以发现很多我们平时在写SQL的时候忽略的 ...

  3. Linux scp命令详解(服务器之间复制文件或目录)

    scp:服务器之间复制文件或目录 一.命令格式: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] ...

  4. win7(64位旗舰版)visual studio 2017无法安装及vs2015闪退问题解决方式

    折腾了两天,几乎试了网上说的所有方法(就差重装系统了,看到有人说重装系统之后还是同样的问题,果断放弃重装),visual studio 2017的安装问题终于解决了,为了帮助同样还在折腾的初级开发者们 ...

  5. 第96:SVM简介与简单应用

    详细推到见:https://blog.csdn.net/v_july_v/article/details/7624837 python实现方式:

  6. python、第一篇:初识数据库

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...

  7. PAT Basic 1011 A+B 和 C (15 分)

    给定区间 [−] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤),是测试用例的个数.随后给出 T 组测试用例,每组占一行,顺序给出  ...

  8. 加上这几个组件,flask摇身一变是django

    写在前面 flask和django作为python中的两大开源框架,各分春秋,各有各自的优点,不能一概而论说哪个好哪个不好.flask框架小而精,适用于快速开发一些小的应用的项目.django大而全, ...

  9. 如何优雅高效的写博客(Sublime + Markdown + Evernote)

    如何优雅高效的写博客(Sublime + Markdown + Evernote) 本文主要是参照了几位大神的博客加上自己捣鼓了半天,比较适合新手流畅阅读 非常感谢下面两位大神: @dc_726: h ...

  10. The Preliminary Contest for ICPC Asia Nanchang 2019 E. Magic Master

    题目:https://nanti.jisuanke.com/t/41352 思路:约瑟夫环 由题意得第k张牌即求 k 为 第几个 报数为m+1 的单位 用队列模拟即可 #include<bits ...