場景 zxing.dll下載 https://download.csdn.net/download/badao_liumang_qizhi/11623214 效果 實現 根據上面文章中將簡單的二維碼生成後,現在要調整其佈局。 拖拽一個按鈕,雙擊進入其點擊事件。 這裡新建了一個工具類ZxingHelp ...
場景
zxing.dll下載
https://download.csdn.net/download/badao_liumang_qizhi/11623214
效果
實現
根據上面文章中將簡單的二維碼生成後,現在要調整其佈局。
拖拽一個按鈕,雙擊進入其點擊事件。
private void button6_Click(object sender, EventArgs e) { //二維碼內容對象 AssetEntity assetEntity = new AssetEntity() { Name = "霸道",Gender = "男",Url = "123" }; //使用上面生成二維碼的方法獲取二維碼的bitmap對象 Bitmap bitmap = ZxingHelper.CreateQRCode("霸道"); //重新繪製二維碼佈局 Image img = ZxingHelper.GetPrintPicture(bitmap, assetEntity,400,400); //設置pictureBox的圖片源 this.pictureBox1.Image = img; }
這裡新建了一個工具類ZxingHelper,調用其CreateQRCode方法返回生成二維碼的Bitmap格式,然後調用其
GetPrintPicture獲取調整佈局後的照片。
在此之前,先新建一個存儲列印內容的實體類AssetEntity
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NPOITest { class AssetEntity { private string name; private string gender; private string url; public string Name { get => name; set => name = value; } public string Gender { get => gender; set => gender = value; } public string Url { get => url; set => url = value; } } }
然後在工具類中
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Printing; using System.Linq; using System.Text; using System.Threading.Tasks; using ZXing; using ZXing.Common; using ZXing.QrCode; namespace NPOITest { class ZxingHelper { public static Bitmap CreateQRCode(string asset) { EncodingOptions options = new QrCodeEncodingOptions { DisableECI = true, //編碼 CharacterSet = "UTF-8", //寬度 Width = 120, //高度 Height = 120 }; BarcodeWriter writer = new BarcodeWriter(); writer.Format = BarcodeFormat.QR_CODE; writer.Options = options; return writer.Write(asset); } public static Image GetPrintPicture(Bitmap image, AssetEntity asset, int picWidth, int picHeight) { //新建Bitmap對象 用於返回 使用傳遞的參數作為寬度和高度 Bitmap printPicture = new Bitmap(picWidth, picHeight); //高度 int height = 5; //新建字體 Font font = new Font("黑體", 10f); //Graphics :封裝一個 GDI+ 繪圖圖面 //FromImage :從指定的 System.Drawing.Image 創建新的 System.Drawing.Graphics。 Graphics g = Graphics.FromImage(printPicture); //Brush :定義用於填充圖形形狀(如矩形、橢圓、餅形、多邊形和封閉路徑)的內部的對象。 Brush brush = new SolidBrush(Color.Black); //設置此 System.Drawing.Graphics 的呈現質量。 g.SmoothingMode = SmoothingMode.HighQuality; //填加反鋸齒代碼效果 g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; int interval = 15; int pointX = 5; //用指定的位置和大小初始化 System.Drawing.Rectangle 類的新實例。 Rectangle destRect = new Rectangle(190, 10, image.Width, image.Height); //在指定位置並且按指定大小繪製指定的 System.Drawing.Image 的指定部分。 //GraphicsUnit.Pixel: 指定給定的數據的度量值的單位。 //DrawImage :在指定的位置並且按原始大小繪製指定的Image對象 g.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); // height += 8; //用指定的位置和大小初始化 System.Drawing.RectangleF 類的新實例。 RectangleF layoutRectangle = new RectangleF(pointX, height, 260f, 85f); //在指定矩形並且用指定的 System.Drawing.Brush 和 System.Drawing.Font 對象繪製指定的文本字元串 g.DrawString("姓名:" + asset.Name, font, brush, layoutRectangle); height += interval; layoutRectangle = new RectangleF(pointX, height, 230f, 85f); g.DrawString("性別:" + asset.Gender, font, brush, layoutRectangle); height += interval; layoutRectangle = new RectangleF(pointX, height, 230f, 85f); g.DrawString("鏈接:" + asset.Url, font, brush, layoutRectangle); return printPicture; } } }