找回密码
 立即注册

QQ登录

只需一步,快速开始

Derrick.Jiao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-12-29 10:53  /   查看:2411  /  回复:0
有很多刚接触SpreadJS的朋友就会对导出pdf乱码以及要注册中文字体这个问题非常不解。这是PDF文件的特殊性造成的。PDF是Portable Document Format的简称,意为“便携式文档格式”,它原生仅仅带有英文字体,不包含任何中文字体,因此当导出的内容中含有中文字体编码时,一定会显示乱码,所以通常情况下,我们都需要为PDF进行字体注册操作。

如果自定义字体,相信这两篇文章讲得都很详细了,可以看下这两篇文章。
https://demo.grapecity.com.cn/sp ... tom-font-export-pdf
https://gcdn.grapecity.com.cn/showtopic-54573-1-1.html
这篇文章主要讲讲常见的一些问题。
1、我的字体文件怎么来?
首先,先确认我们的表单需要用到哪些字体,然后去找对应字体的ttf文件(电脑上或者是一些字体网站上都有,需注意版权问题)。找到之后将其转为base64格式的文件。具体如何转,可以找一些在线的文件转换器,不过在线的有可能会因为字体文件太大而崩溃,或者有能力的大佬可以自己写一个转换的工具。然后通过下面的方式去把我们的字体文件存储为一个js文件去等待引用。
image.png673675841.png

2、注册完字体后,为什么还不生效?
那是因为我们表单上默认的字体是Calibri,我们要想单元格上显示某个字体并导出,需要用font接口设置字体。例如
[size=1em]sheet.getCell(1, 1).text('FontStyle').font('italic bold 15px/30px 宋体');
[size=1em]那我不想一个一个设置怎么版?更加简单,直接用我们的编辑器通过UI界面操作,还不用涉及代码
image.png601015014.png
那我都按照上面的操作了,为什么还不生效呢?还有一个可能就是注册的字体和上面font接口使用的不是同一个字体,例如,我用代码注册了宋体
sheet.getCell(1, 1).text('FontStyle').font('italic bold 15px/30px 宋体');
但是我在注册字体的时候写成了simsun,那么就会找不到这个字体导出来也会乱码。
GC.Spread.Sheets.PDF.PDFFontsManager.registerFont("simsun", fonts);


3、如何注册多个字体,可以参考下面的代码注册
image.png882413329.png

4、我想在页面上显示一些特殊字体怎么办?
可以用font-face处理,可以参考下面的链接,另外附件也上传了一个简单的demo。

https://gcdn.grapecity.com.cn/showtopic-54567-1-1.html

特殊字体_update.zip

167.22 KB, 下载次数: 157

字体demo.zip

19.56 MB, 下载次数: 146

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部