條碼圖案與 SSRS,和圖案放大

來源:互聯網
上載者:User

今天附屬公司那邊丟了個需求來,要在微軟報表格服務2005 (SSRS 2005)列印的表單上加上條碼。問我們有沒有外掛程式什麼的能做到這需求。

SSRS 的 Image,可以是 External 來自 URL,我爽快地說“簡單,一個鐘後寫給你”。心想,用 iTextSharp 做個 web ,接受 request 參數是單號,response 個 Image 格式 是 JPEG,多簡單呀。原來,是個悲劇,真丟人。

關鍵是,SSRS 運行時候,URL 中含 ? 號時候,它根本提取不了圖案。它必須是固定路徑的一張圖。要我寫個圖片檔放在臨時目錄什麼的嗎,這樣的事我幹不出來接受不了。SSRS 的另一個問題,是它的重複地區高度無法固定。簡單來說,它是不適合用來列印表格。我是這麼說服自己的。

時間關係,我馬上提出用 ASP 做 report viewer 代替,Report Viewer 當然是用其他控制項,不是 SSRS 那個。那邊接受了,反正他們那個用戶端也只是 Process.Start iexplorer.exe 來顯示單據列印的… ,而且能用的話他們也沒管那麼多。馬上動手,開啟了 RadControls 內的 Reporting 準備匯入 RDL 時候,又發現它不支援 RDL 匯入,只支援 DevExpress、CrystalReport 等等的報表定義匯入。又一個悲劇。

用極速把表格在 RadControls 的 Reporting 內重畫一次,弄個 Report Viewer 控制項在 ASP,測一下還 OK。已經用了兩個鐘了,還沒放條碼上去呢。因為 RadControls Reporting 沒有二維碼,附屬公司他們要 Data Matrix 格式,還是用 iTextSharp 拿 System.Drawings.Image,然後發現出來那個圖案小得可憐…。任由 Reporting 自己 scratch 大小,圖案會變得不清晰,這又要自己 resize 了,白癡一點,做個新的 bitmap 重新畫一次唄。

Code Snippet
  1. System.Drawing.Image barcode = IPE.BarCode.BarCodeFactory.GetDMCode(textBeforeEncode);
  2. System.Drawing.Image enlarged = new System.Drawing.Bitmap(barcode.Width * 4, barcode.Height * 4);
  3. System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(enlarged);
  4.  
  5. g.DrawImage(barcode, 0, 0, barcode.Width * 4, barcode.Height * 4);
  6. g.Dispose();
  7.  
  8. ...

 

圖案是這樣:

在 IE 上看還是有點模糊,再改一下:

Code Snippet
  1. System.Drawing.Image barcode = IPE.BarCode.BarCodeFactory.GetDMCode(textBeforeEncode);
  2. System.Drawing.Image enlarged = new System.Drawing.Bitmap(barcode.Width * 4, barcode.Height * 4);
  3. System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(enlarged);
  4.  
  5. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  6. g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
  7. g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  8. g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
  9. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
  10.  
  11. g.DrawImage(barcode, 0, 0, barcode.Width * 4, barcode.Height * 4);
  12. g.Dispose();
  13.  
  14. ...

 

這就 ok 了…。

連部署和測試合計用了足足三個小時,與當初牛逼哄哄的一個鐘相比,唉。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.