好吧,这个已经腐烂了我的大脑,我有一些代码,我稍微调整一下,将一个字体嵌入到我的应用程序中.到目前为止一切顺利,所以我的客户端机器不再需要字体了.
到目前为止,这是我的代码:
//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# – 可视化报表查看器上的嵌入字体所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)