请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

wisestar

初级会员

28

主题

83

帖子

301

积分

初级会员

积分
301
QQ

[已处理] pdf导出乱码

wisestar
初级会员   /  发表于:2021-11-25 16:08  /   查看:2129  /  回复:9
1金币
参考了论坛其他乱码的解决方案,进行了字体注册,但是仍然乱码
  1. mounted() {
  2.       console.log('win', window)
  3.       this.queryHistoryDate()
  4.       this.queryDept()
  5.       // register the specific custom font
  6.       var fontsObj = window.fonts;

  7.       this.registerCustomFont(fontsObj);
  8.       // add custom font to fontManager
  9.       this.addFontsToFontManager(fontsObj);
  10.     },
复制代码
  1. registerCustomFont(fontsObj) {
  2.         var fonts = {
  3.           normal: fontsObj["simsun.ttf"],
  4.         };
  5.         GC.Spread.Sheets.PDF.PDFFontsManager.registerFont("宋体", fonts);
  6.       },

  7.       addFontsToFontManager(fontsObj) {
  8.         var fonts = {
  9.           normal: fontsObj["MTCORSVA.TTF"],
  10.         };
  11.         GC.Spread.Sheets.PDF.PDFFontsManager.fallbackFont = function (font) {
  12.           var fontInfoArray = font.split(" "),
  13.           fontName = fontInfoArray[fontInfoArray.length - 1];
  14.           if (fontName === "mtcorsva") {
  15.             return fonts.normal;
  16.           }
  17.         };
  18.       },
复制代码
  1. async initSpread(spread) {
  2.         this.spread = spread;//赋值
  3.         var sheet = spread.getActiveSheet();
  4.         // spread.options.backColor = '#eaeaea' // 表格背景色
  5.         // spread.options.grayAreaBackColor = '#eaeaea' // 工作区背景色
  6.         /*spread.options.newTabVisible = false // 不显添加表单
  7.         spread.options.tabStripVisible = false // 不显示底部表名
  8.         spread.options.showVerticalScrollbar = true // y不显示滚动条
  9.         spread.options.showHorizontalScrollbar = true // x不显示滚动条
  10.         spread.options.scrollbarMaxAlign = false // y滚动条可滚动*/
  11.         sheet.suspendPaint();
  12.         sheet.options.allowCellOverflow = true;

  13.         await this.query()//初始化列表数据
  14.         var colInfos = [
  15.           {name: "deptName", displayName: "部门", size: 200},
  16.           {name: "deptLeaders", displayName: "部门负责人", size: 200},
  17.           {name: "year", displayName: "提成年份", size: 120},
  18.           {name: "month", displayName: "提成月份", formatter: "0.00", size: 120},
  19.           {name: "commissionType", displayName: "提成类型", size: 120},
  20.           {name: "saleCommissionStr", displayName: "销售提成", size: 120},
  21.           {name: "serviceCommissionStr", displayName: "服务提成", size: 120},
  22.           {name: "sendStatus", displayName: "发放状态", size: 120},
  23.         ];//表头
  24.         sheet.setDataSource(this.tableData);
  25.         var filter = new GC.Spread.Sheets.Filter.HideRowFilter(new GC.Spread.Sheets.Range(0, 0, this.tableData.length, 7));
  26.         sheet.rowFilter(filter);

  27.         this.filter = filter;
  28.         sheet.defaults.rowHeight = 28;
  29.         sheet.defaults.locked = true;
  30.         // this.initOutlineColumnFilter(sheet);
  31.         sheet.bindColumns(colInfos);
  32.         // let data = jsonData, fontsObj = fonts;


  33.         // setting printInfo
  34.         this.setPrintInfo(spread);
  35.         spread.resumePaint();
  36.       },
复制代码
  1. exportPDF() {
  2.         this.spread.savePDF(
  3.           function (blob) {
  4.             saveAs(blob, '提成统计.pdf');
  5.           },
  6.           console.log,
  7.           {
  8.             title: '智多星报表',
  9.             author: '智多星科技有限公司',
  10.             subject: '1.0',
  11.             keywords: '',
  12.             creator: 'xiaojxiang'
  13.           });
  14.       },
复制代码


最佳答案

查看完整内容

可以给整片区域设置,例如 sheet.getRange(0, 0, 1, 7).font("normal normal 15px simkai") 还有一种更加常规的做法是在我们在线表格编辑器用界面去设置字体,或者是excel设置

9 个回复

倒序浏览
最佳答案
最佳答案
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-25 16:08:38
来自 8#
wisestar 发表于 2021-11-26 09:45
你好,按这个方案的话,确实是可以显示中文,但是如果一个个单元格设置的话,未免太繁琐了,是否有方法可 ...

可以给整片区域设置,例如
sheet.getRange(0, 0, 1, 7).font("normal normal 15px simkai")

还有一种更加常规的做法是在我们在线表格编辑器用界面去设置字体,或者是excel设置 image.png272636412.png

评分

参与人数 1满意度 +5 收起 理由
wisestar + 5

查看全部评分

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-25 16:55:45
2#
你好,注册字体是需要引入对应的字体文件,请问您是否正确引入呢?可以参考附件的导出pdf demo或者是我们学习指南的demohttps://demo.grapecity.com.cn/sp ... t-export-pdf/purejs

字体demo.zip

19.56 MB, 下载次数: 87

回复 使用道具 举报
wisestar
初级会员   /  发表于:2021-11-25 17:33:52
3#
Derrick.Jiao 发表于 2021-11-25 16:55
你好,注册字体是需要引入对应的字体文件,请问您是否正确引入呢?可以参考附件的导出pdf demo或者是我们学 ...

你好,我之前在论坛中已经看过类似的例子,从中也找到了一份字体在初始化的时候也有获取到字体进行了注册
image.png424000548.png
image.png253360900.png
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-25 17:54:28
4#
wisestar 发表于 2021-11-25 17:33
你好,我之前在论坛中已经看过类似的例子,从中也找到了一份字体在初始化的时候也有获取到字体进行了注册 ...

请把表单上传,我们这边看下表单上的字体是否都有成功注册。
回复 使用道具 举报
wisestar
初级会员   /  发表于:2021-11-26 09:16:25
5#
麻烦看一下

demo-sjs模板.html

6.87 KB, 下载次数: 62

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-26 09:35:31
6#

出现这个问题是因为,单元格没有指定字体,在没设置的前提下,字体默认都是calibri。但是calibri是西文字体,且没注册,所以下载中文就会乱码。因此,要想显示宋体,则需要给单元格设置font为宋体。请查看附件的demo。

demo-sjs模板.html

7.7 KB, 下载次数: 64

回复 使用道具 举报
wisestar
初级会员   /  发表于:2021-11-26 09:45:42
7#
image.png94171752.png
你好,按这个方案的话,确实是可以显示中文,但是如果一个个单元格设置的话,未免太繁琐了,是否有方法可以直接一把设置全部呢?
回复 使用道具 举报
wisestar
初级会员   /  发表于:2021-11-26 10:17:59
9#
Derrick.Jiao 发表于 2021-11-25 16:08
可以给整片区域设置,例如
sheet.getRange(0, 0, 1, 7).font("normal normal 15px simkai")

非常感谢,提个建议,这个设置能不能放到导出pdf的的demo中
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-11-26 11:00:03
10#
wisestar 发表于 2021-11-26 10:17
非常感谢,提个建议,这个设置能不能放到导出pdf的的demo中

请问是指学习指南这个demo吗?
https://demo.grapecity.com.cn/sp ... t-export-pdf/purejs

感谢你的建议,这边这个demo因为json中已经是设置对应的字体,因此在demo中没有体现设置字体部分。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部