Code39 產出的BarCode 一般都為Bitmap的物件
CrystalReport 中產生動態圖片我紀錄我實做過的兩種方法
第一種方式:使用圖片位置的來源路徑
這種方式只要指定你的URL路徑就可以了,Code39 程式碼會Retrun Jpeg的格式。
這個Jpeg直接在Code39 程式產生Bitmap後,在馬上轉成Jpeg
直接回傳,這樣就可以直接顯示圖片。
Sample Code :
Bitmap oBmp;
oBmp = GetCode39(Request.QueryString["id3"]);
oBmp.Save(Response.OutputStream, ImageFormat.Jpeg);
第二種方式:使用DataSet動態Loading
將Bitmap轉成Byte變數塞入DataSet中,利用CrystalReport 加入此變數。
其中比較要注意的有:
1. CR中的變數要為BLOB變數,DataSet 變數設定為Base64Binary or Byte
2. objDTbe.Columns.Add(strColumnName[i],System.Type.GetType("System.Byte[]"));
3.CR中圖片可以設定成「自動調整大小」比較好看一點(以BarCode為例的話)
Sample Code :
//組成要傳給CR的DataSet
DataSet objDs = new DataSet();
DataTable objDTbe=new DataTable("ENTprintTable");
string[] strColumnName={"BILL_ID","SEND_DEP","SEND_EMP","REC_DEP","REC_EMP","REC_ZIP","REC_BASE","GOOD_MEMO","MEMO","IMG","CREATE_DATE"};
for(int i=0;i
{
if (i == 9)
objDTbe.Columns.Add(strColumnName[i],System.Type.GetType("System.Byte[]"));
else
objDTbe.Columns.Add(strColumnName[i]);
}
//Produce Bar Code's Byte Type
Code39Hander BarCode = new Code39Hander();
Bitmap oBmp = BarCode.GetCode39("A0000000001");
MemoryStream MyMS = new MemoryStream();
oBmp.Save(MyMS, System.Drawing.Imaging.ImageFormat.Jpeg);
//新增資料
DataRow objDRow=objDTbe.NewRow();
objDRow[0] = "A1000000001";
objDRow[1] = "總部-人力資源TEAM";
objDRow[2] = "1011-吳小劫";
objDRow[3] = "南港營業所";
objDRow[4] = "3712-怡靜";
objDRow[5] = "11011";
objDRow[6] = "五堵BASE";
objDRow[7] = "營業所薪資條";
objDRow[8] = "收到後請回饋SD";
objDRow[9] = MyMS.ToArray();
objDRow[10] = DateTime.Now.ToString("yyyy/MM/dd");
objDTbe.Rows.Add(objDRow);
MyMS.Close();
沒有留言:
張貼留言