Можно ли получить изображение штрих кода с текстом?

Можно ли расширить createAwtImage типа штрих-кода, чтобы получить тот же вывод, что и createImageWithBarcode (т.е. включая текст ниже), чтобы его можно было записывать непосредственно в изображение, а не в PDF?

На данный момент я должен использовать barcode4j, чтобы сделать это, но очень предпочел бы использовать iText. Или, может быть, я могу взять java.awt.Image, добавьте немного дополнительного пространства внизу и добавьте текст в это дополнительное пространство. Как я могу это сделать?

отредактировано: Groovy код, чтобы сделать это

 img = barcode.createAwtImage(Color.BLACK, Color.WHITE)
 int w = barcode.getBarcodeSize().getWidth()*3
 int h = barcode.getBarcodeSize().getHeight()*3
 bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB)
 int fontSize = 20
 g2 = bi.createGraphics()
 g2.setColor(Color.WHITE)
 g2.fillRect(0,0,w,h)
 g2.drawImage(img, 0, 0, w, h-fontSize, null)
 g2.setFont(new Font('Arial', Font.PLAIN, fontSize))
 stringLen = g2.getFontMetrics().getStringBounds(fm_content, g2).getWidth()
 start = w/2 - stringLen/2
 g2.setColor(Color.BLACK)
 g2.drawString(fm_content, start.toInteger(), h-2)
 g2.dispose()
 return bi

1 ответ

Ответьте в соответствии с редактированием кода. Заполните фон, поместите штрих-код на меньшую вертикальную высоту и используйте метод изображения setFont - сначала измерьте ширину текста и начните его с половины расстояния между размером изображения и размером текста.

 img = barcode.createAwtImage(Color.BLACK, Color.WHITE);
 int w = barcode.getBarcodeSize().getWidth() * 3;
 int h = barcode.getBarcodeSize().getHeight() * 3;

 BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
 int fontSize = 20;

 Graphics2D g2 = bi.createGraphics();
 g2.setColor(Color.WHITE);
 g2.fillRect(0, 0, w, h);
 g2.drawImage(img, 0, 0, w, h - fontSize, null);

 g2.setFont(new Font('Arial', Font.PLAIN, fontSize));
 double stringLen = g2.getFontMetrics().getStringBounds(fm_content, g2).getWidth();
 double start = w / 2 - stringLen / 2;
 g2.setColor(Color.BLACK);
 g2.drawString(fm_content, (int) Math.round(start), h - 2);

 g2.dispose();

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