jsPDF生成pdf文件和中文编码

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. 最终样式

原文地址:https://www.cnblogs.com/homehtml/p/12034535.html

时间: 2024-10-21 22:39:25

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

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

目前是PHP生成PDF文件最好的插件了,今天介绍下在ThinkPHP3.2.3里如何使用. 先安照路径放好如图. 下面是使用方法 public function pdf(){ //引入类库 Vendor('mpdf.mpdf'); //设置中文编码 $mpdf=new \mPDF('zh-cn','A4', 0, '宋体', 0, 0); //html内容 $html='<h1><a name="top"></a>一个PDF文件</h1>

Freemarker+IText生成pdf文件

最近项目中遇到要用html生成pdf文件的需求,一开始研究了下前端插件jspdf,使用h5 canvas绘图生成图片,再把图片生成pdf文件,遇到了各种各样的问题,生成的pdf文件达到20多M,height超过5000浏览器就崩溃,有兴趣的童鞋可以尝试一下,该方案LZ最终放弃了. 接着开始尝试服务端生成,使用freemaker模板生成静态html文件,通过iext生成pdf,网上很多关于renderer.setDocument(dom,null)的用法,LZ尝试后发现效率奇低,最后放弃了,直接使

thinkphp整合系列之tcpdf类生成pdf文件

php生成pdf文件的需求是不怎么常见的:当然也是有的: 既然已经整合使用了:那就写篇博客来讲解下吧: 示例项目:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin 一:引入tcpdf /ThinkPHP/Library/Vendor/Tcpdf 把tcpdf整个目录拷到自己的项目中: 二:函数 /Application/Common/Common/function.php /** * 生成pdf * @param  string $html

.NET生成PDF文件

C#未借助第三方组件,自己封装通用类,生成PDF文件. 调用方式: //路径 string path = @"C:\yuannwu22.pdf"; //内容 string strContent = "ddd3232342434d"; new PDFGenerator.PDFGenerator(path, strContent).Create(); 下载地址: http://pan.baidu.com/s/1kTIchev?

MFC使用Haru free pdf lib生成pdf文件

MFC使用Haru free pdf lib生成pdf文件 我们先创建一个项目MFCPDFDemo,在上面添加一个编辑框和一个按钮: haru free pdf类库下载地址 这里直接下载dll,如果想以静态库的方式使用,得下载源码自己编译.然后把这个dll添加到项目中,怎么添加就不说了吧,还是说一下吧,万一有新手看不懂呢.解压后我们要用到三个东西:libhpdf.dlllibhpdf.libinclude整个文件夹解压后复制libhpdf.dll到项目的release和debug目录下:libh

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

原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PHP并借助FPDF来生成PDF文件.但是如今,已经有很多函数库可以使用了,并且能够从你提供的HTML文件生成PDF文档.这让原先耗时的工作变得非常简单了. FPDF是很早就被使用的,其特点如下: FPDF FPDF是一个允许使用纯PHP生成PDF文档的PHP类,换句话说,没有使用PDFlib 函数库.

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

之前有个客户需要把一些html页面生成pdf文件,然后我就找一些用php把html页面围成pdf文件的类.方法是可谓是找了很多很多,什么html2pdf,pdflib,FPDF这些都试过了,但是都没有达到我要的求. pdflib,FPDF 这两个方法是需要编写程序去生成pdf的,就也是讲不支持直接把html页面转换成pdf:html2pdf这个虽然可以把html页面转换成pdf文 件,但是它只能转换一般简单的html代码,如果你的html内容要的是通过后台新闻编辑器排版的那肯定不行的. 纠结了半

使用flying-saucer,利用HTML来生成PDF文件(裴东辉)

1.导入maven依赖 <flyingSaucer.version>9.1.0</flyingSaucer.version> <!-- flying-saucer --> <dependency>    <groupId>org.xhtmlrenderer</groupId>     <artifactId>flying-saucer-pdf</artifactId>     <version>${

JAVA生成PDF文件

生成PDF文件是主要应用的是ITEXT插件 1 import java.awt.Color; 2 import java.io.File; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.util.ArrayList; 6 import java.util.List; 7 8 import com.lowagie.text.Cell; 9 import com.lowagie.text.