|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2009/9/30 9:27:33 |
标题: |
请高手解决FastReport转PDF中文乱码的问题 |
浏览:1832 |
|
加入我的收藏 |
楼主: |
如题,下了最新的4.8.5版本,但是发现转PDF时中文还是会乱码,字符集改成GB2312_CHARSET也没用, 请哪位大侠有空出手解决下这个老问题。
----------------------------------------------
- |
作者: |
tang1 (tjh) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2009/9/30 9:55:35 |
1楼: |
1,修改Source下的frxRes.pas,AddXml Stream := TStringStream.Create(Str); 修改成Stream := TStringStream.Create(Str, TEncoding.Utf8);
2.可以自己编译一个frcc.exe,替换Res目录下的,然后再recompile即可。
用delphi 2010建立一个console工程,名称为frcc,代码如下:
program frcc;
{$APPTYPE CONSOLE}
uses SysUtils, Classes, StrUtils;
var xml: string; list: TStringList; i: Integer; fileName : string; lineWidth: integer; line: string;
begin try if ParamCount < 1 then begin Writeln('no input'); Exit; end;
xml := ParamStr(1); fileName := ExtractFileName(xml); fileName := Copy(fileName, 1, Length(fileName) - 4); //delete ext .xml list := TStringList.Create(); list.LoadFromFile(xml, TEncoding.UTF8); xml := list.Text; list.Clear; list.Add('unit ' + fileName + ';'); list.Add(''); list.Add('interface'); list.Add('{$I frx.inc}'); list.Add('implementation'); list.Add('uses frxRes;'); list.Add('const resXML ='); xml := ReplaceText(xml, #13, ''); xml := ReplaceText(xml, #10, '');
i := 1; while True do begin if (i + 80) < (Length(xml) + 1) then lineWidth := 80 else lineWidth := Length(xml) + 1 - i; if lineWidth = 0 then break;
line := Copy(xml, i, lineWidth); list.Add(QuotedStr(line) + '+'); i := i + lineWidth;
end; list.Add(''''';'); list.Add('initialization');
list.Add(' frxResources.AddXML(Utf8Encode(resXML));'); list.Add(''); list.Add('end.');
list.SaveToFile(ChangeFileExt(ParamStr(1), '.pas'), TEncoding.Default);
list.Free; except on E:Exception do Writeln(E.Classname, ': ', E.Message); end; end.
----------------------------------------------
TJH
|
作者: |
tang1 (tjh) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2009/9/30 9:56:45 |
2楼: |
以上问题,在窑洞均有介绍,我只是给整理。
----------------------------------------------
TJH
|
作者: |
|
2009/9/30 11:19:41 |
3楼: |
楼上的大哥,我说的是报表导出PDF时中文字符乱码的问题,你这个好像是用来解决设计界面的中文显示问题吧
----------------------------------------------
-
|
作者: |
|
2009/9/30 15:16:14 |
4楼: |
不要设成 GB2312_CHARSET 好像是要设成 DEFAULT_CHARSET 这样在转换时才会读取正确的字节位数
----------------------------------------------
-
|
作者: |
|
2009/9/30 15:30:19 |
5楼: |
本来预设就是DEFAULT_CHARSET,转出来的中文都是一个一个的框。 Google上查了一下,解决方法都是针对3.x版的,现想请大侠针对4.8版的提出个比较彻底的解决办法。
----------------------------------------------
-
|
作者: |
tang1 (tjh) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2009/10/5 13:59:46 |
6楼: |
哈哈。无语!信不信由你!
----------------------------------------------
TJH
|
作者: |
tang1 (tjh) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2009/10/5 14:08:35 |
7楼: |
没有测试那么多,导出的这个文件应该说明问题(字符集:采用GB2312_CHARSET,字体:细圆)
----------------------------------------------
TJH
|
|