Clark.Pan 发表于 2020-4-13 00:24:27

中文导出PDF常见问题

1.中文需要注册字体
SpreadJS默认导出PDF中注册的字体均为英文字体,所以在日常做中文导出时需要注册对应的PDF字体。
注册分为服务器端注册和前端注册,服务器端注册代码如下,serverPath为服务器端指定PDF字体位置
function registerServerFont(name, type, serverPath) {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', serverPath, true);
            xhr.responseType = 'blob';

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

                  //将Blob 对象转换成 ArrayBuffer
                  var reader = new FileReader();
                  reader.onload = function (e) {
                        var fontrrayBuffer = reader.result;
                        var fonts = GC.Spread.Sheets.PDF.PDFFontsManager.getFont(name) || {};
                        fonts = fontrrayBuffer;
                        GC.Spread.Sheets.PDF.PDFFontsManager.registerFont(name, fonts);
                  }
                  reader.readAsArrayBuffer(blob);
                }
            };

            xhr.send();
      }前端注册:
      function registerCustomFont(fontsObj) {
            var fonts = {
                normal: fontsObj["simkai.ttf"]
            };
            GC.Spread.Sheets.PDF.PDFFontsManager.registerFont('simkai', fonts);
      }
将字体的ttf文件转为base64编码后通过js引入来导入,上面代码中 fontsObj["simkai.ttf"]就是对应的ttf字体base64编码
2.引入依赖js
由于导出PDF与打印的用的是同一套printinfo,所以需要引入print.min.js相关的js文件,并且要在pdf.min.js引入之前引入,否则会报错误。
3.页眉页脚的字体乱码
在页眉页脚设置中加入相关字体,例如:
printInfo.headerCenter("&\"simsun\"你好");
页: [1]
查看完整版本: 中文导出PDF常见问题