Зебра выравнивание текста по центру

Я пытаюсь выровнять как по горизонтали, так и по вертикали мой ZebraText, добавленный на ZebraLabel, у меня есть начальное сообщение с разделителями \nи затем у меня есть этот метод, чтобы напечатать его на моем ZT410, попытался выровнять его как можно по центру, но я не могу получить его

 public void printMessage(String message) throws ZebraPrintException, IOException {
    ZebraLabel zebraLabel = new ZebraLabel(767, 1181); // Ancho x alto en puntos     
    zebraLabel.setDefaultZebraFont(ZebraFont.ZEBRA_ZERO);
    Font f = new Font("Arial", Font.PLAIN, 14);
    BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
    FontMetrics fm = img.getGraphics().getFontMetrics(f);
    //Technically correct, but not visually
    int posLin = (zebraLabel.getHeightDots()) / 2;
    //int posLin = (zebraLabel.getHeightDots() - fm.getHeight()) / 2 + fm.getAscent();
    //int posLin = (zebraLabel.getHeightDots() - message.split("\n").length * ZplUtils.extractDotsFromFont(ZebraFont.ZEBRA_ZERO, 14, ZebraPPP.DPI_300)[0]) / 2;    
    //int convertWidth = ZplUtils.extractDotsFromFont(ZebraFont.ZEBRA_ZERO, 14, ZebraPPP.DPI_300)[1];
    for (String lin : message.split("\n")) {
        if (message.split("\n").length != 1) {
            if (!message.split("\n")[message.split("\n").length - 1].equals(lin)) {
                posLin -= (fm.getStringBounds(lin, img.getGraphics()).getHeight() + 100) / 2;
            } else {
                posLin -= (fm.getStringBounds(lin, img.getGraphics()).getHeight()) / 2;
            }
        } else {
            posLin -= (fm.getStringBounds(lin, img.getGraphics()).getHeight()) / 2 + 200;
        }

    }
    for (String lin : message.split("\n")) {
        int width = fm.stringWidth(lin);
        //Technically correct, but not visually
        //zebraLabel.addElement(new ZebraText(posLin, (zebraLabel.getWidthDots()- width)  / 2, lin, ZebraFont.ZEBRA_ZERO, 14, ZebraRotation.ROTATE_90)); 
        zebraLabel.addElement(new ZebraText(posLin, zebraLabel.getWidthDots() / 2 - width, lin, ZebraFont.ZEBRA_ZERO, 14, ZebraRotation.ROTATE_90));
        posLin -= 100;
    }
    String zpl = zebraLabel.getZplCode();
    ZebraUtils.printZpl(zebraLabel, printerIp, printerPort);
    //BufferedImage image = zebraLabel.getImagePreview();
    //ImageIO.write(image, "png", new File("zpl.png"));

}

Я прокомментировал строки, которые я пробовал и не работал

1 ответ

Нет команды ZPL для центрирования текста по вертикали. Вы можете попробовать кучу математики, чтобы приблизиться, но это было бы неправильно с несколькими строками.

Горизонтально используйте блок поля ^FB Команда; Параметр D является обоснованием, установленным на C для центра

Другие вопросы по тегам