lazarus fastreport导出pdf Cant swap font

  • 主要是frxLinuxFonts.pas。其会从配置的目录当中加载ttf字体。ttc类型的字体加载不了。
  • 如果只给当前用户使用的话可以在用户目录下创建.fonts目录,然后把ttf复制到目录当中并刷新字体缓存
  •   //刷新字体缓存
      fc-cache -fv ~/.fonts
      
      
      //查看系统中的中文字体
      fc-list : lang=zh-cn
    
  • 参考 字体问题处理
  • 根据参考中的信息修改单元中的信息。但是问题稍有不同.这里不知什么原因Font.name没有正常编码,需要做类型转换。应该是因为使用的是老版本的报表格式
  •   {$ifdef linux}
        familyItem := FontCollection.Family[Font.Name];
        if familyItem=nil then
        begin
          lfname:=Font.Name;
          //中文字体名称
          if SameText(lfname,'宋体') then
            lfname:='SimSun'
          else if SameText(lfname,'黑体') then
            lfname:='SimHei'
          else if SameText(lfname,'楷体') then
            lfname:='KaiTi'
          else if SameText(lfname,'仿宋_GB2312') then
            lfname:='FangSong_GB2312'
          else if SameText(lfname,'楷体_GB2312') then
            lfname:='KaiTi_GB2312'
          else if SameText(lfname,'幼圆') then
            lfname:='YouYuan'
          else if SameText(lfname,'新宋体') then
            lfname:='NSimSun'
          else if SameText(lfname,'隶书') then
            lfname:='LiSu'
          else if SameText(lfname,'微软雅黑') then
            lfname:='Microsoft YaHei UI';
          familyItem := FontCollection.Family[lfname];
          if familyItem=nil then
          begin
            //中文字体乱码 fastreport4格式
            lfname:=UTF8ToCP936(Font.Name);
            if SameText(lfname,'宋体') then
              lfname:='SimSun'
            else if SameText(lfname,'黑体') then
              lfname:='SimHei'
            else if SameText(lfname,'楷体') then
              lfname:='KaiTi'
            else if SameText(lfname,'仿宋_GB2312') then
              lfname:='FangSong_GB2312'
            else if SameText(lfname,'楷体_GB2312') then
              lfname:='KaiTi_GB2312'
            else if SameText(lfname,'幼圆') then
              lfname:='YouYuan'
            else if SameText(lfname,'新宋体') then
              lfname:='NSimSun'
            else if SameText(lfname,'隶书') then
              lfname:='LiSu'
            else if SameText(lfname,'微软雅黑') then
              lfname:='Microsoft YaHei UI';
            familyItem := FontCollection.Family[lfname];
            if familyItem = nil then
            begin
                familyItem := FontCollection.Family[SwapFontName];
                if familyItem = nil then
                  raise Exception.CreateFmt('Cant swap font 1.%s 2.%s 3.%s',[Font.Name,lfname,SwapFontName]);
            end;
          end;
        end;
        Result := familyItem.FamilyName;
        {$else}
        familyItem := FontCollection.Family[Font.Name];
        if familyItem = nil then
        begin
          familyItem := FontCollection.Family[SwapFontName];
          if familyItem = nil then
            raise Exception.Create('Cant swap font');
        end;
        Result := familyItem.FamilyName;
        {$endif}  
    
posted @ 2025-09-04 16:05  后凤凰  阅读(7)  评论(0)    收藏  举报