关于前端:前端解决前端英文Chrome-浏览器出现的生成PDF吃字及超链接显示问题

8次阅读

共计 1843 个字符,预计需要花费 5 分钟才能阅读完成。

通常状况下,报表由文本内容组成,浏览器通过应用 glyphs 来渲染的字体形态。字体资源蕴含将字符编码映射到代表这些字符的字形的信息。因而,浏览器须要拜访字体资源,才可能依照预期显示文本。
当 ActiveReportsJS 渲染报表时,它将这些字体属性翻译成 font-family, font-style、font-style 和 font-weight 和 font-weightCSS 款式属性,并依附浏览器来解析相干的字体资源,提取所需的字形。浏览器有两种形式来拜访字体资源它们可能装置在浏览器运行的零碎中,也可能是可下载的。

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

解决办法:

  1. 增加 fontsConfig.json 文件及对应利用的字体文件,留神 fontConfig.json 中顶部的 name 字段必须存在,否则报错。
{
        "name": "","path":"",
        "descriptors": [
        
                {
                        "name": "ABC",
                        "source": "fonts/Chinese.ttf"
                },
                        
                {
                        "name": "CBC",
                        "source": "fonts/Chinese.ttf"
                },
                {
                        "name": "黑体",
                        "source": "fonts/Chinese.ttf"
                }
        ]
}
  1. 调用 GC.ActiveReports.Core.ARJS.FontStore.registerFonts(),该 API 也会返回 Promise 对象
 ARJS.FontStore.registerFonts("./fonts/fontsConfig.json")
      .then(function(){return fetch("./fonts/fontsConfig.json");
      })
      .then(function (e) {return e.json();
      })
      .then(function (fonts) {

        const settings = {
          info: {
            title: 'Invoice List',
            subject: 'This is the Invoice List',
            author: 'John K',
            keywords: 'PDF; import; export',
          },
          fonts: fonts,
        };
        const lang = 'HK';
        function blob2base64(blob) {return new Promise((resolve, reject) => {var reader = new FileReader();
            reader.onloadend = () => {resolve(reader.result);
            };
            reader.onerror = () => {reject(reader.err);
            };
            reader.readAsDataURL(blob);
          });
        }
  1. 设置定时器,等字体加载实现后在进行渲染
  function exportDocumentOnViewerReady() {var exportInterval = setInterval(function () {if (!window.arjsViewerInitialized) {return;}

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

      clearInterval(exportInterval);

    }, 300);
  }
正文完
 0