在A4格式文档打印之外,企业界经常需要打印票据、收据和标签,这些可以被条码扫描器扫描。它们显示价格,用于标记包裹内的物品,或用于货物的跟踪。每天在仓储、物流、供应链、维护、制造、医疗保健或公共部门等行业中,全球有数以百万计的此类票据、标签和收据被打印。标准打印机不适合打印这些,因此便携式打印机被广泛使用。Zebra是便携式工业打印机制造商的全球领导者,市场份额超过50%。
如果需要在便携式打印机上打印东西,需要一个额外的设备来告诉打印机要打印什么。可以使用桌面PC或智能手机。显然,如果想要在现场、仓库内或移动中打印东西,不能使用桌面PC。更好的选择是使用智能手机。然而,移动开发者通常发现让打印机工作太困难了。
Zebra的软件开发工具包(SDK)特别适合低级编程。这意味着即使对于高级技能的开发者来说,让打印机工作也需要大量的时间。要通过Zebra打印机打印有用的票据或收据,移动开发者需要深入Zebra的SDK代码,了解其功能。他需要理解各种网络,如蓝牙或Wi-Fi及其协议。当打印东西时,开发者需要使用打印机命令来对齐文本、打印文本、打印图片或条码、插入线条或其他对象。
Resco的解决方案将显著减少开发者需要编码的时间,以便在Windows Mobile或CE设备上通过Zebra打印机打印东西。查看在实际设备上演示样本使用的视频:
它包括打印接口和报告接口。
打印接口使用Zebra的SDK连接到打印机并发送打印命令。它是Zebra的SDK的扩展,它提供了额外的代码模型。开发者现在不需要直接向打印机发送命令。这是通过Resco的接口确保的。
报告接口与打印接口紧密合作。它直接与C#语言合作。开发者可以定义一个报告,形式为XML模板,可以绑定到任何数据源。在Resco MobileForms Toolkit中包含了一个样本应用程序,其中有一个订单和客户列表。
下面是一个样本XML模板,用于打印一些文本、线条、列表和条码。
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
page
Width
=
"400"
Mode
=
"Journal"
>
<!
Print some information
>
<
panel
Height
=
"26"
DataSource
=
"Header"
>
<
text
X
=
"0"
Y
=
"0"
Font
=
"7"
FontSize
=
"0"
MaxLength
=
"14"
Width
=
"170"
HAlign
=
"Left"
>
Count:
</text
>
<
text
X
=
"170"
Y
=
"0"
Font
=
"7"
FontSize
=
"0"
MaxLength
=
"19"
Width
=
"230"
HAlign
=
"Right"
DataMember
=
"(Default)"
/
>
<
line
X
=
"0"
Y
=
"24"
X1
=
"400"
Y1
=
"24"
LineWidth
=
"2"
/
>
<
/panel
>
<!
Print list
>
<
repeatpanel
Height
=
"24"
DataSource
=
"Data"
>
<
text
X
=
"0"
Y
=
"0"
Font
=
"7"
FontSize
=
"0"
DataMember
=
"(Default)"
/
>
<
/repeatpanel
>
<!
Print barcode
>
<
panel
Height
=
"120"
DataSource
=
"Barcode"
>
<
barcode
X
=
"0"
Y
=
"0"
Type
=
"Code128"
Width
=
"400"
Height
=
"96"
HAlign
=
"Center"
DataMember
=
"(Default)"
/
>
<
text
X
=
"0"
Y
=
"96"
Font
=
"7"
FontSize
=
"0"
Width
=
"400"
HAlign
=
"Center"
DataMember
=
"(Default)"
/
>
<
/panel
>
<
/page
>
模板由几个报告对象组成,如'page'、'panel'、'text'等,在报告接口中定义。
开发者也可以添加他需要的一些自定义报告对象。这是一个定义新的'rectangle'报告对象的例子:
using
System;
namespace
Resco.Report
{
public
class
ReportRectangle : ReportElement
{
public
ReportRectangle()
{
}
public
int
Width {
get;
set;
}
public
int
Height {
get;
set;
}
public
int
Thickness {
get;
set;
}
public
override
void
Print(Resco.Printer.IPrinter printer)
{
printer.PrintRectangle(
this
.X,
this
.Y,
this
.Width,
this
.Height,
this
.Thickness);
}
public
override
void
Scale(System.Drawing.SizeF scaleFactor)
{
this
.Width = (
int
)(
this
.Width * scaleFactor.Width);
this
.Height = (
int
)(
this
.Height * scaleFactor.Height);
base
.Scale(scaleFactor);
}
}
}
为新命令定义新的打印机接口方法:
using
System;
using
System.Drawing;
namespace
Resco.Printer
{
public
interface
IPrinter : IDisposable
{
void
PrintRectangle(
int
x,
int
y,
int
width,
int
height,
int
thickness);
}
}
在PrinterZebra类中实现新命令方法:
public
void
PrintRectangle(
int
x,
int
y,
int
width,
int
height,
int
thickness)
{
//
BOX {x0} {y0} {x1} {y1} {width}
m_toolsUtil.SendCommand(
String
.Format(
"
BOX {0} {1} {2} {3} {4}"
+ NL, x,
m_yOffset + y, x + width, m_yOffset + y + height, thickness));
}
这是如何在XML中使用矩形的例子:
<panel Height =
"
100"
>
<rectangle X=
"
0"
Y=
"
0"
Width=
"
400"
Height=
"
100"
Thickness=
"
2"
/>
</
panel
>
开发者可以以类似的方式定义更复杂的对象。