首页 > 其他分享 >【原创】修复lazport用lrPDFExport导出含中文的pdf中文变为框框的Bug

【原创】修复lazport用lrPDFExport导出含中文的pdf中文变为框框的Bug

时间:2024-10-18 10:11:16浏览次数:5  
标签:中文 lrPDFExport AFontName lazport 字体 Result AFontStyle

lazport用lrPDFExport导出含中文的pdf中文会变为框框。

lazport用lrPDFExport导出含中文的pdf中文变为框:

修复步骤:
打开lr_e_fclpdf.pas
1、修改333行的function DefFontName:string; 
增加缺省字体:宋体/仿宋/楷体/和黑体等字体对名称,修改后如果系统如已安装以下字体之一就可以正常显示中文,但所有字体都会用缺少字体显示。

function DefFontName:string;
const
  DefFontNames : array [1..7] of string =
     ('STSong','FangSong','KaiTi','SimHei','Liberation Sans', 'Arial', 'FreeSans');
var
  i: Integer;
begin
  for i:=1 to 7 do
    if Assigned(gTTFontCache.Find(DefFontNames[i], false, false)) then
    begin
      Result:=DefFontNames[i];
      exit;
    end;
  raise Exception.Create('Not found Sans font');
end;

2、将memoview的中文字体名称转为系统对应字体名称,修改后就可以显示对应的中文字体,你也可以根据自己的需要添加相应的字体。

function TExportFonts.AddItem(AFontName: string; AFontStyle: TFontStyles
  ): TExportFontItem;
var
  S1, S2, S3: String;
begin
  if AFontName='仿宋' Then AFontName:='FangSong';
  if AFontName='楷体' Then AFontName:='KaiTi';
  if AFontName='幼圆' Then AFontName:='YouYuan';
  if AFontName='黑体' Then AFontName:='SimHei';
  if AFontName='宋体' Then AFontName:='STSong';

  Result:=FindItem(AFontName, AFontStyle);
  if Assigned(Result) then exit;

  if Assigned(gTTFontCache.Find(AFontName, Graphics.fsBold in AFontStyle, Graphics.fsItalic in AFontStyle)) then
  begin
    Result:=TExportFontItem.Create(Self, AFontName, AFontStyle);
    S1:=ExtractFileDir(Result.FTTFFontInfo.FileName);
    S2:=ExtractFileName(Result.FTTFFontInfo.FileName);
    S3:=AFontName;
    FOwner.FPDFDocument.FontDirectory:=S1;
    Result.FPdfFont:=FOwner.FPDFDocument.AddFont(S2, S3);
  end
  else
    Result:=FDefaultFontNormal;
end;

修改后重新安装lrPDFExport后就可以.

如果按以上方面修改后还不能正常显示中文,请安装相关字体。
以上方法在linux已验证,上述截图是在银河麒麟 aarch64运行lazreport导出的。

另外,lrPDFExport中文导出的效果比lazreportpdfexport强太多了,不会出现字距的Bug。

标签:中文,lrPDFExport,AFontName,lazport,字体,Result,AFontStyle
From: https://www.cnblogs.com/qiufeng2014/p/18473695

相关文章

  • vecode写c++遇到窗口一闪而过+中文乱码咋办
    本人没使用系统cmd窗口,而是使用了vscode内置终端,目的是为了之后输出中文的时候不乱码(vscode是utf-8,cmd是gbk,干脆全部使用vscode,不使用系统cmd作为输出窗口)附上配置文件:launch.json{//使用IntelliSense了解相关属性。//悬停以查看现有属性的描述。//欲了解......
  • Linux环境下Matplotlib绘图中文乱码问题
    问题:如图所示,中文乱码1.准备ttf字体文件:路径: C:\Windows\Fonts例如楷体:simkai.ttf2.查看当前环境的matplot字体路径:importmatplotlibprint(matplotlib.matplotlib_fname())运行结果:/home/3kyou/.local/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibr......
  • Bilidown v1.2.4 B站在线视频下载解析工具中文单文件版
    Bilidown是一款专为B站视频下载而设计的工具,一款简洁好用的B站视频下载工具,支持由UP主上传的单集,多集以及相关封面,弹幕,字幕,音乐,刮削等等,支持任意粒度批量组合,登录后最高支持到1080P,大会员可获取所有画质及音质。Bilidown具有强大的功能和简便的操作界面。Bilidown可以下载B站上......
  • Chinese-LLaMA-Alpaca-2: 新一代开源中文大语言模型
    Chinese-LLaMA-Alpaca-2:新一代开源中文大语言模型近日,由哈尔滨工业大学讯飞联合实验室推出的Chinese-LLaMA-Alpaca-2项目引起了广泛关注。该项目是中文LLaMA&Alpaca大模型的第二期,基于Meta发布的可商用大模型Llama-2进行开发,推出了一系列全新的中文大语言模型。本文将对这个......
  • 2024版FL Studio中文版本免激活安装包下载!音乐人的必备神器!
    ......
  • camtasia2024永久免费简体中文破解版网盘安装包下载
    camtasia2024——你的屏幕录制全能小助手大家好,我是你们的分享达人小白兔......