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