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