WPF 员工卡条形码

大家都知道条形码(Barcode)是一种可以由机器识别的特殊编码,在生产、生活中也常常会见到并使用它。条形码的类型和种类很多感兴趣的朋友可以详细了解一下。其中Code 39 可以说是一种最为常见并广泛使用的字符与数字结合的编码类型,本篇也将利用它制作一个带有条形码的员工卡应用程序。

在公司内部员工卡是员工身份唯一的识别工具,同时也是考勤及门禁系统的主要信息来源。首先在WPF 中设计一个简单的员工卡样式,具备员工卡标识、员工相片、员工姓名等。

<Border CornerRadius="3" BorderBrush="Gray" BorderThickness="2" Background="White"
        MouseLeftButtonDown="Border_MouseLeftButtonDown">
    <Canvas x:Name="mainCanvas">
        <Grid x:Name="closeBtn" Canvas.Left="330" Canvas.Top="0"
              MouseLeftButtonDown="Close_MouseLeftButtonDown">
            <Ellipse Height="15" Width="15" HorizontalAlignment="Center">
                <Ellipse.Fill>
                    <SolidColorBrush x:Name="ellipseColor"/>
                </Ellipse.Fill>
            </Ellipse>
            <TextBlock Text="x" Margin="2,-2,2,2" HorizontalAlignment="Center">
                <TextBlock.Foreground>
                    <SolidColorBrush x:Name="textColor" Color="Gray"/>
                </TextBlock.Foreground>
            </TextBlock>
        </Grid>

        <Border BorderBrush="#FF54545C" Canvas.Top="25" CornerRadius="5"
                Height="49" Width="339" Background="#FF2192C4" Canvas.Left="5">
            <TextBlock Text="EMPLOYEE   CARD" Foreground="White" FontSize="20"
                       VerticalAlignment="Center" HorizontalAlignment="Center"
                       FontWeight="Black" FontFamily="Microsoft Sans Serif"/>
        </Border>
        <Grid Canvas.Left="96" Canvas.Top="78">
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Image Source="Images/cardpic.png" Grid.Row="0"/>
            <TextBlock Text="Li Jing Ran" FontSize="30" FontWeight="Black"
                       Grid.Row="1" HorizontalAlignment="Center"/>
        </Grid>
    </Canvas>
</Border>

 代码内容比较简单,其中需要提一下的是x:Name 为closeBtn 的<Grid>,可以看到它包含了一个<Ellipse>和<Textblock>,它们的颜色填充方式看上去做的很复杂。其实是为了实现一个动态效果:当鼠标移动到关闭图标上时,其<Ellipse>和<Textblock>会改变颜色(如下图对比)。

该效果代码如下,通过Window.Resources 设置一个ColorAnimation Storyboard,再通过MouseEnter、MouseLeave 来触发Storyboard 动画效果。

<Window.Resources>
    <Storyboard x:Key="flashClose">
        <ColorAnimation Storyboard.TargetName="ellipseColor"
                        Storyboard.TargetProperty="Color"
                        From="White" To="Gray" Duration="0:0:0.1"/>
        <ColorAnimation Storyboard.TargetName="textColor"
                        Storyboard.TargetProperty="Color"
                        From="Gray" To="White" Duration="0:0:0.1"/>
    </Storyboard>
</Window.Resources>
<Window.Triggers>
    <EventTrigger SourceName="closeBtn" RoutedEvent="Grid.MouseEnter">
        <BeginStoryboard x:Name="showClosBtn" Storyboard="{StaticResource flashClose}"/>
    </EventTrigger>
    <EventTrigger SourceName="closeBtn" RoutedEvent="Grid.MouseLeave">
        <StopStoryboard BeginStoryboardName="showClosBtn"/>
    </EventTrigger>
</Window.Triggers> 完成上面的界面设计,最后只需在员工卡下放的空白处添加员工编号条形码即可。首先在项目中加入Barcode 和Code39 类,我们要通过这两个类完成条形码的绘制工作。打开C#程序,编写如下代码。  通过Barcodes 类创建一个新的条形码,定义BarcodeType 为"Code39",编码Data 为“10001”,如果需要校验则将CheckDigit 设为"Yes"。其中thinWidth、thickWidth 用于定义黑白条码的宽窄度。
Barcodes bb = new Barcodes();
bb.BarcodeType = Barcodes.BarcodeEnum.Code39;
bb.Data = "10001";
bb.CheckDigit = Barcodes.YesNoEnum.Yes;
bb.encode();

int thinWidth;
int thickWidth;

thinWidth = 2;
thickWidth = 3 * thinWidth;

string outputString = bb.EncodedData;
string humanText = bb.HumanText;

绘制条形码

根据编码(EncodedData)的长度利用Rectangle 类逐一绘制黑、白条码,t 表示窄码,w 表示宽码。

int len = outputString.Length;
int currentPos = 50;
int currentTop = 340;
int currentColor = 0;
for (int i = 0; i < len; i++)
{
    Rectangle rect = new Rectangle();
    rect.Height = 80;
    if (currentColor == 0)
    {
        currentColor =  1;
        rect.Fill = new SolidColorBrush(Colors.Black);
    }
    else
    {
        currentColor = 0;
        rect.Fill = new SolidColorBrush(Colors.White);
    }
    Canvas.SetLeft(rect, currentPos);
    Canvas.SetTop(rect, currentTop);

    if (outputString[i] == ‘t‘)
    {
        rect.Width = thinWidth;
        currentPos += thinWidth;
    }
    else if (outputString[i] == ‘w‘)
    {
        rect.Width = thickWidth;
        currentPos += thickWidth;
    }
    mainCanvas.Children.Add(rect);
}

添加可读码

最后在条形码下方添加一行可读码,方便员工认读条形码内容,也就是将“10001”员工编号显示出来。

TextBlock tb = new TextBlock();
tb.Text = humanText;
tb.FontSize = 25;
tb.FontFamily = new FontFamily("Consolas");
Rect rx = new Rect(0, 0, 0, 0);
tb.Arrange(rx);
Canvas.SetLeft(tb, 120);
Canvas.SetTop(tb, currentTop + 80);
mainCanvas.Children.Add(tb);
时间: 2024-10-08 20:50:33

WPF 员工卡条形码的相关文章

高质量的基于向量条形码产生机制 WPF Drawing API条形码控件

Barcode Professional for WPF条形码控件是一款轻量级的 .NET 程序集,为你的WPF程序生成高质量的基于矢量的条码,支持大多数流行的一维和二维条形码:Code 39, Code 128, GS1-128, GS1 DataBar (RSS-14),  EAN 13 & UPC, Postal (USPS, British Royal Mail, Australia Post, DHL, etc.), Data Matrix, QR Code, PDF 417, UPS

添加条码到WPF文本的条形码控件Actipro Bar Code

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. 添加条码到WPF文本的条形码控件Actipro Bar Code

某公司员工卡金额校验算法破解

漏洞概要关注数(35) 关注此漏洞 缺陷编号: WooYun-2011-03701 漏洞标题: 某公司员工卡金额校验算法破解 相关厂商: 某奇怪公司 漏洞作者: insight-labs 提交时间: 2011-12-21 21:55 公开时间: 2012-02-04 21:55 漏洞类型: 成功的入侵事件 危害等级: 高 自评Rank: 20 漏洞状态: 厂商已经确认 漏洞来源: http://www.wooyun.org Tags标签: 盲目信任用户数据 加密算法设计错误 RFID安全 硬件安

捷信达温泉管理软件员工卡SQL查询

select * from snkey where v_name2 like '%员工%' 原文地址:https://www.cnblogs.com/landv/p/9309105.html

使用Oracle的Security External Password Store功能实现无密码登录数据库

使用Oracle的Security External Password Store功能实现无密码登录数据库 作者:赵全文  网名:guestart 在今年国内很多用户的Oracle数据库突然遭到比特币勒索,从这一方面来说,数据库的安全,大家没有引起足够的重视.其实不难发现,我们在生产环境中使用的Oracle数据库确实存在着很多安全隐患和安全风险.Oracle在数据库安全方面的解决方案也有很多,比如Oracle审计与数据库防火墙(AVDF)产品.Oracle的透明数据加密功能(KDE)和Oralc

微信公众平台开发教程(八)Session处理

微信公众平台开发教程(八)Session处理 在微信窗口,输入的信息有限,我们需要将一些信息分多次请求. 比如:在进行用户绑定时,我们需要输入用户的相关信息,比如:用户名.密码,或者姓名.电话号码,服务端验证通过,即可将系统用户与微信用户绑定. 然后,此微信账户就有一定的功能权限了,可以查积分,消费记录等.服务号:招商银行信用卡,就有很多功能. 微信客户端无法缓存信息,而且输入信息有限,需要进行多次请求,在服务端保存当前会话状态.这就需要Session. 本文以用户认证,绑定账号为例,来说明具体

管理没有完美 只有和谐

赢在和谐 第一部分:管理没有完美 只有和谐 前 言 和谐是当今社会发展的主旋律,在社会各方面.各层次.各领域的竞争达到白热化的情况下,提倡和谐无疑具有重大的意义.因为人们已经开始充分认识到,只有和谐才能发展:只有和谐才能进步:只有和谐才能实现终极突破. 和谐的发展观为企业的发展提供了一个崭新的思路.在市场竞争日益激烈的情况下,企业耗费很大的精力才有可能获得竞争的胜利.然而,胜利的结果通常不是丰厚的利润:相反,还有可能是巨额的亏损.在疲于应对外部竞争的同时,企业的领导者还不得不应对企业内部员工的竞

一路随行

周一,开往苹果园方向的列车即将进站,熟悉的声音,熟悉的站台,清晨跟小美同行.   时光仿佛回到了九年前跟小美手拉手一起坐地铁上班的情景,那时候她在三里河,我在西直门,每天早晨从家到地铁的那一小段路,留下太多我们的足迹和窃窃私语,她更多是选择沉默,甘愿当一个倾听者,以至于这么多年来大部分时间是我说她听,这就是双子与天蝎的鲜明个性和完美结合.  每天一起1号线上班,一起相约复兴门下班,有时候在四惠下车,有时候在四惠东下车,取决于我们是否在家做晚饭.那时候还没有葫芦娃,没有车,过着简单的二人世界,有的

10种令人吃惊的方式你的日常生活中正在收集数据的大数据野兽

10种令人吃惊的方式你的日常生活中正在收集数据的大数据野兽 原文:http://www.bloomberg.com/slideshow/2014-06-03/10-surprising-ways-your-daily-life-is-feeding-the-big-data-beast.html 无处可逃 大数据是你日常生活中,无论你喜欢与否的重要组成部分 - 甚至是意识到这一点. 当你去看医生.去到你的手机上工作或获得方向,有一个非常好的机会,有软件在那里悄悄地收集和分析这些信息. 并依据不同