WPF中批量打印二维条码和文字标签
- 需求:根据DataTable的数据批量打印条码标签,每一行打印一个标签。
- 方法
自定义了一个PrintHelper类,类中方法创建FixedDocument所需要的PageContent对象,可以选择直接打印或打印预览。
-
直接打印:
PrintDialog dig = new PrintDialog();
if (dig.ShowDialog() == true)
{
PrintHelper phelper = new PrintHelper();
FixedDocument fx = new FixedDocument();
foreach (DataRow row in table.Rows)
{
Canvas canvas = this.GetControlCanvas(row);
fx.Pages.Add(phelper.GetPageContent(canvas, this.grid, dig));
}
phelper.Print(fx);
} -
打印预览
PrintDialog dig = new PrintDialog();
PrintHelper phelper = new PrintHelper();
FixedDocument fx = new FixedDocument();
foreach (DataRow row in table.Rows)
{
fx.Pages.Add(phelper.GetPageContent(this.GetDefineCanvas(row), dig));
}
phelper.ShowPrintPreview(fx); -
对于构建Canvas也存在两种方式:
第一种:在客户端构建自定义一个用户控件,也就是标签打印的模板,所有可变的参数传入给该控件作为属性,例如,自定义了一个qRLabel控件,那么构建Canvas时可以这样操作:
private Canvas GetControlCanvas(DataRow row)
{
Canvas can = new Canvas();
qRLabel qr = new qRLabel();
qr.LabelCode = row[0].ToString();
qr.Code= row[0].ToString();
qr.Name= row[1].ToString();
qr.Value= row[2].ToString();
can.Children.Add(qr);
return can;
}
第二种:不需要自定义控件,在方法中动态创建控件,也可以添加到Canvas中。