1、声明需要的变量
EncodingOptions options = null;
BarcodeWriter writer = null;
PrintDocument printdocument;
Image image=null;
2、在构造方法中创建打印对象 注册一个打印事件
public Usr_FileAddition_ViewModel()
{
printdocument = new PrintDocument();
printdocument.PrintPage += PrintdocumentPrintPage;
}
3、注册的 PrintdocumentPrintPage方法如下
void PrintdocumentPrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.DrawImage(image, 10, 10);
}
4、生成条形码 代码
/// <summary>
/// 生成条形码
/// </summary>
/// <param name="text"></param>
private void GenerateBarcode(string text)
{
//设置尺寸
options = new EncodingOptions
{
Width = 300,
Height = 120
};
writer = new BarcodeWriter();
//设置条形码格式
writer.Format = BarcodeFormat.ITF;
writer.Options = options;
Bitmap bitmap = writer.Write(text);
//将生成的条形码图片保存
image = bitmap;
//调用打印服务
printdocument.Print();
}
5、生成二维码 代码
/// <summary>
/// 生成二维码
/// </summary>
/// <param name="text"></param>
private void QRCodeBarcode(string text)
{
options = new QrCodeEncodingOptions
{
Width = 300,
Height = 130
};
writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
writer.Options = options;
Bitmap bitmap = writer.Write(text);
bitmap = SetText(bitmap, text,105,115);
image = bitmap;
printdocument.Print();
}
6、生成的条形码下面有一行文本但生成的二维码没有文本,所以通过下列方法进行添加
/// <summary>
/// 设置文本(二维码)
/// </summary>
/// <param name="b">Bitmap对象</param>
/// <param name="txt">文本</param>
/// <param name="x">偏移x</param>
/// <param name="y">偏移y</param>
/// <returns></returns>
public static Bitmap SetText(Bitmap b, string txt, int x, int y)
{
if (b == null)
{
return null;
}
Bitmap resizeImage = new Bitmap(b.Width, b.Height+40);
Graphics gfx = Graphics.FromImage(resizeImage);
gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
gfx.FillRectangle(Brushes.White, new Rectangle(0, 0, 400, 100));
gfx.DrawImageUnscaled(b, 0, 0);
FontFamily fm = new FontFamily("Arial");
Font font = new Font(fm, 12, System.Drawing.FontStyle.Regular, GraphicsUnit.Pixel);
SolidBrush sb = new SolidBrush(Color.Black);
gfx.DrawString(txt, font, sb, new PointF(x, y));
gfx.Dispose();
return resizeImage;
}
7、最后执行
public void BarCodeClick(object sender)
{
var selectAll = DataTableSource?.Where(x => x.IsSelect)?.ToList();
foreach (var item in selectAll)
{
//这里只是打印了条形码,如果打印二维码就调用生成二维码的方法
GenerateBarcode(item.Barcode);
}
}
按照这个步骤来肯定没问题