Printing 斑马打印机-在最后一页上剪切
我有一个Zebra ZT610,我想打印一个pdf格式的标签,包含多页,然后在最后一页进行剪切。我尝试过使用延迟剪切模式并发送~JK命令,但我正在使用一个自行编写的java应用程序来调用打印。我还尝试在每次分页符之前将字符串“${^XB}$”添加到PDF文档中(最后一个除外),并使用驱动程序中的pass-through设置来禁止cut命令,但这似乎也不起作用,因为java打印作业正在将此类文本呈现为图像Printing 斑马打印机-在最后一页上剪切,printing,zebra-printers,zpl,Printing,Zebra Printers,Zpl,我有一个Zebra ZT610,我想打印一个pdf格式的标签,包含多页,然后在最后一页进行剪切。我尝试过使用延迟剪切模式并发送~JK命令,但我正在使用一个自行编写的java应用程序来调用打印。我还尝试在每次分页符之前将字符串“${^XB}$”添加到PDF文档中(最后一个除外),并使用驱动程序中的pass-through设置来禁止cut命令,但这似乎也不起作用,因为java打印作业正在将此类文本呈现为图像 我试过官方的Zebra驱动程序,也试过使用NiceLabel Zebra驱动程序,希望他们在
我试过官方的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
模式。这将在每次打印标签后进行剪切buffereImage
,从中获取字节数组,并获取其十六进制表示形式^XB
命令添加到^XZ
命令之前,以防止此处出现剪切(最后一页除外),从而仅在文档末尾出现剪切application/vnd.cups raw
作为mime类型,这要感谢伟大的lib,但也可以使用带有字节的Java原生打印APIpublic 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