.NetでBarcodeを作成し、印刷まで
目標
フリーパッケージでバーコードを作成し、印刷する。
有料パッケージだと色々便利だが、以前からAccessやExcelに組み込まれたバーコードコントロールを使っているお客様には、金を使う気が無いので、却下になっている。
Nugetからパッケージをインストールする。
「barcode」で検索すると色々な候補が出てくるが、ほとんど有料だった。(IronBarcode, Spireなどなど)
結果、「Zen Barcode Rendering Framework」を使う。
種類に制約があるが、今回は問題なし
PM> Install-Package Zen.Barcode.Rendering.Framework -Version 3.1.10729.1
Nuget:
https://www.nuget.org/packages/Zen.Barcode.Rendering.Framework/
GitHub:
https://github.com/dementeddevil/BarcodeRenderingFramework
使い方
基本生成したバーコードをImage形式に保存する。
そのときに使うBarcodeDrawFactoryを切替ることで、生成されるバーコードも変わる仕組みらしい
using Zen.Barcode; private Code128BarcodeDraw _barcode; private Image _img; public void CreateBarcode(string barcodeText, int barHeight = 50, int scale = 2) { _barcode = BarcodeDrawFactory.Code128WithChecksum; _img = _barcode.Draw(barcode_text, barHeight, scale); }
scaleはデフォルトだと少し小さめだったため、2にしてみた。
印刷用に編集
出来上がったバーコードはまさにバーコードのみだったため、印刷用イメージを作成する。
こんな感じにしたい
//背景イメージ作成(バーコードイメージの余白になるように大きめにする。) System.Drawing.Image backImg = new Bitmap(img.Width + 20, img.Height + 40, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics g = Graphics.FromImage(backImg); Brush b = new SolidBrush(Color.Black); Font f = new Font("Courier", 13); StringFormat sf = new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Far }; //背景クリア g.Clear(Color.White); g.DrawImage(img, 10, 10); //バーコードを貼り付け g.DrawString(bm.BarcodeText, f, b, backImg.Width / 2, backImg.Height, sf); //バーコード文字を下部に配置 this.picBox.Image = backImg;
印刷
印刷もやり方探すのにかなり苦労したけど、最終的に作ったイメージを印刷で落ち着いた
//PrintDocumentを初期化し、プリントイベントを紐付ける。 var pd = new System.Drawing.Printing.PrintDocument(); pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.pd_PrintPage); pd.Print(); pd.PrintPage -= this.pd_PrintPage; //PrintDocument.Print();により、以下が実行される。 private void pd_PrintPage(Object sender, System.Drawing.Printing.PrintPageEventArgs e) { //ImageをeのGraphicsに当てたら、印刷された。 e.Graphics.DrawImage(_img, 0, 0); }