【问题标题】:Send Print Job To Printer Directly (TCP)将打印作业直接发送到打印机 (TCP)
【发布时间】:2018-09-27 05:09:09
【问题描述】:

我有一个要求,我需要从 Android 应用程序向打印机发送打印作业。需要打印的实际信息是非常基本的,所以没有什么特别的要求 - 真的只是文字。该应用是 Xamarin.Forms 应用。

我知道我可以使用标准的 Android 打印框架,但这不是我需要的 - 这意味着打印机需要在设备上进行预配置,也意味着打印预览屏幕总是在打印之前显示制作完成。

我一直在研究通过端口 9100 上的 TCP 套接字发送直接打印请求,但我似乎无法使其正常工作。

有没有人有一个可行的例子来说明如何做到这一点,无论是在 .Net Standard 还是 Android Native 中?

是否还有通过这种方法将打印作业发送到打印机的标准协议?

谢谢。

【问题讨论】:

  • 这可能对你有帮助 stackoverflow.com/questions/18704839/…
  • 不幸的是,这似乎不适用于我的特定品牌/型号的打印机。不过还是谢谢。
  • @MartinCrawley 1) ..would also mean the Print Preview screen is always displayed... 这绝对是错误的,预览是可选的 2) 大多数 使用端口 9100 的打印机是大多数人所说的 RAW基于/LPR,如果styx 列出的链接在您的打印机上根本不起作用,那么您的打印机需要一些设置/转义序列,您应该查阅打印机的协议文档。
  • 感谢您的回复。您能否详细说明通过 Android 打印框架进行预览是可选的吗?无论使用何种打印服务,打印机选择都会始终显示。这就是 Android 打印框架的工作原理。至于转义序列,我认为您可能是正确的。我想我可能需要通过打印机 PCL。

标签: c# android xamarin printing tcp


【解决方案1】:

试试这个:

                var ipAddress = "XXX.XXX.XXX.XXX";
                var port = 9100;
                var fle = "file.pdf";

                var data = System.IO.File.ReadAllBytes(fle);

                var client = new System.Net.Sockets.TcpClient();
                client.Connect(ipAddress, port);

                var stream = client.GetStream();
                stream.Write(data, 0, data.Length);

                client.Close();

【讨论】:

    【解决方案2】:
    public static bool SendTestPage(string target) {
        string msg = "\n" +
                    "################################\n" +
                    "\x001BE1" + //bold on
                    "This is a print test\n\n" +
                    "\x001BE0" + //bold off
                    DateTime.Now.ToLongTimeString() + "\n" +
                    DateTime.Now.ToLongDateString() + "\n" +
                    "################################\n" +
                    "\n\n\n\n\n\n\n\n" +
                    "\x1Bm\0\0"; //cut
    
        Byte[] data = Encoding.ASCII.GetBytes(msg);
    
        try {
            TcpClient client = new TcpClient();
            client.Connect(target, 9100);
    
            NetworkStream stream = client.GetStream();
            stream.Write(data, 0, data.Length);
    
            stream.Flush();
            stream.Close();
            client.Close();
    
        } catch {
            return false;
        }
    
        return true;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-06
      • 1970-01-01
      • 2016-09-12
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多