gpt4 book ai didi

c# - 视觉报告查看器上的嵌入式字体

转载 作者:行者123 更新时间:2023-11-30 12:48:31 25 4
gpt4 key购买 nike

使用 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, 0, rgbyt.Length);

uint cFonts;
AddFontMemResourceEx(rgbyt, rgbyt.Length, IntPtr.Zero, out cFonts);

IntPtr pbyt = Marshal.AllocCoTaskMem(rgbyt.Length);
if (null != pbyt)
{
Marshal.Copy(rgbyt, 0, 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# - 视觉报告查看器上的嵌入式字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com