找回密码
 立即注册

QQ登录

只需一步,快速开始

yeshuang

注册会员

20

主题

45

帖子

163

积分

注册会员

积分
163

微信认证勋章

[已处理] PDF导出乱码

yeshuang
注册会员   /  发表于:2019-4-28 11:39  /   查看:2602  /  回复:1
本帖最后由 yeshuang 于 2019-4-28 11:40 编辑
  1. var fileName = config.options.title.text == '' ? '未命名' : config.options.title.text;
  2.                             var sheet = spread.getActiveSheet();
  3.                             sheet.suspendPaint();
  4.                             var printInfo = sheet.printInfo();
  5.                             printInfo.showBorder(true);
  6.                             printInfo.showGridLine(true);
  7.                             printInfo.headerCenter("Olympic Athletes");
  8.                             printInfo.headerLeft("&G");
  9.                             printInfo.headerLeftImage("./images/olympic.jpg");
  10.                             printInfo.footerCenter("&P/&N");
  11.                             sheet.resumePaint();

  12.                             function registerServerFont(name, type, serverPath) {
  13.                                 var xhr = new XMLHttpRequest();
  14.                                 xhr.open('GET', serverPath, true);
  15.                                 xhr.responseType = 'blob';

  16.                                 xhr.onload = function (e) {
  17.                                     if (this.status == 200) {
  18.                                         // get binary data as a response
  19.                                         var blob = this.response;

  20.                                         //将Blob 对象转换成 ArrayBuffer
  21.                                         var reader = new FileReader();
  22.                                         reader.onload = function (e) {
  23.                                             var fontrrayBuffer = reader.result;
  24.                                             var fonts = GC.Spread.Sheets.PDF.PDFFontsManager.getFont(name) || {};
  25.                                             fonts[type] = fontrrayBuffer;
  26.                                             GC.Spread.Sheets.PDF.PDFFontsManager.registerFont(name, fonts);
  27.                                         }
  28.                                         reader.readAsArrayBuffer(blob);
  29.                                     }
  30.                                 };

  31.                                 xhr.send();
  32.                             }

  33.                             registerServerFont('微软雅黑', 'normal', '/Content/Lib/Spread.Sheets.Release.11.2.2/fonts/msyh.ttf');

  34.                             spread.savePDF(
  35.                                 function (blob) {
  36.                                     saveAs(blob, fileName + '.pdf');
  37.                                 },
  38.                                 console.log,
  39.                                 {
  40.                                     title: fileName,
  41.                                     author: 'Test Author',
  42.                                     subject: 'Test Subject',
  43.                                     keywords: 'Test Keywords',
  44.                                     creator: 'test Creator'
  45.                                 }
  46.                             );
复制代码
咨询了技术,看了代码说,正常注册字体就是这样做的,让我提供一下模板ssjson帮忙排查一下原因。

模板.zip

1.18 KB, 下载次数: 55

ssjson文件

1 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-29 10:59:39
沙发
您好,我们分析了您的模板,发现表中字体的样式分别是:

表头:微软雅黑
image.png14985045.png

内容:Calibri
image.png124565428.png

您可以通过以下代码分别获取表头和内容的字体:

  1. sheet.getActualStyle(0,0);
  2. sheet.getActualStyle(1,1);
复制代码


为PDF注册字体时,需要根据获取到的实际字体,执行注册操作:

  1. registerServerFont('微软雅黑', 'normal', 'font/simhei.ttf');
  2. registerServerFont('Calibri', 'normal', 'font/simhei.ttf');
复制代码


效果如下图:

image.png296171874.png

您应该注意到了,实际上这里为registerServerFont函数传递的参数中,

第一个参数就是您获取到单元格的实际字体的名称,

第三个参数就是对应的字体文件的路径,

这两个参数只要对应起来,实际上可以很灵活地实现字体的映射。

比如这里我们把微软雅黑映射成黑体,Calibri也映射成黑体。

这个可以根据您的需要灵活进行设置。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部