2011年12月2日 星期五

CrystalReport中動態載入外部圖片(Code39為例)

請參考:CrystalReport中動態載入外部圖片(Code39為例)



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();

沒有留言:

張貼留言