DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: xieqiongxi1
今日帖子: 0
在线用户: 7
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 shileizi (sl) ★☆☆☆☆ -
普通会员
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
作者:
男 shileizi (sl) ★☆☆☆☆ -
普通会员
2009/9/30 11:19:41
3楼: 楼上的大哥,我说的是报表导出PDF时中文字符乱码的问题,你这个好像是用来解决设计界面的中文显示问题吧
----------------------------------------------
-
作者:
男 chenxing007 (辰星) ★☆☆☆☆ -
盒子活跃会员
2009/9/30 15:16:14
4楼: 不要设成 GB2312_CHARSET
好像是要设成 DEFAULT_CHARSET
这样在转换时才会读取正确的字节位数
----------------------------------------------
-
作者:
男 shileizi (sl) ★☆☆☆☆ -
普通会员
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,字体:细圆)
此帖子包含附件:tang1_200910514835.pdf 大小:12.9K
----------------------------------------------
TJH
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行80.07813毫秒 RSS