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

Zebra Android打印v2.8.2148图像打印为字符串而不是像素

云煌
2023-03-14

在我们的android应用程序中,我们可以成功地将图像打印到P4T打印机。我们使用pcx cpcl命令与其他收据文本内联打印图像。在打印收据之前,我们使用zebra sdk将图像上传到打印机内存。我们让zebra首先将我们的位图转换为ZebraImage,然后上传它。在P4T上,这会产生一个。然后我们在cpcl标签中引用的PCX文件。示例:

打印机配置:

E:signature.pcx

在android应用程序中:

static private void sendImagesToPrinter(DevicePrinter devicePrinter, List<String> imagesToSend, String rootPath) throws IOException, ConnectionException, ZebraPrinterLanguageUnknownException, ZebraIllegalArgumentException {
    for(String image:imagesToSend) {
        //[0] -> image path, <[1]> -> image scale factor
        String[] imageParams = image.split("\\|");
        double scaleFactor = imageParams.length > 1 ? parseImageScale(imageParams[1]) : 1.0d;

        File file = new File(StringUtils.pathCombine(rootPath,imageParams[0]));
        if(!file.exists())
            throw new FileNotFoundException("Image file not found " + file.getName());

        ZebraImageI zebraImage = ZebraImageFactory.getImage(BitmapFactory.decodeFile(file.getAbsolutePath()));

        devicePrinter.storeImage("E:" + file.getName(), zebraImage, (int)(zebraImage.getWidth() * scaleFactor), (int)(zebraImage.getHeight() * scaleFactor));
    }
}

public void storeImage(String printerFullPath, ZebraImageI zebraImage, int width, int height) throws ConnectionException, ZebraPrinterLanguageUnknownException, IOException, ZebraIllegalArgumentException {
    Connection connection = null;
    try {
        connection = ConnectionBuilder.build(connectionString);
        connection.open();
        ZebraPrinter printer = ZebraPrinterFactory.getInstance(connection);

        printer.storeImage(printerFullPath, zebraImage, width, height);

    }
    finally {
        if(connection != null)
            connection.close();
    }
}

cpcl格式文件:

PCX 10 280 !<signature.pcx

我们设置了一个缩放参数来管理打印机存储的图像大小。这可以在P4T打印机上很好地打印图像,但我们有一个QLn420,它可以打印图像的长字符串表示。

收据的其他文本部分通常在这些设备上打印。

有谁遇到过这个问题并知道如何解决吗?

*编辑我还尝试使用以下代码直接将斑马图像打印到打印机上。不管是哪种情况,我总是得到字符串(图像的base64表示)

public void printImage(ZebraImageI zebraImage, int width, int height) throws ConnectionException, ZebraPrinterLanguageUnknownException, ZebraIllegalArgumentException {
    Connection connection = null;
    try {
        connection = ConnectionBuilder.build(connectionString);
        connection.open();
        ZebraPrinter printer = ZebraPrinterFactory.getInstance(connection);
        printer.printImage(zebraImage, 0, 0, width, height, false);
    }
    finally {
        if(connection != null)
            connection.close();
    }
}

**在Qln420上编辑图像从未存储。我期待它在调用storeImage()后出现在“E:sigfile.pcx”上,但它从未保存。还不知道为什么。

共有1个答案

谷泳
2023-03-14

我们的修复方法是在创建用于存储图像的新打印机时显式设置打印机语言:

public void storeImage(String printerFullPath, ZebraImageI zebraImage, int width, int height, PrinterLanguage printerLanguage) throws ConnectionException, ZebraPrinterLanguageUnknownException, IOException, ZebraIllegalArgumentException {
    Connection connection = null;
    try {
        connection = ConnectionBuilder.build(connectionString);
        connection.open();

        ZebraPrinter printer = ZebraPrinterFactory.getInstance(printerLanguage, connection);

        printer.storeImage(printerFullPath, zebraImage, width, height);

    }
    finally {
        if(connection != null)
            connection.close();
    }
}

此外,我们发现删除图像的文件扩展名对一台设备很有帮助,因此我们现在在所有情况下都删除了文件扩展名。因此,对于我们来说,在P4T、QLn420和ZQ520上打印带有内联图像的CPCL格式收据是可行的。

此外,我们发现在存储之前缩放图像也是必要的,因为大型图像存储将在不引发异常的情况下失败。

    ZebraImageI zebraImage = ZebraImageFactory.getImage(BitmapFactory.decodeFile(file.getAbsolutePath()));
    double scaleFactor = (printedImageWidth == null) ? 1.0 : (double)printedImageWidth / zebraImage.getWidth();
    //strip off the extension
    String fileName = file.getName().split("\\.")[0];
    devicePrinter.storeImage(fileName, zebraImage, (int)(zebraImage.getWidth() * scaleFactor), (int)(zebraImage.getHeight() * scaleFactor), printerLanguage);
 类似资料:
  • 编辑:所以在一天的混乱之后。我的问题是spintf。我最初认为我的循环是错误的。

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

  • 问题内容: 是否有一种简单的方法可以在Go中格式化字符串而不打印字符串? 我可以: 但是我希望返回格式化的字符串而不是打印出来的字符串,以便我可以进一步处理它。 我也可以做类似的事情: 但这在格式字符串很复杂时很难阅读,而在一个或多个部分不是字符串而必须首先转换的时候(例如, 有没有更简单的方法可以做到这一点? 问题答案: Sprintf是您想要的。 例 您还可以在“ 错误”示例中看到它在使用中,

  • 问题内容: 是否可以在Internet选项的“高级”选项卡中不启用“打印背景色和图像”的情况下打印背景图像? 我认为可以使用没有“背景图像”的替代方法…使用div标签和绝对位置可以模拟背景图像的相同效果吗?我也想在页面上重复背景图像。 问题答案: 打印背景图像(在标记中指定为背景图像的那些图像)的能力完全取决于最终用户,您无法从代码中以编程方式控制此功能。Firefox的一个插件提供了JavaSc

  • 问题内容: 这肯定是一件容易的事,但这确实困扰着我。 我有一个脚本,可以读取网页并使用Beautiful Soup对其 进行解析。我从 汤中 提取所有链接,因为我的最终目标是打印出link.contents。 我要解析的所有文本都是ASCII。我知道Python将字符串视为unicode,并且我确信这非常方便,在我的wee脚本中没有用。 每次我去打印一个包含’String’的变量时,我都会被打印到

  • 大家好,我刚刚读完Android Studio中新打印系统的官方文档(https://developer.android.com/training/printing/photos.html)但我没能成功。我基本上复制粘贴了以下代码: 但是Android打印用户交互界面没有出现。 我的工作范围是设置打印机(在那里我将打印我的所有照片),一旦设置完成,我会给打印机打印位图。我将非常感谢所有回答我的人,