在开发涉及RFID资产标签打印的应用时,尤其是在国产系统(如统信、麒麟)上,由于打印驱动适配问题,选择免驱USB调用或TCP/IP调用方式确实是一个明智的选择。
1. 免驱USB调用
对于免驱USB打印实现,可以直接与之通信而无需额外的驱动程序。在C#和Java中,可以通过操作系统提供的API来访问这些设备。
C#中:可以通过解析注册表中usb的信息进行直接建立连接,根据打印机的名称等过滤有效打印机,建立连接后,可以直接通过USB端口发送数据。
Java中:可以使用usb4java等开源库进行连接,实际使用过程中在windows下使用非法不方便,可使用C#类,通过c++转换成java可调用程序进行。
2. TCP/IP调用
TCP/IP打印通常指的是通过RJ45(如局域网)将打印任务发送到打印机。这需要打印机支持网口打印功能(如内置打印服务器)。
该部分可以使用tcp/ip的socket连接方式直接连接发送要打印的指令信息进行。
3. 图形绘制与单位转换
C#中:使用Graphics类进行绘制时,确实需要注意单位转换。C#中默认使用设备无关单位(通常为1/96英寸),因此需要将其转换为毫米或打印机支持的单位。可以使用Graphics.DpiX和Graphics.DpiY属性来获取当前分辨率,然后进行转换。
Java中:在Java中,字体和图形的默认单位是用户空间单位(通常基于72 DPI)。使用Graphics2D类进行绘制时,可以使用Graphics2D.scale()方法来调整绘图的比例,或者使用AffineTransform来更准确地控制坐标变换。同样,需要将用户空间单位转换为毫米或其他实际打印单位。
4. 跨平台解决方案
Java由于其跨平台的特性,是开发跨平台打印应用的理想选择。但如果需要在Windows上利用特定于平台的特性(如某些打印功能),则可能需要结合C#或C++等语言。
C#可以直接开发简单便捷的windows使用程序。直接转换,运行程序占用内存小等优点。在跨平台中使用Java,优势更加明显。
参考:首码打印控件、Zxing、国产操作系统、usb4java、javafx canvas等。