找回密码
 立即注册

QQ登录

只需一步,快速开始

Lenka.Guo 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2021-8-31 10:59  /   查看:2499  /  回复:0
通常情况下,报表由文本内容组成,浏览器通过使用glyphs来渲染的字体形状。字体资源包含将字符编码映射到代表这些字符的字形的信息。因此,浏览器需要访问字体资源,才能够按照预期显示文本。
当 ActiveReportsJS 渲染报表时,它将这些字体属性翻译成font-family, font-stylefont-stylefont-weightfont-weightCSS样式属性,并依靠浏览器来解析相关的字体资源,提取所需的字形。浏览器有两种方式来访问字体资源它们可能安装在浏览器运行的系统中,也可能是可下载的。

但经常在浏览器为英文或者其他设置的情况下会出现富文本框右侧吃字,超链接显示不全等问题。
究其原因还是字体未正确的读取,导致ActiveReportsJS 测量字的时候测量错误,计算空间失误导致无法正确显示字体。

示例附件

解决方法:
1. 添加 fontsConfig.json文件及对应应用的字体文件,注意 fontConfig.json 中顶部的 name字段必须存在,否则报错。

  1. {
  2.         "name": "",
  3.         "path": "",
  4.         "descriptors": [
  5.         
  6.                 {
  7.                         "name": "ABC",
  8.                         "source": "fonts/Chinese.ttf"
  9.                 },
  10.                         
  11.                 {
  12.                         "name": "CBC",
  13.                         "source": "fonts/Chinese.ttf"
  14.                 },
  15.                 {
  16.                         "name": "黑体",
  17.                         "source": "fonts/Chinese.ttf"
  18.                 }
  19.         ]
  20. }
复制代码




2. 调用GC.ActiveReports.Core.ARJS.FontStore.registerFonts() ,该API 也会返回Promise对象
  1. ARJS.FontStore.registerFonts("./fonts/fontsConfig.json")
  2.       .then(function(){
  3.         return fetch("./fonts/fontsConfig.json");
  4.       })
  5.       .then(function (e) {
  6.         return e.json();
  7.       })
  8.       .then(function (fonts) {

  9.         const settings = {
  10.           info: {
  11.             title: 'Invoice List',
  12.             subject: 'This is the Invoice List',
  13.             author: 'John K',
  14.             keywords: 'PDF; import; export',
  15.           },
  16.           fonts: fonts,
  17.         };
  18.         const lang = 'HK';
  19.         function blob2base64(blob) {
  20.           return new Promise((resolve, reject) => {
  21.             var reader = new FileReader();
  22.             reader.onloadend = () => {
  23.               resolve(reader.result);
  24.             };
  25.             reader.onerror = () => {
  26.               reject(reader.err);
  27.             };
  28.             reader.readAsDataURL(blob);
  29.           });
  30.         }
复制代码








3. 设置定时器,等字体加载完成后在进行渲染
  1.   function exportDocumentOnViewerReady() {
  2.     var exportInterval = setInterval(function () {
  3.       if (!window.arjsViewerInitialized) {
  4.         return;
  5.       }

  6.       window.generateProposal('超链接吃字.rdlx-json');

  7.       clearInterval(exportInterval);

  8.     }, 300);
  9.   }
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

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