參考:
C# 條碼標簽打印程序,RDLC報表動態顯示多條碼標簽的方法
http://www.cnblogs.com/vice/p/4105898.html
我做的思路是:不使用數據庫存儲image的byte[]數據,而是首先將所有需要的條碼數據保存到一個數據庫表中,然后在需要將條碼顯示到RDLC報表中時,取得表中的條碼數據,然后創建數據集(用於存儲報表中需要用到的所有數據),再將每條條碼數據用barcodelib.dll生成條碼對象,返回image對象,再使用下面方法將返回的image對象轉換為byte[]數組存入新建的數據集中。
其他代碼就不貼了,因為好多東西都沒封裝都是碼上去的,太長了。
1 //image對象轉byte數組 2 public static byte[] ImageToBytes(Image img) 3 { 4 ImageConverter imgconv = new ImageConverter(); 5 byte[] b = (byte[])imgconv.ConvertTo(img, typeof(byte[])); 6 return b; 7 }
然后在RDLC中創建模板,添加數據源為剛剛創建的數據集,插入圖片對象,圖像源選擇數據庫,”使用此字段“ 輸入 System.Convert.ToBase64String(Fields!存儲image對象的byte[]列名.Value)
方法二:直接在后台字段中先轉換為Base64字符串
System.Convert.ToBase64String(ImageToBytes(image));
barcodelib.dll的調用方法封裝
注意:
建議image流直接獲取條碼生成的圖片流,即從內存讀取。
此外,RDLC圖片屬性的大小,要設置為原始大小(第一個選項),否則部分掃描槍不能掃描,因為條碼圖片被自動拉升而變形。
如果使用圖片文件,可能導致不清晰,如下
Image img = Image.FromFile(path);