中文导出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]