问题描述
是否可以扩展条形码类型的createAwtImage以提供与createImageWithBarcode相同的输出(即包括下面的文本),以便可以将其直接写入图像而不是PDF?
目前,我必须使用条形码4j来执行此操作,但非常希望使用iText。
或者,也许我可以使用java.awt.Image
,在底部添加一些额外的空间,并在此额外的空间中添加文本。
我怎样才能做到这一点?
编辑:常规代码以执行此操作
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;