为什么我的WebBrowser控件不能正确呈现自定义图标字体?

时间:2014-08-15 07:04:37

标签: c# asp.net controls font-awesome

以下是两个输出示例:

http://imgur.com/a/ShdB0

首先是CNN,看起来不错。没有闪光灯,但出于我的目的,我并不关心它。

第二个是Font-Awesome备忘单页面,在这里:http://fortawesome.github.io/Font-Awesome/cheatsheet/

显然,看起来并不那么好。

我感觉存在兼容性问题或时间问题,例如我可能没有等待来自控件的正确完成信号。

以下是相关代码:

    WebBrowser wb = new WebBrowser();
    try
    {
        wb.ScrollBarsEnabled = false;
        wb.ScriptErrorsSuppressed = true;
        wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wp_document_completed);
        wb.Navigate(new Uri(m_board_url));

        int n = 0;
        while ((wb.ReadyState != WebBrowserReadyState.Complete) && (n < LOOPS_TO_WAIT))
        {
            //  Also consider wb.IsBusy
            log_message(Convert.ToString((object)wb.ReadyState));
            System.Windows.Forms.Application.DoEvents();
            System.Threading.Thread.Sleep(15);
            n++;
        }
        log_message(Convert.ToString((object)wb.ReadyState));
    }
    catch (Exception e)
    {
        log_message("exception!<br>" + e.ToString());
    }


private void wp_document_completed(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    WebBrowser wb = (WebBrowser)sender;
    wb.ClientSize = new Size(this.m_width, this.m_height);
    wb.ScrollBarsEnabled = false;
    wb.ScriptErrorsSuppressed = true;
    m_bitmap = new Bitmap(wb.Bounds.Width, wb.Bounds.Height);
    wb.BringToFront();
    wb.DrawToBitmap(m_bitmap, wb.Bounds);
    m_bitmap = (Bitmap)m_bitmap.GetThumbnailImage(m_thumb_width, m_thumb_height, null, IntPtr.Zero);
    m_bitmap_set = true;
}

我很感激任何想法或建议。谢谢!

2 个答案:

答案 0 :(得分:1)

我也遇到了这个问题。经过一段时间的搜索,我找到了真正的解决方案。问题是webcontrol无法使用相对路径。通过设置base64编码字符串的woff,我得到了它的工作。它看起来像这样:

&#13;
&#13;
@font-face {
  font-family: 'Ico';
  src: url('FontAwesome.eot') format('embedded-opentype');
  font-weight: normal;
  font-style: normal;
}

@font-face {
  font-family: 'Ico';
  src:  url(data:application/x-font-woff;charset=utf-8;base64,<<base64_encoded_string>>) format('woff'), url('FontAwesome.ttf')  format('truetype'), url('FontAwesome.svg#FontAwesome') format('svg');
  font-weight: normal;
  font-style: normal;
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

好的,我明白了。

我花了几个小时尝试不同的事情,他们似乎都表明我的代码应该正常工作。

我上床睡觉,今天起床,花了一点时间玩,当我回到原来的测试时,我正要放弃。本地页面现在运行良好。

我在这方面唯一改变的是昨晚尝试安装Font-Awesome .ttf和.eot(或其他)文件。

那些没有产生任何变化,但是当我上床睡觉时我关闭了机器。在重新启动时猜测IIS重置会以某种方式识别新字体。

Font-Awesome的网站在我的浏览器中仍然存在,我不知道为什么,但我试图在服务器主机的网页服务器上生成缩略图,我感觉安装技术只在本地工作,对我来说是完美的。

如果有人必须为远程页面执行此操作,我的感觉是通过浏览器控件安装自定义字体(或通过GDI +呈现)存在权限问题。因此,尝试运行IIS作为提升用户来测试它。

谢谢!