首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 動態產生 Code 39 條碼完整範例

     編輯:關於.NET

Code 39 是常見的一維條碼規格,支援 43 個字元(0-9、A-Z、-、.、$、/、+、%、空格),以 * 作為起止碼。本文提供一個 WPF 範例,示範如何即時將文字轉換為 Code 39 條碼圖形。

架構概覽

  • MainWindow.xaml:包含輸入文字框與顯示條碼的 Canvas。
  • MainWindow.xaml.cs:處理文字變更事件,計算條碼編碼並繪製條碼條。

XAML 介面

<Window x:Class="Code39Demo.MainWindow"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        Title="Code 39 產生器" Height="350" Width="525" Loaded="Window_Loaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBox Name="Textbox1" VerticalContentAlignment="Center"
                 TextChanged="Textbox1_TextChanged"/>
        <Canvas Name="Canvas1" Grid.Row="1"/>
    </Grid>
</Window>

核心編碼邏輯

  1. 定義 Code 39 字元對應的 9 位元寬窄模式(如 0: ▮▮▯▯▮▯▯▮▯)。
  2. 輸入文字轉大寫,前後加上起止碼 *。
  3. 遍歷每個字元,依模式在 Canvas 上繪製黑白相間的 Rectangle。
  4. 模組寬度可調整(如窄條 2px,寬條 6px),條碼高度固定或可配置。

關鍵程式碼片段

private void DrawBarcode(string input)
{
    Canvas1.Children.Clear();
    if (string.IsNullOrEmpty(input)) return;

    string encoded = "*" + input.ToUpper() + "*";
    double x = 0;
    const double narrow = 2, wide = 6, height = 100;

    foreach (char c in encoded)
    {
        if (!CharMap.TryGetValue(c, out string pattern)) continue;
        foreach (char bar in pattern)
        {
            bool isBlack = bar == 'b';
            double w = (bar == 'w' || bar == 'W') ? wide : narrow; // 簡化示意
            var rect = new Rectangle
            {
                Width = w,
                Height = height,
                Fill = isBlack ? Brushes.Black : Brushes.White
            };
            Canvas.SetLeft(rect, x);
            Canvas.SetTop(rect, 0);
            Canvas1.Children.Add(rect);
            x += w;
        }
        x += narrow; // 字元間距
    }
}

延伸應用

  • 加入 Checksum 計算(Code 39 可選)。
  • 支援 Full ASCII Code 39(雙字元擴展)以涵蓋完整 ASCII 字集。
  • 輸出為 RenderTargetBitmap 存檔或列印。

完整原始碼可參考 GitHub 專案 Code39Demo,已包含字元對照表與完整繪製邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved