چاپ بارکد در سی شارپ
چاپ بارکد در سی شارپ با کتابخانه ZXing.Net تصویر بارکد ساخته میشود. سپس با PrintDocument به چاپگر ارسال میگردد.
03 خرداد 1405
لینک کوتاه
چاپ بارکد در سی شارپ
چاپ بارکد در سی شارپ معمولاً با استفاده از کتابخانههای قدرتمندی مانند BarcodeLib (رایگان)، ZXing.Net (رایگان) یا IronBarcode (تجاری) انجام میشود.این کتابخانهها امکان تولید انواع بارکدهای خطی مانند Code 128، EAN-13، UPC-A و دوبعدی مانند QR Code را فراهم میکنند.
فرآیند کار به این صورت است که ابتدا داده مورد نظر (مانند کد محصول) به کتابخانه داده میشود، سپس کتابخانه یک تصویر گرافیکی (Bitmap) از بارکد تولید میکند و در نهایت این تصویر با استفاده از کلاس PrintDocument در چارچوب دات نت به چاپگر ارسال میشود.
برای پروژههای رایگان، ZXing.Net به دلیل پشتیبانی هم از تولید و هم از خواندن بارکد، گزینه بسیار مناسبی است.
برای چاپ بارکد روی چاپگرهای صنعتی حرارتی مانند Zebra یا EPSON، روش بهینه ارسال مستقیم دستورات ZPL (Zebra Programming Language) به چاپگر است که کیفیت بسیار بالاتری نسبت به چاپ تصویر دارد.
در این روش، نیازی به تولید تصویر نیست و متن دستوری حاوی اطلاعات بارکد مستقیماً به پورت چاپگر ارسال میشود.
مهمترین نکات در چاپ بارکد حرفهای شامل رعایت حاشیه امن (Quiet Zone) حداقل 10 برابر عرض نازکترین نوار، انتخاب سیمبولوژی مناسب بر اساس کاربرد (Code 128 برای انبار، EAN-13 برای فروشگاهی) و تست نهایی بارکدهای چاپ شده با اسکنر واقعی است، زیرا گاهی بارکدی که روی صفحه نمایشگر به درستی نشان داده میشود ممکن است
کتابخانههای تولید بارکد در سی شارپ
مقایسه کتابخانههای موجود
قبل از شروع کدنویسی، باید کتابخانه مناسب را انتخاب کنید. در جدول زیر مهمترین گزینهها مقایسه شدهاند:| ویژگی | BarcodeLib (رایگان) | IronBarcode (تجاری) | Aspose.BarCode (تجاری) | ZXing.Net (رایگان) |
| هزینه | رایگان (Apache 2.0) | 749-5999 دلار | تجاری | رایگان (Apache 2.0) |
| تولید بارکد | ✅ دارد | ✅ دارد | ✅ دارد | ✅ دارد |
| خواندن بارکد | ❌ ندارد | ✅ دارد | ✅ دارد | ✅ دارد |
| پشتیبانی از PDF | ❌ ندارد | ✅ دارد | ✅ دارد | ✅ دارد |
| دریافت خروجی بایت[ ]مستقیم | ❌ نیاز به MemoryStream | ✅ دارد | ✅ دارد | ❌ نیاز به تبدیل |
| تعداد symbologyها | 25+ نوع | 20+ نوع | 30+ نوع | 20+ نوع |
| مستندات به فارسی | محدود | محدود | محدود | محدود |
طبق بررسیهای انجامشده، BarcodeLib با بیش از 12 میلیون دانلود، محبوبترین کتابخانه رایگان برای تولید بارکد در دات نت است.
اما توجه داشته باشید که این کتابخانه فقط قابلیت تولید بارکد را دارد و نمیتواند بارکد را بخواند.
نصب کتابخانههای مورد نیاز چاپ بارکد در سی شارپ
روش اول: نصب BarcodeLib (رایگان)
از طریق NuGet Package Manager در Visual Studio:Install-Package BarcodeLib
یا از طریق .NET CLI:dotnet add package BarcodeLib
روش دوم: نصب IronBarcode (تجاری)
Install-Package BarCode
روش سوم: نصب ZXing.Net (رایگان و محبوب)
Install-Package ZXing.Net
تولید بارکد با BarcodeLib در سی شارپ
مثال 1: تولید بارکد Code 128 ساده
using BarcodeLib;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
public byte[] GenerateCode128Barcode(string data)
{
// ایجاد نمونه از کلاس Barcode
var barcode = new Barcode();
// تنظیمات ظاهری
barcode.IncludeLabel = true; // نمایش متن زیر بارکد
barcode.Width = 300; // عرض به پیکسل
barcode.Height = 100; // ارتفاع به پیکسل
// تولید تصویر بارکد
Image barcodeImage = barcode.Encode(TYPE.CODE128, data);
// تبدیل به آرایه بایت برای ذخیره یا ارسال
using (var ms = new MemoryStream())
{
barcodeImage.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
}
طبق مستندات رسمی، Code 128 برای دادههای حروفی-عددی (alphanumeric) بهترین گزینه است.
مثال 2: تولید بارکد EAN-13 (مخصوص محصولات فروشگاهی)
using BarcodeLib;
using System.Drawing;
public Image GenerateEAN13Barcode(string productCode)
{
var barcode = new Barcode();
// تنظیمات مخصوص EAN-13
barcode.IncludeLabel = true;
barcode.Width = 350;
barcode.Height = 120;
// تولید بارکد با فرمت EAN-13
return barcode.Encode(TYPE.EAN13, productCode);
}
برای برنامههای خردهفروشی، از EAN-13 یا UPC-A استفاده کنید که استاندارد جهانی هستند.
مثال 3: تولید بارکد با اندازههای مختلف و Quiet Zone
using BarcodeLib;
using System.Drawing;
public Image GenerateCustomBarcode(string data, int width, int height)
{
var barcode = new Barcode();
// تنظیمات پیشرفته
barcode.Width = width;
barcode.Height = height;
barcode.IncludeLabel = true;
barcode.LabelPosition = LabelPositions.BOTTOM_CENTER;
barcode.RotateFlipType = RotateFlipType.RotateNoneFlipNone;
// رنگهای سفارشی
barcode.ForeColor = Color.Black;
barcode.BackColor = Color.White;
return barcode.Encode(TYPE.CODE128, data);
}
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
تولید بارکد با ZXing.Net (روش پیشنهادی) در سی شارپ
ZXing.Net یک کتابخانه رایگان و بسیار قدرتمند است که هم تولید و هم خواندن بارکد را پشتیبانی میکند.مثال 1: تولید بارکد Code 128 با ZXing
using ZXing;
using ZXing.Common;
using System.Drawing;
using System.Drawing.Imaging;
public Bitmap GenerateBarcodeWithZXing(string text)
{
var writer = new BarcodeWriter
{
Format = BarcodeFormat.CODE_128,
Options = new EncodingOptions
{
Width = 300,
Height = 100,
Margin = 10 // Quiet Zone
}
};
return writer.Write(text);
}
مثال 2: تولید QR Code با ZXing
using ZXing;
using ZXing.QrCode;
using System.Drawing;
public Bitmap GenerateQRCode(string text)
{
var writer = new BarcodeWriter
{
Format = BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Width = 250,
Height = 250,
Margin = 1,
ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.H
}
};
return writer.Write(text);
}
مثال 3: خواندن بارکد از تصویر با ZXing
using ZXing;
using System.Drawing;
public string ReadBarcodeFromImage(string imagePath)
{
var reader = new BarcodeReader();
var bitmap = new Bitmap(imagePath);
var result = reader.Decode(bitmap);
return result?.Text ?? "بارکدی یافت نشد";
}
چاپ بارکد روی چاپگرهای معمولی (PrintDocument) در سی شارپ
مثال کامل چاپ بارکد
using System.Drawing;
using System.Drawing.Printing;
using ZXing;
using ZXing.Common;
public class BarcodePrinter
{
private Bitmap _barcodeImage;
private string _barcodeText;
public void PrintBarcode(string data)
{
_barcodeText = data;
// تولید بارکد
var writer = new BarcodeWriter
{
Format = BarcodeFormat.CODE_128,
Options = new EncodingOptions
{
Width = 400,
Height = 120,
Margin = 10
}
};
_barcodeImage = writer.Write(data);
// تنظیمات چاپ
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(PrintPageHandler);
pd.Print();
}
private void PrintPageHandler(object sender, PrintPageEventArgs e)
{
// رسم بارکد روی صفحه چاپ
e.Graphics.DrawImage(_barcodeImage, 50, 50, 400, 120);
// رسم متن زیر بارکد
using (Font font = new Font("Arial", 12))
{
e.Graphics.DrawString(_barcodeText, font, Brushes.Black, 50, 180);
}
}
}
مثال: چاپ با پیشنمایش چاپ
using System.Windows.Forms;
using System.Drawing.Printing;
public void PrintWithPreview(string barcodeData)
{
PrintDocument pd = new PrintDocument();
pd.PrintPage += (sender, e) =>
{
var barcode = GenerateBarcodeWithZXing(barcodeData);
e.Graphics.DrawImage(barcode, 100, 100, 300, 100);
};
PrintPreviewDialog preview = new PrintPreviewDialog();
preview.Document = pd;
preview.ShowDialog();
}
چاپ روی چاپگرهای حرارتی (Zebra, EPSON) در سی شارپ
چاپگرهای حرارتی صنعتی مانند Zebra ZT411 از زبان دستوری ZPL (Zebra Programming Language) استفاده میکنند.روش اول: ارسال مستقیم دستورات ZPL
using System.IO;
using System.Drawing.Printing;
public void PrintWithZPL(string printerName, string barcodeData)
{
// دستورات ZPL برای چاپ بارکد Code 128
string zpl = $@"
^XA
^FO50,50
^BY3
^BCN,100,Y,N,N
^FD{barcodeData}^FS
^FO50,170
^A0N,30,30
^FD{barcodeData}^FS
^XZ
";
// ارسال به چاپگر
using (var printer = new RawPrinterHelper())
{
printer.SendStringToPrinter(printerName, zpl);
}
}
روش دوم: استفاده از Neodynamic ThermalLabel SDK
کتابخانه Neodynamic ThermalLabel SDK یک راهحل حرفهای برای چاپ روی چاپگرهای حرارتی ارائه میدهد:using Neodynamic.SDK.ThermalLabel;
using Neodynamic.SDK.Printing;
public void PrintWithThermalLabel(string barcodeData)
{
// ایجاد لیبل
ThermalLabel label = new ThermalLabel(UnitType.Mm, 60, 40);
// ایجاد بارکد
BarcodeItem barcode = new BarcodeItem();
barcode.X = 5;
barcode.Y = 5;
barcode.Width = 50;
barcode.Height = 20;
barcode.BarcodeType = BarcodeType.Code128;
barcode.Code = barcodeData;
barcode.ShowCode = true;
label.Items.Add(barcode);
// چاپ روی چاپگر Zebra
using (PrintJob pj = new PrintJob())
{
pj.PrinterSettings.PrinterName = "Zebra ZT411";
pj.Print(label);
}
}
ذخیره بارکد در فرمتهای مختلف در سی شارپ
-
ذخیره به صورت PNG
public void SaveAsPng(string barcodeData, string filePath)
{
var barcode = GenerateBarcodeWithZXing(barcodeData);
barcode.Save(filePath, ImageFormat.Png);
}
-
ذخیره به صورت PDF
با استفاده از IronBarcode:
using IronBarCode;
public void SaveAsPdf(string barcodeData, string filePath)
{
var barcode = BarcodeWriter.CreateBarcode(barcodeData, BarcodeEncoding.Code128);
barcode.SaveAsPdf(filePath);
}
-
ذخیره به صورت SVG (مناسب چاپ با کیفیت بالا)
using Aspose.BarCode.Generation;
public void SaveAsSvg(string barcodeData, string filePath)
{
using (var generator = new BarcodeGenerator(EncodeTypes.Code128, barcodeData))
{
generator.Parameters.Barcode.XDimension.Pixels = 5;
generator.Parameters.Barcode.BarHeight.Pixels = 125;
generator.Save(filePath, BarCodeImageFormat.Svg);
}
}
طبق توصیه متخصصان، برای چاپ صنعتی از فرمتهای برداری مانند SVG یا EMF استفاده کنید تا کیفیت در هر مقیاسی حفظ شود.
نکات و بهترین روشها چاپ بارکد در سی شارپ
۱. انتخاب symbology مناسب
| کاربرد | symbology پیشنهادی |
| محصولات فروشگاهی | EAN-13, UPC-A |
| انبار و لجستیک | Code 128, ITF-14 |
| مراقبت بهداشتی | Data Matrix, Code 39 |
| لینکها و اطلاعات تماس | QR Code |
| کتابها | ISBN (بر پایه EAN-13) |
۲. رعایت Quiet Zone (حاشیه امن)
همیشه حاشیه خالی کافی اطراف بارکد در نظر بگیرید - حداقل 10 برابر عرض نازکترین نوار در هر طرف.۳. مدیریت حافظه
برای برنامههایی که تعداد زیادی بارکد تولید میکنند:// استفاده از using برای dispose خودکار
using (var generator = new BarcodeGenerator(EncodeTypes.Code128, data))
{
generator.Save("output.png", BarCodeImageFormat.Png);
}
۴. تست قبل از deployment
همیشه بارکدهای تولید شده را با اسکنرهای واقعی تست کنید، نه فقط با نرمافزار.جمعبندی
چاپ بارکد در سی شارپ فرآیندی کاملاً عملی و شدنی است که با استفاده از کتابخانههای رایگان و قدرتمندی مانند ZXing.Net یا BarcodeLib به سادگی قابل پیادهسازی است.مهمترین دستاورد این است که شما بدون نیاز به نرمافزارهای تجاری گرانقیمت، میتوانید سیستم چاپ بارکد حرفهای را در برنامه خود تعبیه کنید.
برای مصارف عمومی و اداری، روش مبتنی بر چاپ تصویر با PrintDocument کاملاً کافی است، اما برای محیطهای صنعتی و انبارداری که از چاپگرهای حرارتی Zebra استفاده میشود، ارسال مستقیم دستورات ZPL بهترین عملکرد و بالاترین کیفیت را ارائه میدهد.
در نهایت، موفقیت در این کار به سه عامل کلیدی بستگی دارد:
انتخاب درست سیمبولوژی (نوع بارکد) متناسب با کاربرد، رعایت حاشیه امن Quiet Zone، و تست نهایی بارکدهای چاپ شده با اسکنر واقعی پیش از استفاده گسترده.
با رعایت این اصول، میتوانید یک سیستم چاپ بارکد قابل اعتماد و استاندارد در پروژههای خود پیاده کنید.




کاربران ما
شما هم نظرتون با ما دریاره “چاپ بارکد در سی شارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید