做类似PDA方面的项目倒也多了,像PDA打印条形码的终端设备还是比普通的PDA先进了一点,其实也简单,就是一个简单的PDA主机集成其他的行业应用模块 比如热敏微型打印机,激光扫描器,以及RFID非接触性读卡器 等等以及GPS定位,拍照,录音,GPRS/GSM/3G/WIFI/蓝牙等功能一体
适合现场外面作业移动办公的需求
作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2012年1月4日
下面简单的介绍和分享
该PDA如何实现打印条形码功能
打印头主要是热敏打印 强调的是打印热敏纸(30MM直径*57MM宽度的) 不支持打印不干胶(粘性的标签)
主要是介绍热敏打印条码凭据 小票
PDA打印系统项目文件目录:

用VS2008打开PDA条码打印系统项目

打印code128码 代码截图:

代码开发完毕后 开发部署项目到模拟器或真机

部署到WM6模拟器的效果

二次开发包 SDK代码类和方法

强调的 目前支持主流的几种一维条码的打印,打印出来的条码可以在任何扫描器的二次扫描


真机上正在打印中效果


作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2012年1月4日
PDA手持无线一体打印POS机系统项目
一体打印的POS机用在交警,卫监执法,安监执法,工商执法,移动环保执法,移动质监执法,等移动办公执法系统里,另外物流配送,零售,资产,仓库,抄表等行业有用的相对很多,
该机器完全可以代替传统的智能手机和外加一个便携的蓝牙打印机那种
所有的功能都集成到一体了,比如条码扫描,热敏打印机,相机,RFID(13。56M或125K)非接触性读卡,以及GPRS/GSM/WIFI/3G等无线通讯
开发环境:VS2005,VS2008,c#,C++ SQL2000,SQL2005 ,WEBSERVICE,SOCKET,JSON等
作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2011年12月26日
开发环境



封装好的haohan.DLL 里面有详细的打印格式定义,以及换行,驱动打印的方法和类
以及包括条码扫描,RFID读卡如何使用和调用

PDA手持无线一体打印POS机
实物:




作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2011年12月26日
2011-12月份接了一个物流公司包裹托运POS打印系统项目
主要是根据客人要求 PDA端实现包裹货物的查询,以及现场打印包裹货物的托运的小票凭条
使用我们自己一款手持打印POS一体终端机,该终端机具备 57MM宽度的热敏小票打印机
集成在主机PDA的头部,非常适合移动打印业务需求
作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2011年12月26日
一体打印PDA POS终端:





作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2011年12月26日
2011年上半年接到一家软件公司的安卓外包项目,该项目的开发周期一个月,我的主要工作是写PDA客户端系统和WEBSERVICE接口
常见pda平台:iphone、android、symbian、j2me、windows mobile、mtk。
第一版开发基于安卓android平台
开发内容包含pda前台终端界面开发,后台webservice开发。数据库oarcle10g以上
界面:




作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2011年12月10日
市场上有unix系统平台的手持POS,开发语言主要是C语言为主,相对来说比较难开发,不容易二次开发,软件应用界面不是可视化人性操作界面
而反之wince系统和WINMOBILE系统的一些手持POS机,支持微软的开发平台 主要是VS2008和VS2005开发 开发语言支持C#或C++
以及经常用的的是数据库SQL2000 SQL2005 MYSQL,SQLLITE SQLCE,等等
更容易开发。。。
市场上有一部分移动打印解决方案是 MOBILE,JAVA,安卓平台的智能手机或PDA,外加一个蓝牙或串口便携微型打印机来实现现场打印小票(交警打印处罚单,城管执法打印告知单,停车占道收费打印通知单和收费单,抄表打印收据和通知单,物流行业打印收据凭条等等)
而我介绍的是一个一体打印解决方案:那是一个终端设备同时具备热敏打印机以及手机PDA功能 以及结合了条码扫描,RFID射频,等行业功能
完美的解决移动打印实际需求
下面具体介绍一款PDA打印终端 打印小票可定制内容应用设计开发
(结合设备的打印驱动和SDK)

下面是燃气行业打印记录信息单
namespace PrintTest
{
public partial class Form1 : Form
{
Printer print = new Printer();
string sPrint ="";
int i = 1;
public Form1()
{
InitializeComponent();
//打开设备
print.Open();
// textBox1.Text = "132132132\r\n456465\r\n789888\r\n";
}
private string getNum()
{
if (i < 10)
{
return "000" + i.ToString();
}
else if (i < 100)
{
return "00" + i.ToString();
}
else if (i < 1000)
{
return "0" + i.ToString();
}
else if (i < 10000)
{
return i.ToString();
}
return i.ToString();
}
//打印字符串
private void button1_Click(object sender, EventArgs e)
{
uint u = (uint)Int16.Parse(textBox4.Text);
sPrint = "xxxxxxxx城市燃气发展有限公司燃气加臭剂通知单" + "\r\n";
string sDate = DateTime.Now.ToString("yyyyMMdd");
sPrint += sDate + " " + DateTime.Now.ToLongDateString() + getNum() + "\r\n";
sPrint += "————————————————" + "\r\n";
sPrint += "编号:"+txtUserCode.Text + "\r\n";
sPrint += "用户:" + this.txtUser.Text + "\r\n";
sPrint += "地址:" + txtAddress.Text + "\r\n";
sPrint += "燃气加臭剂读数:" + txtDevice.Text + "\r\n";
sPrint += "xxxx加入量标准:15~30 mg/m3" + "\r\n";
sPrint += "—————————————————" + "\r\n";
sPrint += "户主确认以上读数请签字:__________";
if (print.IsOpen)
{
//打印编辑框里的内容,打印字体高度为24个像素(字体高度可在12-512内任意设置)
if (!print.WriteString(sPrint, u))
{
MessageBox.Show("打印失败,原因是:" + print.Error);
}
//for (int i = 0; i < 10; i++)
//{
// if (!print.WriteString("\r\n\r\n", u))
// {
// MessageBox.Show("打印失败,原因是:" + print.Error);
// }
//回车换行,将内存里的数据都打印出来
if (!print.ReturnToNextLine())
{
MessageBox.Show("打印失败,原因是:" + print.Error);
}
// }
i++;
}
}
软件界面:




作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2011年12月10日
物流行业--PDA物流配送系统项目实战
2010年接的一个物流配送的项目,从需求分析到开发设计 一个多月时间完成了,并且支持MC3090,霍尼韦尔Honeywell,以及MOBILE的手持终端PDA
根据客户实际要求 出了WINCE版本和MOBILE版本
结合条码技术,实现物流配送移动信息化
1、 条码采集
在仓库找出商品,并输入对应规格型号,对未登记的条码进行扫描登记条码,条码必须是唯一的,不能重复,可以一个商品对应多个条码,不能一个条码对应多个商品。
2、 库存查询
通过扫描条码、输入商品编码、规格型号,查询商品的库存情况。
3、 出入库管理
通过扫描单据条码或输入单据号,查询商品的出入库信息(商品编码、名称+规格型号、数量),通过扫描条码或输入商品编码、规格型号进行数量校对,校对完后进行确认。
4、 预收退货管理
当供应商货到后或和与供应商确定退货商品后,新建预收退货单(单头包含:部门、供应商、入库或退库、制单人、备注),逐一扫描指定商品、确定数量,核定无误后保存、审核单据。
5、 物流派工管理
扫描指定要派工单据并同时显示指定单据的商品编码、规格型号、数量,逐一扫描完后指定发货人、送货车辆、司机、线路,保存生成派工单、并审核。
6、 物流签收管理
送货司机持单据送货到顾客家,顾客签收后,司机扫描或输入相应单据并显示本单商品,在系统中进行签收处理。
7、 盘点管理
刷新预定义的盘点单据,输入或选择要盘点的单据,逐一扫描盘点单上的商品、确定数量,保存即可。
8、 费用报批审批
刷新指定时段的费用报批单,进行签字确认。
支持无线可移动,并可实时与物流配送系统数据库对接
具体部分模块界面


public void NewRecord()
{
IsGetData = true;
try
{
Cursor.Current = Cursors.WaitCursor;
string strSQL = "";
//m_State = 0;
this.tb_storeTableAdapter.Connection.ConnectionString = GlobalVariable.m_Conn;
if (GlobalVariable.Conn.State == ConnectionState.Closed) GlobalVariable.Conn.Open();
SqlCommand cmd = GlobalVariable.Conn.CreateCommand();
System.Data.SqlClient.SqlDataAdapter da = null;
DataSet ds = new DataSet();
string ls_gcode="";
this.LblGCode.Text = "";
this.LblName.Text = "";
this.LblModel.Text = "";
if (this.hHDataSet.Tables["tb_store"] != null)
{
this.hHDataSet.Tables["tb_store"].Clear();
}
if (this.TxtBarcode.Text.Trim().Length < 10)
{
strSQL = "Select c_gcode from tb_gds (nolock) " +
" where c_gcode='" + this.TxtBarcode.Text.Trim() + "'";
cmd.CommandText = strSQL;
cmd.CommandType = CommandType.Text;
da = new SqlDataAdapter(cmd);
da.Fill(ds, "tb_gds");
if (ds.Tables["tb_gds"].Rows.Count > 0)
{
ls_gcode = ds.Tables["tb_gds"].Rows[0]["c_gcode"].ToString();
}
if (ls_gcode.Length <= 0)
{
//this.LblName.Text = "扫描的商品未找到!";
if (this.TxtBarcode.Text.Length > 0)
MessageBox.Show("扫描的商品未找到!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}
}
else
{
strSQL = "Select c_gcode from tb_barcode (nolock) " +
" where c_barcode='" + this.TxtBarcode.Text.Trim() + "'";
cmd.CommandText = strSQL;
cmd.CommandType = CommandType.Text;
da = new SqlDataAdapter(cmd);
da.Fill(ds, "c_barcode");
if (ds.Tables["c_barcode"].Rows.Count > 0)
{
ls_gcode = ds.Tables["c_barcode"].Rows[0]["c_gcode"].ToString();
}
if (ls_gcode.Length <= 0)
{
//this.LblName.Text = "扫描的商品未找到!";
if (this.TxtBarcode.Text.Length > 0)
MessageBox.Show("扫描的商品未找到!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}
}
strSQL = "Select a.c_gcode,a.c_name,a.c_model,b.c_number,b.c_move_in_number,b.c_move_out_number,b.c_onway_sale_number,b.c_onway_w_number " +
" from tb_gds a (nolock),tb_gdsadno b(nolock) " +
" where a.c_gcode=b.c_gcode and b.c_gcode='" + ls_gcode + "' and b.c_store_id='" + GlobalVariable.m_CompID + "' ";
cmd.CommandText = strSQL;
cmd.CommandType = CommandType.Text;
da = new SqlDataAdapter(cmd);
if (this.hHDataSet.Tables["tb_store"] != null)
{
this.hHDataSet.Tables["tb_store"].Clear();
}
da.Fill(this.hHDataSet, "tb_store");
GetDataList();
SumTotal();
da.Dispose();
ds.Dispose();
cmd.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("数据库连接失败! " + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}
IsGetData = false;
Cursor.Current = Cursors.Default;
}
作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2011年12月9日
质监执法通--移动质监执法系统项目实战
最抽出时间来,这个项目是今年上半年完成的一个项目,涉及到具体客户的利益,所以只分享质监执法通的少部分的内容
具体不太好透露,
使用VS2008开发工具 c#开发语言 SQLLITE数据库以及SQL2005数据库,以及WEBSERVICE,SOCKET数据接口
VS2008开发工具下开发 拍了几个图片


WEBSERVICE接口 获取任务列表
[WebMethod(Description = "获取任务列表")]
public DataSet GetTask(string investId)
{
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(ConnStr))
{
//1.获取任务列表
SqlDataAdapter da = new SqlDataAdapter("select * from Task where cTaskNo in (select cTaskNo from TaskDetail where iInvestigator="+
"(SELECT ID"+
" FROM Investigator "+
"WHERE (cLogin ='" + investId + "')))", conn);
da.SelectCommand.CommandType = CommandType.Text;
da.Fill(ds, "Task");
SqlDataAdapter sda = new SqlDataAdapter("select * from TaskCheckItem where cTaskNo in (select cTaskNo from TaskDetail where iInvestigator="+
"(SELECT ID"+
" FROM Investigator "+
"WHERE (cLogin ='" + investId + "')))", conn);
sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(ds, "TaskCheckItem");
}
return ds;
}
WINCE手持PDA终端 界面:


作者:欧宏远
博客:http://www.cnblogs.com/pdasoft
日期:2011年12月9日

