c# – 可视化报表查看器上的嵌入字体

c# – 可视化报表查看器上的嵌入字体,第1张

概述使用Visual Studio 2012 Ultimate C#.NET4.5 好吧,这个已经腐烂了我的大脑,我有一些代码,我稍微调整一下,将一个字体嵌入到我的应用程序中.到目前为止一切顺利,所以我的客户端机器不再需要字体了. 到目前为止,这是我的代码: //add font [DllImport("gdi32.dll", ExactSpelling = true)] privat 使用Visual Studio 2012 ultimate C#.NET4.5

好吧,这个已经腐烂了我的大脑,我有一些代码,我稍微调整一下,将一个字体嵌入到我的应用程序中.到目前为止一切顺利,所以我的客户端机器不再需要字体了.

到目前为止,这是我的代码:

//add Font    [Dllimport("gdi32.dll",ExactSpelling = true)]    private static extern IntPtr AddFontMemResourceEx(byte[] pbFont,int cbFont,IntPtr pdv,out uint pcFonts);    /****/    //dispose Font    [Dllimport("gdi32.dll",ExactSpelling = true)]    internal static extern bool RemoveFontMemResourceEx(IntPtr fh);    /****/    static private IntPtr m_fh = IntPtr.Zero;    static private PrivateFontCollection m_pfc = null;public Font GtSpecialFont(float size)    {        Font fnt = null;        if (null == m_pfc)        {            Stream stmFnt = Assembly.GetExecutingAssembly().GetManifestResourceStream("NewLabelPrinter.Resources.FREE3OF9.TTF"); // always returns null?            if (null != stmFnt)            {                byte[] rgbyt = new byte[stmFnt.Length];                stmFnt.Read(rgbyt,rgbyt.Length);                uint cFonts;                AddFontMemResourceEx(rgbyt,rgbyt.Length,IntPtr.Zero,out cFonts);                IntPtr pbyt = Marshal.AllocCoTaskMem(rgbyt.Length);                if (null != pbyt)                {                    Marshal.copy(rgbyt,pbyt,rgbyt.Length);                    m_pfc = new PrivateFontCollection();                    m_pfc.AddMemoryFont(pbyt,rgbyt.Length);                    Marshal.FreeCoTaskMem(pbyt);                }            }        }        try        {            if (m_pfc.FamilIEs.Length > 0)            {                fnt = new Font(m_pfc.FamilIEs[0],size);            }        }        catch (Exception rdf)        {            MessageBox.Show("",rdf.ToString());        }        return fnt;    } private voID myFont()    {        txtbarCal.Font = GtSpecialFont(48.0f);        txtbarCodeolD.Font = GtSpecialFont(48.0f);        txtbarCV.Font = GtSpecialFont(48.0f);        txtbarBK.Font = GtSpecialFont(48.0f);        txtNewbar.Font = GtSpecialFont(48.0f);    }

正如你所看到的,这段代码非常好,我很喜欢它完美无缺.现在我的表单最终可以有字体,而我的客户不需要它们.

有一个小问题,我在世界上如何使用它来设置visual studio报告文本框字体????报告没有代码,所以我完全失去了!

好吧,我希望有人在某处知道某些东西,我唯一能想到的就是使用表达式和/或可能的参数.

非常感谢你们!

解决方法 你有一些可能使这项工作.您的代码使字体既可用于使用GDI呈现的任何代码,也可用于使用GDI呈现的任何代码.由于GDI可能是ReportVIEwer用于呈现报表的,因此它是一个非常古老的代码块.唯一真正的要求是确保在显示报告之前运行此代码.

然而,您不能依赖的一件事是由您的代码返回的字体,原因很明显.要解决此问题,您必须通过系列名称引用报告中的字体.为了实现这一目标,您必须在开发机器上实际安装该字体,以便在报表设计器中选择它.在用户的机器上,该字体名称应该足以从存储器字体中选择字体.

没有保证,只有不错的赔率.

确保你修复了这段代码中的错误,也可能是你遇到报告问题的原因,在调用AddMemoryFont()之后释放字体的内存不正确.只要应用程序可以使用该字体,您必须保持分配.失败模式是非常不稳定的,因为它具有不被注意的好几率,后台回答is here.简而言之:只是不要调用FreeCoTaskMem(). windows将清理.

总结

以上是内存溢出为你收集整理的c# – 可视化报表查看器上的嵌入字体全部内容,希望文章能够帮你解决c# – 可视化报表查看器上的嵌入字体所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存