我尝试打印到zebra打印机。 Zebra在C#中为我提供了标准代码示例 他们使用端口9100连接到打印机
System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
client.Connect("127.0.0.1", 9100);
然而,每次运行此代码时都会崩溃,因为没有可用的端口号 我也使用了telnet 127.0.01 9100,确认没有收听9100 我也试过一些Zebra打印机使用的端口6101也没有成功。
我可以在dos命令中运行
print /D:\\127.0.0.1\KR403 d:\print.txt
这会打印,并证明它以某种方式监听网络 内部。该设备是USB打印机,这使得设置静态端口ID变得复杂。也许奇怪的是上面的命令确实打印条码,但没有剪纸;当我使用记事本打印(我假设不使用网络打印)然后它切纸但纸张长40厘米(通向大)...所以我在司机战斗它接缝。
我希望做的是使用C#发送打印命令并使用ZPL命令进行打印 微软写了一篇关于原始打印的文章,但它在这台打印机上失败了。
我想要做的就是将ZPL指令发送到此打印机。 Aslo尝试过通用的txt驱动程序,这适用于记事本,但不适用于C#
使用的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
// print /D:\\127.0.0.1\KR403 d:\print.txt
namespace PrinterTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// Printer IP Address and communication port
string ipAddress = @"192.168.2.109";
int port = 6101; // 9100;//
// ZPL Command(s)
string ZPLString =
"^XA" +
"^FO50,50" +
"^A0N50,50" +
"^FDHello, World!^FS" +
"^XZ";
try
{
// Open connection
System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
//client.Connect(ipAddress, port);
client.Connect(ipAddress, port);
// string tmp = "\\127.0.0.1\KR403";
// client.Connect(@"\\localhost",9100);
// Write ZPL String to connection
System.IO.StreamWriter writer = new System.IO.StreamWriter(client.GetStream());
writer.Write(ZPLString);
writer.Flush();
// Close Connection
writer.Close();
client.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error");
}
}
}
}
答案 0 :(得分:1)
您无法使用TcpClient
连接USB等本地连接设备。 TcpClient适用于网络设备。如果您将打印机放在网络上,则可以使用TcpClient
。
答案 1 :(得分:1)
好好经过一些精神崩溃(不是在那里开玩笑) 因为我一直在努力让这台打印机工作。 我终于设法使用RawPrinterHelper打印到这台打印机, 而且我也修复了那个助手的小虫子。
我很高兴分享它,但不知道如何分享一个小型的Visual Studio 10项目 如果有人知道如何做到这一点,我发布它。
我的代码现在可以打印到本地USB打印机而且没有对话框/我可以剪纸。
(请评论我如何发布prj)
答案 2 :(得分:0)
解决这些问题的方法是共享USB打印机,然后使用net use命令将LTP端口映射到资源
NET USE LPT1: \\[computer_ip]\[printer_sharname] /PERSISTENT:YES
然后使用您的应用程序,您可以将字符串直接写入LTP1端口,然后打印。
答案 3 :(得分:0)
这种语言本身也是一种不太合适的东西。 你需要考虑缓冲区状态处理错误代码,打印机停止响应,你需要一些人进行实时检查 - 等等。
因此,如果您可以使用Windows驱动程序,并且您的打印机并不重要,那么请编写您自己的原始驱动程序,并学习理解所有二进制错误代码,并记住即使是大名称的打印机仍然会卡住很容易,所以对我来说,如果我有选择的话,我会说放弃这台打印机,或者为一个有几个梦魇的大项目做好准备。如果你必须从头开始,它会花费你几周的时间。