AHTC/RGD/RGD.CommonClassLib/BarcodeUtils.cs
2025-05-19 09:22:33 +08:00

175 lines
6.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace RGD.Common
{
public class BarcodeUtils
{
//斑马打印机打印文本1.0baseX,baseY文本起始屏幕位置 txtH, txtW文本高度和宽度 txtContent 文本内容
public static string PrintTextString(string baseX, string baseY, string txtH, string txtW, string txtContent)
{
return "^FO" + baseX + "," + baseY + "^ADN," + txtH + "," + txtW + "^CI0^FD" + txtContent + "^FS\r\n";
}
//斑马打印机打印条形码1.0baseX,baseY条形码起始屏幕位置 linewidth条形码宽度 ratio打印比率 barcode 条形码内容
public static string PrintBarString(string baseX, string baseY, string linewidth, string ratio, string height, string barcode)
{
return "^FT" + baseX + "," + baseY + "^BY" + linewidth + "," + ratio + "," + height + "^BCN," + ",N,N^FD" + barcode + "^FS\r\n";
}
//斑马打印机打印文本2.0
public string PrintString(string printStr)
{
StringBuilder builder = new StringBuilder();
builder.Append("^XA\r\n");
builder.Append(printStr);
builder.Append("^XZ");
return builder.ToString();
}
//斑马打印机打印文本
public bool LabelPrint(string printerName, string printStr)
{
return RawPrinterHelper.SendStringToPrinter(printerName, printStr);
}
//斑马打印机创建条形码上方图片
public static Bitmap CreateImage(string data, Font f)
{
if (string.IsNullOrEmpty(data))
return null;
var txt = new TextBox();
txt.Text = data;
txt.Font = f;
//txt.PreferredSize.Height只能取到一行的高度(连边距)
//所以需要乘以行数, 但是必须先减掉边距, 乘了以后,再把边距加上.
//5是目测的边距
var image = new Bitmap(txt.PreferredSize.Width, (txt.PreferredSize.Height - 5) * txt.Lines.Length);
// var image = new Bitmap(300, (txt.PreferredSize.Height - 5) * txt.Lines.Length);
//var image = new Bitmap(txt.PreferredSize.Width + 20, 13);
var g = Graphics.FromImage(image);
var b = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Black, Color.Black, 1.2f, true);
g.Clear(System.Drawing.Color.White);
g.DrawString(data, f, b, 1, 1);
return image;
}
//斑马打印机创建条形码下方图片(等比例拉伸图片)
public static Bitmap CreateImage2(string data, Font f)
{
if (string.IsNullOrEmpty(data))
return null;
var txt = new TextBox();
txt.Text = data;
txt.Font = f;
//txt.PreferredSize.Height只能取到一行的高度(连边距)
//所以需要乘以行数, 但是必须先减掉边距, 乘了以后,再把边距加上.
//5是目测的边距
var image = new Bitmap(txt.PreferredSize.Width, (txt.PreferredSize.Height - 5) * txt.Lines.Length);
// var image = new Bitmap(300, (txt.PreferredSize.Height - 5) * txt.Lines.Length);
//var image = new Bitmap(txt.PreferredSize.Width + 20, 13);
var g = Graphics.FromImage(image);
var b = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Black, Color.Black, 1.2f, true);
g.Clear(System.Drawing.Color.White);
g.DrawString(data, f, b, 1, 1);
var image2 = new Bitmap(300, image.Height);
var g2 = Graphics.FromImage(image2);
g2.DrawImage(image, new Rectangle(0, 0, 300, image.Height), new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
return image2;
}
//将bmp转为ZLP码
public static string CreateBmpZLP(Bitmap img, string imgCode, string imgName)
{
var t = ((img.Size.Width / 8 + ((img.Size.Width % 8 == 0) ? 0 : 1)) * img.Size.Height).ToString();
var w = (img.Size.Width / 8 + ((img.Size.Width % 8 == 0) ? 0 : 1)).ToString();
string zpl = string.Format("~DG" + imgName + ".GRF,{0},{1},{2}", t, w, imgCode);
return zpl;
}
//将图片转为16进制码
public static string ConvertImageToCode(Bitmap img)
{
var sb = new StringBuilder();
long clr = 0, n = 0;
int b = 0;
for (int i = 0; i < img.Size.Height; i++)
{
for (int j = 0; j < img.Size.Width; j++)
{
b = b * 2;
clr = img.GetPixel(j, i).ToArgb();
string s = clr.ToString("X");
if (s.Substring(s.Length - 6, 6).CompareTo("BBBBBB") < 0)
{
b++;
}
n++;
if (j == (img.Size.Width - 1))
{
if (n < 8)
{
b = b * (2 ^ (8 - (int)n));
sb.Append(b.ToString("X").PadLeft(2, '0'));
b = 0;
n = 0;
}
}
if (n >= 8)
{
sb.Append(b.ToString("X").PadLeft(2, '0'));
b = 0;
n = 0;
}
}
sb.Append(System.Environment.NewLine);
}
return sb.ToString();
}
#region
/// <summary>
/// 验证是否是指定位数,并以指定字符串开头
/// </summary>
/// <param name="M_str_num">输入字符</param>
/// <returns>返回一个bool类型的值</returns>
public static bool validateBarcode(string M_str_src, string M_str_prefix)
{
return Regex.IsMatch(M_str_src, @"(^" + M_str_prefix + "[0-9]*$)");
}
#endregion
#region
/// <summary>
/// 验证是否是指定位数,并以指定字符串开头
/// </summary>
/// <param name="M_str_num">输入字符</param>
/// <returns>返回一个bool类型的值</returns>
public static bool validateBoxCode(string M_str_src, string[] M_str_prefix)
{
bool result = false;
foreach (string prefix in M_str_prefix)
{
result = Regex.IsMatch(M_str_src, @"(^" + prefix + "[0-9]*$)");
if (result)
{
break;
}
}
return result;
}
#endregion
}
}