当前位置: 首页 > 知识库问答 >
问题:

斑马标签打印机c#SDK

宦兴朝
2023-03-14

我们刚从brother标签打印机转移到zebra,c的brother sdk有点像meh,但它实现了我想要的功能。基本上,它让我可以选择在设计器中创建一个标签,并将参考名称附加到文本文件、条形码文件等。然而,看看zebra,我似乎找不到这样做的方法。我不喜欢这样一个事实,即你必须使用他们的设计器设计标签,而他们的设计器没有这个功能,或者用c语言百分之百地设计标签,这阻止了我们的设计器以后重新设计标签,也就是硬编码标签是不可能的。

我一直在看neodynamic的thermallabel,但这个小东西的成本太高了。

我错过了什么解决方案吗?大量的谷歌搜索,甚至试图弄清楚如何通过c#将现有的兄弟标签打印到zebra打印机。这是可能的(也许),因为p-touch可以做到这一点,但我也认为sdk缺乏这个功能,这使得它无论如何都不可能。

在查看兄弟sdk的更多选项后,我注意到我可以将标签作为bmp,可以轻松打印到斑马标签打印机吗?

共有2个答案

柴昆杰
2023-03-14

您可以将ZPL代码保存到一个简单的文本文件中,然后使用shell命令在LPT1上移动它。

如果您的zebra是通过网络插入的,最简单的方法/解决方法是使用“NET use lpt1:\[ip][zebra]/persistent:yes

您可以使用Zebra Designer使用“打印到文件功能”轻松为您生成ZPL

况繁
2023-03-14

当我找到它时,我会添加源链接,但现在我是这样打印到我们的Zebra的:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public class DOCINFOA
        {
            [MarshalAs(UnmanagedType.LPStr)]
            public string pDocName;
            [MarshalAs(UnmanagedType.LPStr)]
            public string pOutputFile;
            [MarshalAs(UnmanagedType.LPStr)]
            public string pDataType;
        }
        [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);

        [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool ClosePrinter(IntPtr hPrinter);

        [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool StartDocPrinter(IntPtr hPrinter, Int32 level, [In, MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);

        [DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool EndDocPrinter(IntPtr hPrinter);

        [DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool StartPagePrinter(IntPtr hPrinter);

        [DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool EndPagePrinter(IntPtr hPrinter);

        [DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, out Int32 dwWritten);


public static bool SendStringToPrinter(String printerName, String dataString)
        {
            int dwCount = (dataString.Length + 1) * Marshal.SystemMaxDBCSCharSize;

            // Assume that the printer is expecting ANSI text, and then convert
            // the string to ANSI text.
            IntPtr pBytes = Marshal.StringToCoTaskMemAnsi(dataString);
            // Send the converted ANSI string to the printer.
            SendPBytesToPrinter(printerName, pBytes, dwCount);
            Marshal.FreeCoTaskMem(pBytes);
            return true;
        }


        public static bool SendPBytesToPrinter(String szPrinterName, IntPtr pBytes, Int32 dwCount)
        {
            Int32 dwError = 0, dwWritten = 0;
            IntPtr hPrinter = new IntPtr(0);
            DOCINFOA di = new DOCINFOA();
            bool bSuccess = false; // Assume failure unless you specifically succeed.
            di.pDocName = "My C#.NET RAW Document";
            di.pDataType = "RAW";

            // Open the printer.
            if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
            {
                // Start a document.
                if (StartDocPrinter(hPrinter, 1, di))
                {
                    // Start a page.
                    if (StartPagePrinter(hPrinter))
                    {
                        // Write your bytes.
                        bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
                        EndPagePrinter(hPrinter);
                    }
                    EndDocPrinter(hPrinter);
                }
                ClosePrinter(hPrinter);
            }

            if (bSuccess == false)
            {
                dwError = Marshal.GetLastWin32Error();
                //TODO: log error code
            }
            return bSuccess;
        }

其中,dataString是打印机解释的ZPL。

 类似资料:
  • 使用JasperReport生成图像,然后尝试在Zebra打印机GC420T上打印该图像。生成图像但不打印。我已经重新检查了连接和端口。我读过这个SO链接和校准一个,但没有工作。 代码: 我阅读了EPL 2手册,并将图像转换为二进制图形数据,以便立即打印。 代码: 在将图像转换成二进制图形数据后,它就不打印数据了。 如何让打印机打印图像?

  • 我正在使用Zebra iMZ320打印机、windows mobile设备、CPCL和vb.net。 我试图让代码加载位图图像,然后使用CPCL打印它 我有一段类似于下面的代码,可以毫无问题地工作。我一定错过了一些显而易见的东西,但就我的一生而言,我看不到它。 我的问题是打印机只会打印出HEX而不是图像!以前有人遇到过这个吗?你能帮忙吗? 公共子绘制位图(ByVal xPosition为整数,By

  • 我在标签打印机上打印时遇到了问题。下面的代码在一个上打印4个“标签”(附标签图片)。 下面的代码打印到兄弟QL-500标签打印机上。它打印到3.5"乘1.1"标签上。 如果有人能帮我更好地理解代码,那也太好了。 下面是它打印的内容:

  • 我有打印机驱动程序、P-touch编辑器、b-PAC 3.1和客户端工具,都是64位的,从Brother网站下载并安装在我的64位Windows 7笔记本电脑上。P-touch编辑器工作/打印良好。 然而,b-PAC失败,所有样本均无效。我调试了代码: 其中,

  • 我正在开发一个必须打印标签的应用程序。我使用的标签打印机是Brother QL-570。标签宽度是66mm,标签长度需要大约45mm。我遇到的问题是,我无法配置应用程序以实际打印标签。每次这样做时,我都会收到一条警告,说明文档大小对于打印机来说太大。无论我尝试将打印文档的大小更改为什么大小,我总是收到一条警告,说明文档为90mm x 29mm,对于标签打印机来说太大了。 以下是我的一个尝试: 有人

  • 我想从web浏览器的Brother标签打印机打印标签。我知道DYMO有一个JavaScript框架,可以使从浏览器打印变得简单。但我有一个兄弟标签打印机的客户,所以我需要使它工作。 我一直在做一些测试和搜索,令人惊讶的是,关于这个主题的信息如此之少。 到目前为止,我唯一成功使用的浏览器是谷歌Chrome,因为它似乎不打印页眉和页脚。我已经安装了打印机/驱动程序,并创建了尺寸为62 x 29mm的自