// 添加Panel控件到窗體 (panelPreview)
private void GeneratePreview()
{
panelPreview.Paint += (sender, e) =>
{
Graphics g = e.Graphics;
g.Clear(Color.White);
g.SmoothingMode = SmoothingMode.AntiAlias;
// 1. 繪制文字
using (Font font = new Font("微軟雅黑", 10))
{
g.DrawString("產品標簽", font, Brushes.Black, new PointF(20, 20));
}
// 2. 繪制圖片
Image logo = Image.FromFile("logo.png");
g.DrawImage(logo, new Rectangle(20, 50, 100, 50));
// 3. 繪制線條
using (Pen pen = new Pen(Color.Black, 1))
{
g.DrawLine(pen, 20, 110, 200, 110);
}
// 4. 繪制一維碼 (需安裝BarcodeLib)
Barcode barcode = new Barcode();
Image barcodeImg = barcode.Encode(BarcodeLib.TYPE.CODE128, "123456");
g.DrawImage(barcodeImg, 20, 130);
// 5. 繪制二維碼 (需安裝ZXing.Net)
var writer = new BarcodeWriterPixelData
{
Format = BarcodeFormat.QR_CODE,
Options = new EncodingOptions { Height = 100, Width = 100 }
};
var pixelData = writer.Write("https://example.com");
using (Bitmap qrImg = new Bitmap(pixelData.Width, pixelData.Height, PixelFormat.Format32bppRgb))
{
BitmapData bmData = qrImg.LockBits(new Rectangle(0, 0, qrImg.Width, qrImg.Height), ImageLockMode.WriteOnly, qrImg.PixelFormat);
Marshal.Copy(pixelData.Pixels, 0, bmData.Scan0, pixelData.Pixels.Length);
qrImg.UnlockBits(bmData);
g.DrawImage(qrImg, 150, 130);
}
};
panelPreview.Invalidate(); // 觸發重繪
}
// 打印按鈕事件
private void btnPrint_Click(object sender, EventArgs e)
{
PrintDocument pd = new PrintDocument();
pd.PrintPage += (s, args) =>
{
// 創建與打印機分辨率匹配的Bitmap
Bitmap bmp = new Bitmap(panelPreview.Width, panelPreview.Height);
panelPreview.DrawToBitmap(bmp, panelPreview.ClientRectangle);
args.Graphics.DrawImage(bmp, args.MarginBounds);
};
PrintPreviewDialog preview = new PrintPreviewDialog();
preview.Document = pd;
preview.ShowDialog();
}