使用VSTO写的一个工作证打印软件
转行做HR近2年。最近公司要做工牌,工牌上要打印照片,姓名,工号和部门等信息。一共1000多人,如果手工排版手工打印的话,估计要死人。
于是coding的老毛病又犯了,想写个程序来打印工牌。还是拿最近比较常用vsto来做office插件程序吧。毕竟这个用起来也顺手,因为没有一个hr不会用excel。
一,工牌的大体样子

《图1》
基本元素:企业名称,照片,姓名,工号,部门,企业理念。当然程序并没有限制工卡的内容,这里只是个例子。实际使用时,你可以根据自己的需要来定义格式,定义要打印的内容。
二,实现
想用vsto来做,自然离不开excel。
1,员工花名册和员工照片是有的。那么就有下面的表了:

《图2》
2,报表组件
想到格式可能要变,因此想找一款比较好用的报表工具来设计格式,展示 并且来打印。
正好以前项目上用过一款报表软件,也买过授权,锐浪报表。是个小公司出的产品,但是比较好用,并且免费版也能用,设计和显示的时候有水印,打印出来没有水印。足矣满足要求。
(1)设计下格式(上图,顺便给锐浪做个广告)

《图3》
用的是他的自由格式报表,很好使。设计完后保存为一个文本文件。
这个工具提供了多种开发环境的开发组件,比如 .net下的,我喜欢,很好用。
3,打印窗口
先面试打印窗口的ui设计,很简单,就是一个锐浪的打印控件,拖过来就OK。右边属性窗口。

《图4》
加载报表的代码,很简单,不解释,看锐浪的文档或离职即可。

在显示报表的时候,吧数据喂给控件即可,支持xml格式,json格式,直接访问数据库,等等。我是采用的第一种方式,因为数据就在excel中,我只要按照他的格式组织数据给即可。
4,字段对应
一个实现的细节,说下。
在报表格式里,一个数据项,甚至是图片,都是一个字段,field。在上面提到的xml报表数据中,字段的名字就是数据的节点。在组织数据的时候,是从图2的表中读取,因此要定义下报表字段和excel列的对应关系。
这个对应也是放在excel中的一个sheet中,如下图:

《图5》
数据映射配置:eno=A;ename=B;dept=C;epicfile=D;bkground=%background_img%;org=%org_name%;org_statement=%org_statement%
解释如下:eno(工号)对应A列,ename(姓名)对应B列,。。。。。。。很简单。
报表格式见第8行,是引用的报表格式文件。其实也可以吧报表格式的内容(文本的)直接放在这里。见第5行。我没有用,直接用的文件。因为excel的单元格容量是32767,报表太大放不大。不过一般不嵌入图片的报表都很小。
5,打印窗口跑起来的效果

《图6》
三,最终的效果

《图7》
细心的你可能注意到右边的另外一个奥巴马。这是用office 的 document action panel 实现的一个工卡预览。

《图8》
四,赞助
现在免费程序求打赏比较时髦,我也做了个。

《图9》
特别指出,赞助窗口左侧的水粉画,是女儿的涂鸦之作。还不错?打赏一下吧 :>)
本程序免费使用,欢迎来信索取。rgener@sina.com。
使用VSTO写的一个工作证打印软件的更多相关文章
- python写一个随机点名软件
最近有个随机点名软件的需求,故写了一个,上代码:github地址 # -*- coding: utf-8 -*- # @Time : 18-12-31 下午4:21 # @Author : Felix ...
- 写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z
题目: 写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z.要求用线程间的通信. /** * 写两个线程,第一个线程打印1-52,第二个线程打印 ...
- 代码实现:当我们下载一个试用版软件,没有购买正版的时候,每执行一次就会提醒我们还有多少次使用机会用学过的IO流知识,模拟试用版软件,试用10次机会,执行一次就提示一次您还有几次机会,如果次数到了提示请购买正版
package com.loaderman.test; import java.io.BufferedReader; import java.io.FileReader; import java.io ...
- 第一章-第四题(ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么?软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?这个游戏团队, 有很好的软件,但是商业模式和其他软件之外的因素呢?有没有考虑到)--By梁旭晖
引用 http://baike.baidu.com/link?url=z_phkcEO4_HjFG_Lt163dGFAubdb68IbfcfzWscTOrrZ55WbJEQKzyMQ5eMQKyatD ...
- 我写的一个ExcelHelper通用类,可用于读取或生成数据
读取或生成EXCEL数据的方法有很多,一般常见的有: 1.通过OFFICE EXCEL组件,优点:读取与生成EXCEL文件方便,缺点:服务器上必须安装OFFICE软件,且进程无法及时释放 2.通过第三 ...
- 用c#写的一个局域网聊天客户端 类似小飞鸽
用c#写的一个局域网聊天客户端 类似小飞鸽 摘自: http://www.cnblogs.com/yyl8781697/archive/2012/12/07/csharp-socket-udp.htm ...
- 师兄写的一个JAVA播放器的源代码(转)
师兄写的一个JAVA播放器的源代码 MediaPlayer.java------------------------------------------------------------------ ...
- NDK中使用pthread多线程中自己写的一个BUG
在使用pthread进行NDK中的多线程开发时,自己写了一个BUG, void *darkGrayThread(void *args) { ThreadParam *param = (ThreadPa ...
- 如何写出一个让人很难发现的bug?
程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含bug. 那么如何写出一个让(坑)人(王)很(之)难(王)发现的bug呢? - 1 -新手开发+ ...
随机推荐
- 如何进行Web服务的性能测试?
随着浏览器功能的不断完善,用户量不断的攀升,涉及到web服务的功能在不断的增加,对于我们测试来说,我们不仅要保证服务端功能的正确性,也要验证服务端程序的性能是否符合要求.那么性能测试都要做些什么呢?我 ...
- springcloud微服务实战--笔记--1、基础知识
微服务的问题: 分布式事务和数据一致性. 由于分布式事务本身第实现难度就非常大,所以在微服务架构中,我们更强调在各服务之间进行无事务第调用,而对于数据一致性,只要求数据在最后第处理状态是一致第即可:若 ...
- EasyDSS RTMP流媒体解决方案之直播录像自动清理方案
本文转自Marvin的博客: http://blog.csdn.net/marvin1311/article/details/78660592 EasyDSS_Solution直播录像清理 直播录像, ...
- Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目(转)
大部分是直接上图哦. 点击如图所示的地方,进行添加Tomcat配置页面 弹出页面后,按照如图顺序找到,点击+号 tomcat Service -> Local 注意,这里不要选错了哦,还有一个T ...
- 九度OJ 1177:查找 (字符串操作)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6729 解决:1981 题目描述: 读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共有2中命令:1.翻转 从下标 ...
- 题解 CF97C 【Winning Strategy】
题解 CF97C [Winning Strategy] 此题是某平台%你赛原题,跟大家分享一下某校zsy和sxr等同学的神仙做法. 我解释一下题意,大是说,我有[无限]个人,每个人可以对他" ...
- 【iOS开发-63】Unknown type name "CGRect",did you mean "Rect"?的解决方式
出现这个问题的童鞋,差点儿都是由于用了Xcode6. 原因:在Xcode6之前,创建的文件系统会自己主动为用户导入Foundation.h和UIKit.h文件,可是最新的Xcode6仅仅为用户导入了F ...
- SAP 第四代增强-BTE
第四代BTE实例详解:http://blog.csdn.net/wbin9752/article/details/7954922 第三代增强(BADI实例详解) :http://blog.csdn.n ...
- linux下chrome和chromedriver的安装
1.安装chrome 用下面的命令安装最新的 Google Chrome yum install https://dl.google.com/linux/direct/google-chrome-st ...
- 登录令牌 Token 介绍
Token值介绍 token 值: 登录令牌.利用 token 值来判断用户的登录状态.类似于 MD5 加密之后的长字符串. 用户登录成功之后,在后端(服务器端)会根据用户信息生成一个唯一的值.这个 ...