前端根据后端数据生成pdf表格 保姆级教学jspdf jspdf-autotable 以及中文乱码

此文以vue为例

一、下载jspdf与 jspdf-autotable(处理表格)
  npm install jspdf jspdf-autotable
二、引入
import jsPDF from "jspdf";
import "jspdf-autotable";
三、解决中文乱码问题
  1. 首先找到ttf字体文件(系统里有自带) 网上随便百度一下有很多 推荐一个免费的字体天下

下图为系统自带的路径 对字体无要求可以直接使用 跳过2、3步直接进入第4步
在这里插入图片描述

  1. 以字体天下为例 在这里插入图片描述

  2. 解压后找到ttf格式文件
    在这里插入图片描述

4.转换文件rawgit


如果页面无法打开:jsPDF git地址 拉下项目 打开html文件

在这里插入图片描述

正常打开或打开项目的html 你会看到如下的页面:

在这里插入图片描述

fontName(字体的名字)最好小写
在这里插入图片描述
File选择刚才解压的ttf格式字体文件

浏览完会自动下载一个js文件,把此文件放入项目中

//项目种引入下载文件
import "../fonts/songti-normal"
const doc = new jsPDF() ;
doc.setFont("songti");//使用实例.setFont 参数刚才下载的字体名字
//如果忘记名字可以返回刚才的js文件查看,如下代码


//转换js文件 最底部
var callAddFont = function () {
this.addFileToVFS('songti-normal.ttf', font);
this.addFont('songti-normal.ttf', 'songti', 'normal');//第二个参数为字体名字
};
jsPDF.API.events.push(['addFonts', callAddFont])



//如使用jspdf-autotable  table表格还是乱码的情况  要加入以下代码
const doc = new jsPDF() as any;
doc.autoTable({
    startX: 20,
    startY: 20,
    head: [
      [
        "xxx:",
        "xxx",
      ],
    ],
    styles: { font: "songti" },//这里也要引入字体
  });
四.简易导出pdf项目代码
import jsPDF from "jspdf";
import "jspdf-autotable";
import "../fonts/songti-normal";//刚才下载转换的js文件  注意!!!如果是ts项目 把后缀改成ts
const download2PDF = () => {
  const doc = new jsPDF() as any; //new一个jspdf对象
  doc.setFont("songti");//设置字体,这里字体名字为刚才下载文件的名字
  doc.setFontSize(22);//设置字体大小
  doc.text("清单", 70, 10);//加入'清单'这两个文字 位置为x 和y
  doc.autoTable({//添加表格
    startX: 20,//pdf-x轴位置 水平
    startY: 20,//pdf-y轴位置 垂直
    head: [ //表格头
      [
        "类型:",
        "名称:",
      ],
    ],
  body: [
   ["1231234324", "装载机"],//与上面的表头一一对应 
   ["2312312142", "查询机"],
   ["3453453453", "电压机", ],
  ],
    styles: { font: "songti" },//设置表格字体 
    headStyles: {//设置表头样式
          fillColor: '#FFE4C4',//背景颜色
          textColor: '#333',//文字颜色
     },
  });

  doc.save(`1.pdf`);//下载pdf的文件名字
};

效果:
在这里插入图片描述

五.jspdf-autotable详细参数整理

jsPDF-AutoTable github地址

目前整理 后续添加

import jsPDF from "jspdf";
import "jspdf-autotable";
const download2PDF = () => {
    const doc = new jsPDF('参数1', '参数2', '参数3'); //jspdf对象
    //第一个参数: l:横向  p:纵向
    //第二个参数:测量单位("pt","mm", "cm", "m", "in" or "px")
    //第三个参数:可以是下面格式,默认为“a4”
    // a0 - a10,b0 - b10,c0 - c10,dl,letter,government-letter,legal,junior-legal,ledger,tabloid,credit-card
    //默认为“a4”。如果您想使用自己的格式,只需将大小作为数字数组传递,例如[595.28, 841.89];
    doc.autoTable({
        startX: 30, //x轴
        startY: 30, //y轴
        head: [ //表头
            [
                "姓名",
                "年龄",
            ],
        ],
        body: [ //表格内容 长度与上面对应
            ["张三", "18"],
            ["李四", "20"],
        ],
        // margin:{top:10},//margin
        tableWidth: "auto", //表格宽度:auto自动撑满整个页面宽度(默认值)|wrap:在内容可以显示完全的情况下,尽可能减小宽度|number设置一个指定的宽度(如:200)
        styles: {
            font: "songti", //字体
            fontStyle: "normal", //字体样式
            // textColor:"",//字体颜色
            // fillColor:"",//背景颜色
            // cellWidth:"auto",//宽度:auto自动撑满整个页面宽度(默认值)|wrap:在内容可以显示完全的情况下,尽可能减小宽度|number设置一个指定的宽度(如:200)
            // minCellWidth:"10",//最小number值
            // minCellWidth:"10",//最大 number值
            // halign:"left",//水平对齐方式 left|center|right
            // valign:"top",//文字对齐方式 top|middle|bottom 
            // fontSize:"14", //字体大小
            // lineWidth:"0", //边框  如果为0,则不绘制边框
        },
      
        theme: 'grid', //表格主题样式  striped:行背景色交替显示(默认值) grid:线框形式plain:无样式
        headStyles: { //头部样式
            fillColor: '#E0FFFF',
            textColor: '#333',
            //...同styles
        },
        bodyStyles: {
            //同上
        }, //内容样式
        //pageBreak:'auto' , //auto|avoi|always //如果设置为avoid,则只有当表格高度大于页面高度时,插件才会将表格拆分为多个页面。
       // horizontalPageBreak: true ,//如果给定的表格宽度超过页面宽度,则将表格拆分为多个页 
       // tableLineWidth: 0 ,// 表格线条
       // tableLineColor: [255,255,255] ,//边框颜色
    });

    doc.save(`xxxx.pdf`); //下载pdf的文件名字
};
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
建立一个BBS论坛需要考虑以下几个方面: 1. 确定论坛类型和功能 2. 设计数据库结构 3. 编写前端界面 4. 编写后端逻辑 5. 部署和维护 下面是一个从零开始基于Python开发BBS论坛的保姆教学: 1. 确定论坛类型和功能 首先要确定你要创建的论坛类型和功能。是一个简单的问答论坛,还是一个社区论坛,还是一个资讯论坛?你需要确定你要实现的功能,例如用户注册、登录、发帖、回复、私信、搜索等等。 2. 设计数据库结构 我们需要设计数据库来存储用户信息、论坛帖子、回复等数据。可以使用MySQL、SQLite等关系型数据库。设计数据库结构时需要考虑到数据的关联性和一致性。 3. 编写前端界面 接下来,我们需要设计前端界面,包括网页布局、样式和交互效果。可以使用HTML、CSS和JavaScript等技术来实现。建议使用Bootstrap等前端框架来快速搭建界面。 4. 编写后端逻辑 编写后端逻辑需要使用Python开发框架,比如Django、Flask等。后端逻辑包括用户认证、数据读写、业务逻辑等。我们需要根据前端界面设计API接口,通过Python编写后端逻辑来实现这些功能。 5. 部署和维护 最后,我们需要将BBS论坛部署到服务器上,并对其进行维护。可以选择使用云服务器,比如AWS、阿里云等。并且需要定期更新代码、备份数据和优化性能等。 总结: 以上就是基于Python开发BBS论坛的保姆教学。需要注意的是,BBS论坛涉及到用户隐私和数据安全等问题,需要谨慎处理。另外,由于开发BBS论坛需要包括前端后端数据库等多个方面的知识,所以建议有一定的编程经验的人才尝试开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街头炒河粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值