FastReport导出PDF乱码的解决办法

程序员在使用FastrReport控件导出PDF时 , 时常会出现报表文字乱码的情况 , 是由于程序读取中文字体名称时错误,导致写入到PDF文件中的字体名称错误,所以当用Adobe Acrobat等PDF阅读器打开PDF时 , 要读取PDF文件中的字体名称,从而调用系统中对应的安装字体来展示时就会报错 。
找到FastReport安装包中的“frxExportPDF.pas”文件,
2.找到函数GetFontName , 用一下的代码,替换原函数中的代码
function TfrxPDFFont.GetFontName: AnsiString;
var
s: AnsiString;
function HexEncode7F(Str: WideString): AnsiString;
var
s: AnsiString;
t: AnsiString; //添加一个变量
Index, Len: Integer;
begin
s := \’\’;
t := Str; //将字体名称赋值给该变量,此时就将参数字体名称的widestring类型转换为AnsiString,因为很多字体是中文
//字体,汉字是双字节,所以用Asnsistring类型进行长度判断时才能正确显示字体的长度
//例:字符串“ 宋体”A:Length(widestring)=2 B: Length(ANSIString)=4 , 所以根据长度来判断
//是否为汉字时,因为字符串长度的差异,导致读取汉字的错误,
//用widestring传递字符时,Length(widestring)是不能真实反应字符串的长度的,
//特别是针对汉字韩文日文等双字节字体时,仅能反应英文德文等单字节字符串
Len := Length(t); //获取字体名称字符串长度
Index := 0;
while Index < Len do
begin
Index := Index + 1;
if Byte(t[Index]) > $7F then //当ASCII码的值大于$7F时,表示该字符是汉字的某一个字节
//如果是汉字的某一个字节,则添加
s := s + \’
else
//如果不是汉字(单字节字符)则直接根据序号读取字符串中的字符,
s := s + AnsiString(t[Index]);
end;
Result := s;
end;
3.然后重新编译该安装包后,重新安装FastReport即可 。
原因就是判断汉字字体名称长度时(
【FastReport导出PDF乱码的解决办法】以上就是朝夕生活(www.30zx.com)关于“FastReport导出PDF乱码的解决办法”的详细内容,希望对大家有所帮助!

猜你喜欢