2016-05-25 4 views
1

Я пытаюсь распечатать изображение на принтере zebra (LP-2844-Z) с использованием zpl-языка. В ZPL documentaion говорится, что вам нужно преобразовать изображение в ASCII HexaDecimal. Затем, используя команду GF, вы можете печатать изображение. Я попытался ниже код, чтобы получить изображение и преобразовать его в гекса десятичнойПечать изображений с помощью принтера zebra с использованием команды zpl

URL oracle = new URL(urlString); 
URLConnection yc = oracle.openConnection(); 
BufferedImage bufferedImage = ImageIO.read(yc.getInputStream()); 
int rowsData = bufferedImage.getWidth()/8; 
System.out.println(rowsData); 
byte[] pixel = ((DataBufferByte)bufferedImage.getRaster().getDataBuffer()).getData(); 
System.out.println(pixel.length); 
System.out.println(Hex.encodeHex(pixel, false)); 

А потом я пытался напечатать эти данные с помощью зебры принтера, но не печатает правильное изображение. Я попробовал другой код для получения байтов изображения и преобразовал его в шестнадцатеричный десятичный

URL oracle = new URL(urlString); 
URLConnection yc = oracle.openConnection(); 
InputStream inputStream = yc.getInputStream(); 
byte[] imageData = IOUtils.toByteArray(inputStream); 
System.out.println(Hex.encodeHex(pixel, false)); 

Тем не менее я не могу напечатать правильное изображение. Я следую следующему URL (http://labelary.com/viewer.html) и пытался увидеть код при загрузке изображения. Я обнаружил, что после загрузки изображения base64, созданный zebra viewer, совершенно другой, который я сгенерировал с использованием вышеуказанного кода. Я просматриваю несколько сообщений в stackoverflow, но все же я не могу решить эту проблему.

Я знаю, где я совершаю ошибку, но я не знаю, как ее решить. На самом деле я не могу сгенерировать ASCII Hex Base64 код для данного изображения. Это моя мысль.

Любая помощь предоставляется.

Спасибо,

+0

Вы можете взглянуть на [zebra-toolkit] (https://github.com/diegoCath/zebra-toolkit). Это в Objective-C, но его довольно легко прочитать. В файле UIImage + HexRepresentation.m вы увидите метод для создания строкового представления zpl ascii-hex заданного изображения. – Diego

ответ

0

Дают эту функцию попробовать:

private static String zplEncode(String graphicFileLocation) { 
    Path imagePath = Paths.get(URI.create("file://" + graphicFileLocation)); 
    String returnResults = ""; 
    try { 
    byte[] binaryData = Files.readAllBytes(imagePath); 
    for (byte b : binaryData) 
    { 
     String hexRep = String.format("{0:X}", b); 
     if (hexRep.length() == 1) 
      hexRep = "0" + hexRep; 
     returnResults += hexRep; 
     } 
    } catch (IOException ex) { 
     // Do something here 
    } 
    return returnResults; 
} 

Я основывался на this answer from 2012.