前言
最近做一个项目就是winform程序去控制设备,通过modbus-rtu协议去通讯。做的过程中上位机还牵扯到与其他系统对接的问题,当对接好其他系统数据后将数据打印出一个小票,上位机端用serialport来发送和接收下位机指令,下位机接收到上位机的发送的指令设备就做某个动作,设备动作完成将状态发送给上位机,然后在winform界面呈现设备的状态,整体的工作原理大概就是这样子,具体业务就不方便写入到博客中,打印的需求是随着打印的内容长短决定打印纸的出纸长度,于是乎在winform中使用rdlc的想法就冒出来了,且看下面步骤
winform 使用rdlc打印小票其中包含动态显示多条形码步骤如下
1、 去nuget中download引用一个Microsoft.ReportingServices.ReportViewerControl.Winforms,通过nuget引入进来时会自动添加Microsoft.ReportViewer.WinForms、Microsoft.ReportViewer.Common.dll、Microsoft.ReportViewer.DataVisualization.dll、Microsoft.ReportViewer.Design.dll、Microsoft.ReportViewer.ProcessingObjectModel.dll,一共就是5个dll库才能用LocalReport
2、添加rdlc文件,且设计rdlc参数和对象数据集,通过 “表” 组件来循环输出数据,其中包括条码,项目名称等等内容,rdlc打印条码,这里后台将数据传输到rdlc时需要将条码图片转成条码字节数组byte[],然后在rdlc中放一个图片组件,将数据集中条码字节数组给到表达式中即可rdlc循环打印条码输出
rdlc数据的组装,条码生成图片要用到BarcodeLib.dll
rdlc自动打印条码的结果
rdlc打印小票其中包含动态显示多条形码具体实现代码请看以下代码
private void button1_Click(object sender, EventArgs e)
{
#region test method
var fileurl = Application.StartupPath + @"\data.txt";//数据源
if (!File.Exists(fileurl))
{
MessageBox.Show("路径不存在");
return;
}
var resultStr = File.ReadAllText(fileurl);
#endregion
var XmlString = Utils.SoapReplace(Utils.ToTxt(resultStr));//解析数据源
Ut