Printing 斑马打印机-在最后一页上剪切

Printing 斑马打印机-在最后一页上剪切,printing,zebra-printers,zpl,Printing,Zebra Printers,Zpl,我有一个Zebra ZT610,我想打印一个pdf格式的标签,包含多页,然后在最后一页进行剪切。我尝试过使用延迟剪切模式并发送~JK命令,但我正在使用一个自行编写的java应用程序来调用打印。我还尝试在每次分页符之前将字符串“${^XB}$”添加到PDF文档中(最后一个除外),并使用驱动程序中的pass-through设置来禁止cut命令,但这似乎也不起作用,因为java打印作业正在将此类文本呈现为图像 我试过官方的Zebra驱动程序,也试过使用NiceLabel Zebra驱动程序,希望他们在

我有一个Zebra ZT610,我想打印一个pdf格式的标签,包含多页,然后在最后一页进行剪切。我尝试过使用延迟剪切模式并发送~JK命令,但我正在使用一个自行编写的java应用程序来调用打印。我还尝试在每次分页符之前将字符串“${^XB}$”添加到PDF文档中(最后一个除外),并使用驱动程序中的pass-through设置来禁止cut命令,但这似乎也不起作用,因为java打印作业正在将此类文本呈现为图像


我试过官方的Zebra驱动程序,也试过使用NiceLabel Zebra驱动程序,希望他们在设置中有更多的“自定义命令”选项,但还没有发现任何问题。

在我们遇到同样的问题几个星期后,无论是供应商、谷歌还是Zebra自己的支持部门都没有提出完整的解决方案,对于这个(显然很常见的)斑马切割器问题/问题,我们已经制定了以下简单的5步解决方案:

第1步: 在设置中将切割机模式设置为断开。 这将禁用每一页后的自动剪切

步骤2:转到设置对话框中的客户命令(允许ZPL编码)

步骤3:将第一个下拉菜单设置为
“文档”

步骤4:将开始部分设置为
“TEXT”
并粘贴

 ^XA^MMD^XZ^XA^JUS^XZ
˜JK˜PS
MMD
启用暂停模式。
JK
命令仅在暂停模式下可用,许多Zebra打印机不支持更简单的命令
CN
(立即剪切)。
JUS
将设置保存到打印机

步骤5:将结束部分设置为
“分析文本”
并粘贴

 ^XA^MMD^XZ^XA^JUS^XZ
˜JK˜PS
JK
将剪切命令设置为文档末尾,
PS
禁用暂停模式(并因此立即开始打印)。当所有内容都如上所述时,点击
“应用”
,Zebra打印机将在您发送给它的每个文档结束后自动剪切。您只需使用苏门答腊或任何您喜欢的方式发送PDF。切割机处理现在由打印机设置自动完成


或者,如果要执行此程序,请在ZPL代码的相应位置使用开始和结束代码。请注意,
~CMDs
不能与
^CMDs
一起发送,这就是为什么没有XA…XZ块来重置任何设置的原因(在这种情况下,这是不必要的,因为它只影响打印会话,并且
PS
将暂停模式重新关闭).

在我们遇到同样的问题几个星期后,无论是供应商、谷歌还是Zebra自己的支持部门都没有提出一个完整的解决方案,我们已经为这个(显然很常见的)Zebra Cutter问题/问题制定了以下简单的5步解决方案:

第1步: 在设置中将切割机模式设置为断开。 这将禁用每一页后的自动剪切

步骤2:转到设置对话框中的客户命令(允许ZPL编码)

步骤3:将第一个下拉菜单设置为
“文档”

步骤4:将开始部分设置为
“TEXT”
并粘贴

 ^XA^MMD^XZ^XA^JUS^XZ
˜JK˜PS
MMD
启用暂停模式。
JK
命令仅在暂停模式下可用,许多Zebra打印机不支持更简单的命令
CN
(立即剪切)。
JUS
将设置保存到打印机

步骤5:将结束部分设置为
“分析文本”
并粘贴

 ^XA^MMD^XZ^XA^JUS^XZ
˜JK˜PS
JK
将剪切命令设置为文档末尾,
PS
禁用暂停模式(并因此立即开始打印)。当所有内容都如上所述时,点击
“应用”
,Zebra打印机将在您发送给它的每个文档结束后自动剪切。您只需使用苏门答腊或任何您喜欢的方式发送PDF。切割机处理现在由打印机设置自动完成


或者,如果要执行此程序,请在ZPL代码的相应位置使用开始和结束代码。请注意,
~CMDs
不能与
^CMDs
一起发送,这就是为什么没有XA…XZ块来重置任何设置的原因(在这种情况下,这是不必要的,因为它只影响打印会话,并且
PS
将暂停模式重新关闭)。

我有类似的问题,但由于打印服务器已关闭,我无法使用Windows驱动程序和实用程序(设置对话框)。因此,基本上,我做了以下工作:

  • 在打印机上,设置
    Cutter
    模式。这将在每次打印标签后进行剪切
  • 在我的Java代码中,多亏了lib,打开PDF,并为每个页面将其呈现为单色
    buffereImage
    ,从中获取字节数组,并获取其十六进制表示形式
  • 编写一些ZPL命令以下载十六进制作为图形数据,并将
    ^XB
    命令添加到
    ^XZ
    命令之前,以防止此处出现剪切(最后一页除外),从而仅在文档末尾出现剪切
  • 将生成的ZPL代码发送到打印机。在我的例子中,我通过IPP将其作为原始文档发送,使用
    application/vnd.cups raw
    作为mime类型,这要感谢伟大的lib,但也可以使用带有字节的Java原生打印API
  • 下面是一段Java代码,用于演示:

    public void printPdfStream(InputStream pdfStream) throws IOException {
        try (PDDocument pdDocument = PDDocument.load(pdfStream)) {
            PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);
            StringBuilder builder = new StringBuilder();
    
            for (int pageIndex = 0; pageIndex < pdDocument.getNumberOfPages(); pageIndex++) {
                boolean isLastPage = pageIndex == pdDocument.getNumberOfPages() - 1;
    
                BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(pageIndex, 300, ImageType.BINARY);
                byte[] data = ((DataBufferByte) bufferedImage.getData().getDataBuffer()).getData();
                int length = data.length;
    
                // Invert bytes
                for (int i = 0; i < length; i++) {
                    data[i] ^= 0xFF;
                }
    
                builder.append("~DGR:label,").append(length).append(",").append(length / bufferedImage.getHeight())
                    .append(",").append(Hex.getString(data));
                builder.append("^XA");
                builder.append("^FO0,0");
                builder.append("^XGR:label,1,1");
                builder.append("^FS");
                if (!isLastPage) {
                    builder.append("^XB");
                }
                builder.append("^XZ");
            }
    
            IppPrinter ippPrinter = new IppPrinter("ipp://printserver/printers/myprinter");
            ippPrinter.printJob(new ByteArrayInputStream(builder.toString().getBytes()),
                documentFormat("application/vnd.cups-raw"));
        }
    }
    
    public void printPdfStream(InputStream pdfStream)引发IOException{
    try(PDDocument PDDocument=PDDocument.load(pdfStream)){
    PDFRenderer PDFRenderer=新的PDFRenderer(pdDocument);
    StringBuilder=新的StringBuilder();
    对于(int pageIndex=0;pageIndex