打印

经过一天的研究,总结出SL2.0中显示中文的最好办法

首先说一下SL2.0中显示字体的一种方便的办法(1.0中是要用downloader来做的,当然2.0也可以用WebClient来做,但可以用这种办法来代替,会自动生成WebClient,不用你来自己写)

下面讲一下具体步骤(用宋体举例):
1.将字体文件Copy到clientBin目录中(注意是XAP的那个clientBin)
2.设置FontFamily="simsun.ttc#simsun"
  simsun.ttc是字体文件,simsun是字体名称
这样就可以显示出宋体了,简单吧。

用这种办法来做是很快,但是有个问题就是需要把整个字体文件下载,太大了,所以,更好的办法是这样的。
1.先将要显示的文字输入word,然后打印成XPS文件
2.将XPS文件改成zip文件,解压缩,然后将其中fonts文件夹下的文件打包成一个zip文件(例如:Fonts.zip)
3.将这个zip文件Copy到clientBin目录中
4.设置FontFamily="Fonts.zip#simsun"
这样就可以将字体文件减少到你用的这个几个字了。

另外,很多人不知道如何显示雅黑字体,是这样写的:
FontFamily="MSYH.TTF#Microsoft Yahei"
如果用后面的办法,需要在word中输入你要显示的雅黑的几个字,然后:
FontFamily="Fonts.zip#Microsoft Yahei"

最后附上WebClient的写法(TB是一个TextBlock的Name)
复制内容到剪贴板
代码:
public Page()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(onLoaded);
        }
        private void onLoaded(object sender, RoutedEventArgs e)
        {
            WebClient wc = new WebClient();
            wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
            wc.OpenReadAsync(new Uri("Fonts.zip", UriKind.Relative));
        }
        private void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            TB.FontSource = new FontSource(e.Result);
            TB.FontFamily = new FontFamily("simsun");
        }
[ 本帖最后由 h0575 于 2008-3-19 23:03 编辑 ]

TOP

要支持一下啦~

TOP

确实不错,但是要显示动态的文字就不行了.

楼主可以参考下这篇文章.
http://www.microsoft.com/taiwan/ ... t_cht_solutions.htm

期待您新的心得.   

TOP

这篇文章是在1.0的时候写的,我也看过,和我这个还是有点区别,但不管1.0还是2.0,总是要把字体下载后才能有具体的字形效果,所以这总不是个办法,最好的办法就是在程序中指定字体,如果客户端有字体就能显示效果,如果没有,就以默认的字体显示,这只能期待MS在后面的版本中改进了(FLASH就是这么做的,动态文字如果客户端有就显示,客户端没有就用默认的字体显示,中文系统默认的就是宋体)

现在要以某种字体效果来显示动态的,那只有将整个字体下载下来了,也就是我写的第一种办法。

[ 本帖最后由 h0575 于 2008-3-19 23:54 编辑 ]

TOP

这篇文章里讲了如何动态的将需要的各个文字按照指定的字体打包成zip文件. 然后将zip文件传送到sl中.   不需要将整个字体文件下载下来.

TOP

看过了,不过确实比较麻烦,还是等官方从根本上来解决这个问题吧。

TOP

MS不从根本上解决这个问题,那SL就根本不值得去用。
等什么时候SL真正的支持中文,真正的有效率的做出东西来的时候,才是值得关注的时候。

TOP