Зебра выравнивание текста по центру - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь выровнять как по горизонтали, так и по вертикали мой 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 Ответ

0 голосов
/ 02 мая 2018

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

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

...