使用jsPDF生成PDF文件

使用jsPDF生成PDF文件使用两个开源项目 这是他们的地址 jsPDF https github com MrRio jsPDFjsPDF AutoTable https github com simonbengtss jsPDF AutoTable 项目引入 我使用的版本是 jsPDF 1 5 3 jsPDF AutoTable 3 2 4

使用两个开源项目,这是他们的地址

项目引入,我使用的版本是jsPDF(1.5.3)、jsPDF-AutoTable(3.2.4)

<script src="libs/jspdf.debug.js"></script> <script src="libs/jspdf.plugin.autotable.js"></script> 

js设置

//初始化 const doc = new jsPDF(); //设置生成的内容(html:表格的ID) doc.autoTable({ 
   html: '#table'}); //导出 doc.save('table.pdf'); 

运行

第一次生成的效果,中文乱码

问题

jsPDF默认是不支持中文显示,所以显示的都是一些乱码。我翻阅了很多的一些资料。能找到一些有用的信息。

官网有那么一段说明。

The 14 standard fonts in PDF are limited to the ASCII-codepage. If you want to use UTF-8 you have to to integrate a custom font, which provides the needed glyphs. jsPDF supports .ttf-files. So if you want to have for example chinese text in your pdf, your font has to have the necessary chinese glyphs. So check if your font supports the wanted glyphs or else it will show a blank space instead of the text.

To add the font to jsPDF use our fontconverter in /fontconverter/fontconverter.html . The fontconverter will create a js-file with the content of the provided ttf-file as base64 encoded string and additional code for jsPDF. You just have to add this generated js-File to your project. You are then ready to go to use setFont-method in your code and write your UTF-8 encoded text.

用翻译软件翻译一下,这里不确保翻译的正确性,大致上看懂就行。

PDF中的14种标准字体仅限于ASCII代码页。如果要使用UTF-8,则必须集成自定义字体,该字体提供所需的字形。jsPDF支持.ttf文件。因此,如果您希望在pdf中使用中文文本,则您的字体必须具有必要的中文字形。因此,请检查您的字体是否支持所需的字形,否则它将显示空白而不是文本。

要将字体添加到jsPDF,请在/fontconverter/fontconverter.html中使用我们的fontconverter。fontconverter将创建一个js文件,其中包含提供的ttf文件的内容作为base64编码的字符串和jsPDF的附加代码。您只需将生成的js-File添加到项目中即可。然后,您就可以在代码中使用setFont-method并编写UTF-8编码文本。

这段话能得到几个信息:

  • 如果要使用中文,必须要集成自定义字体(必须是.ttf后缀的文件。我之前一直用win10自带的字体,结果一直有异常。win10的有些字体后缀是.ttc)
  • 使用fontconverter生成字体的js文件,并引入到项目中(clone下jsPDF的项目,项目下/fontconverter/fontconverter.html能把字体文件转成js文件)
  • 设置setFont

现在变成了这样,这里我使用的是微软雅黑字体,你们自行百度下载

<script src="libs/jspdf.debug.js"></script> <script src="libs/jspdf.plugin.autotable.js"></script> //重点引入这个自定义字体 <script src="msyh-normal.js"></script> 
//初始化 const doc = new jsPDF(); //设置字体 doc.setFont('msyh'); //设置内容 doc.autoTable({ 
   html: '#table'}); //导出 doc.save('table.pdf'); 

第二次运行

第二次生成的效果,和第一次无差别
这和第一次的效果没任何区别。我在别人的博客中找到了解决的方法,下面是地址

https://www.hangge.com/blog/cache/detail_2213.html

doc.autoTable({ 
   
    html: '#table', styles: { 
    font: "msyh" } }); 

第三次运行

第三次生成的效果,标题还存在乱码
可以看到表格的区域已经解决了乱码的问题,但是标题栏还是一样还是乱码。这里我找了另一个人的博客,下面是地址

https://juejin.im/post/5c1bb46adcb310f9f

doc.autoTable({ 
   
    html: '#table', styles: { 
    font: "msyh", //这里设置字体样式 fontStyle: "normal" } }); 

最终效果

解决中文乱码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228668.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午6:28
下一篇 2026年3月16日 下午6:29


相关推荐

  • 网站开发团队成员(项目团队)

    1.项目带头人(Boss):通常是项目的发起人,为项目规划企业战略目标,对项目的成败负最终责任。2.项目经理:这个不用说了是项目当然需要PM,建议是通过PMP认证的项目经理,主要负责项目各个过程的管理,以及过程优化降低开发风险。 3.系统架构师:架构师不单单是技术架构,还

    2022年4月10日
    139
  • c语言-日期格式化[通俗易懂]

    c语言-日期格式化[通俗易懂]7-12日期格式化(5分)世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。输入格式:输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。输出格式:在一行中按照“yyyy-mm-dd”的格式给出年…

    2022年6月9日
    49
  • java executeupdate,Java线程安全中的executeUpdate方法[通俗易懂]

    java executeupdate,Java线程安全中的executeUpdate方法[通俗易懂]IhavemultiplethreadstryingtoupdateaMySQLdatabase?isexecuteUpdatemethodthread-safetouse?解决方案No,itisnotthread-safetouse.Infact,ifsomeotherthreadusesastatement,andthenanot…

    2022年10月20日
    6
  • 学习大数据需要什么基础?大数据要学哪些内容?

    学习大数据需要什么基础?大数据要学哪些内容?大数据只需要学习Java的标准版JavaSE就可以了,像Servlet、JSP、Tomcat、Struct、Spring、Hibernate,Mybaits都是JavaEE方向的技术在大数据技术里用到的并不多,只需要了解就可以了,当然Java怎么连接数据库还是要知道的,像JDBC一定要掌握一下,有同学说Hibernate或Mybaits也能连接数据库啊,为什么不学习一下,我这里不是…

    2022年4月29日
    82
  • 解决使用Nginx错误 Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING问题

    解决使用Nginx错误 Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING问题Failedtoloadresource:net::ERR_INCOMPLETE_CHUNKED_ENCODING问题先说解决办法:直接删除Nginx缓存文件即可;问题描述:使用Nginx代理的服务,一直使用正常,突然昨天就访问不了了;通过IP访问和端口能正常访问。原本以为是请求头文件过大导致资源未加载完问题;然后修改了Tomcat中配置中的请求头文件,在Tomcat的…

    2025年8月11日
    3
  • python爬虫(下)–模拟登录与Captcha识别

    python爬虫(下)–模拟登录与Captcha识别前言之前在 python 爬虫 上 请求 关于模拟浏览器方法 中我挖了一个坑 时隔一个多月 趁着最近有点空 我想是时候填填坑了 总结总结了 不然真的就忘了验证码虽然之前挖坑的那篇已经说了一些 现在还是稍微说一说 在模拟登录中 其实让写爬虫的人疼头就是验证码 只要能破掉验证码 那么登录不是问题 验证码 Chaptcha 内容从英文字符和数字识别 到数字加减乘除 再到汉字的出现 后面还有 12306 的看

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号