正在从字体Free 3/9创建条形码

本文关键字:创建 条形码 Free 字体 | 更新日期: 2023-09-27 18:24:44

这是我创建条形码图像的代码:

 class Program
    {
        static void Main(string[] args)
        {
            CreateBarcode("The quick brown fox jumps over the lazy dog".ToUpper());
        }
        private static void CreateBarcode(string code)
        {
            var myBitmap = new Bitmap(500, 50);
            var g = Graphics.FromImage(myBitmap);
            var jgpEncoder = GetEncoder(ImageFormat.Jpeg);
            g.Clear(Color.White);
            var strFormat = new StringFormat { Alignment = StringAlignment.Center };
            g.DrawString(code, new Font("Free 3 of 9", 50), Brushes.Black, new RectangleF(0, 0, 500, 50), strFormat);
            var myEncoder = Encoder.Quality;
            var myEncoderParameters = new EncoderParameters(1);
            var myEncoderParameter = new EncoderParameter(myEncoder, 100L);
            myEncoderParameters.Param[0] = myEncoderParameter;
            //MemoryStream memoryStrem = new 
            myBitmap.Save(@"d:'Barcode.jpg", jgpEncoder, myEncoderParameters);
        }
        private static ImageCodecInfo GetEncoder(ImageFormat format)
        {
            var codecs = ImageCodecInfo.GetImageDecoders();
            foreach (var codec in codecs)
            {
                if (codec.FormatID == format.Guid)
                {
                    return codec;
                }
            }
            return null;
        } 
    }

然而,这一行运行良好:g.DrawString(code, new Font("Free 3 of 9", 50), Brushes.Black, new RectangleF(0, 0, 500, 50), strFormat);

正如你所看到的,这里的宽度是500。现在,如果我指定一个大段的文本,我担心500是不够的。有什么方法可以根据内容使宽度动态变化吗?

正在从字体Free 3/9创建条形码

它太老了,无法回答,仍然在发布,因为它可能会帮助一些人。我们可以用伪位图创建图形对象,并尝试找到字体的长度,然后重新初始化位图和图形对象。

var myBitmap = new Bitmap(1, 1);
Font threeOfNine = new Font("Free 3 of 9", 60, FontStyle.Regular, GraphicsUnit.Point);
var g = Graphics.FromImage(myBitmap);
SizeF dataSize = g.MeasureString(code, threeOfNine);
myBitmap = new Bitmap(myBitmap, dataSize.ToSize());
g = Graphics.FromImage(myBitmap);