如何在不安装字体的情况下生成条形码" IDAutomationHC39M"

时间:2014-03-17 12:27:50

标签: c# asp.net barcode

我使用字体IDAutomationHC39M生成条形码。

如果我需要在客户端系统中工作,我必须安装该字体。

如何绕过此解决方案?

3 个答案:

答案 0 :(得分:1)

看看这篇CodeProject文章。他在不使用字体的情况下生成Code 39条形码。

http://www.codeproject.com/Articles/10344/Barcode-NET-Control

还有这个问题:

How to generate Code39 barcodes in vb.net

快速谷歌搜索“Code 39条形码.net”还将为您提供一些免费和商业条形码生成库&控件。

答案 1 :(得分:0)

您可以在项目中添加字体作为资源,然后检索它:

var value = Resources.MyFont; // it's stored as byte[]
var fonts = new PrivateFontCollection();
var memory = IntPtr.Zero;

try
{
    memory = Marshal.AllocCoTaskMem(value.Length);

    Marshal.Copy(value, 0, memory, value.Length);
    fonts.AddMemoryFont(memory, value.Length);
}
finally
{
    Marshal.FreeCoTaskMem(memory);
}

var font = new Font(fonts.Families[0], 12F); // choose the size

答案 2 :(得分:0)

这是我使用的扩展方法:

public static Image GetBarCode(this string data, int fontSizeEm)
        {
            data = "*" + data + "*";
            Image img = null;
            Graphics drawing = null;
            try
            {
                using (var pfc = new PrivateFontCollection())
                {
                    pfc.AddFontFile(@"{{PATH TO YOUR FONT}}");
                    using (var myfont = new Font(pfc.Families[0], fontSizeEm))
                    {
                        img = new Bitmap(1, 1);
                        drawing = Graphics.FromImage(img);
                        var textSize = drawing.MeasureString(data, myfont);
                        img.Dispose();
                        drawing.Dispose();
                        img = new Bitmap((int) textSize.Width, (int) textSize.Height);
                        drawing = Graphics.FromImage(img);
                        drawing.DrawString(data, myfont, new SolidBrush(Color.Black), 0, 0);
                    }
                    drawing.Save();
                }
                return img;
            }
            catch
            {
                //Handle exception
                return null;
            }
            finally
            {
                if(drawing!= null)
                    drawing.Dispose();
            }
        }