报销单需要根据单号生成条形码
先看效果图
直接上代码,复制即可使用
public class BarCodeUtils {
private static final int DEFAULT_PICTURE_WIDTH = 300 ;
private static final int DEFAULT_PICTURE_HEIGHT = 100 ;
private static final int DEFAULT_BAR_CODE_WIDTH = 280 ;
private static final int DEFAULT_BAR_CODE_HEIGHT = 60 ;
private static final int DEFAULT_FONT_SIZE = 15 ;
private static final Map < EncodeHintType , Object > hints = new HashMap < > ( ) ;
static {
hints. put ( EncodeHintType . CHARACTER_SET , "utf-8" ) ;
}
public static BufferedImage getBarCodeImage ( String codeValue) {
return getBarCodeImage ( codeValue, DEFAULT_BAR_CODE_WIDTH , DEFAULT_BAR_CODE_HEIGHT ) ;
}
public static BufferedImage getBarCodeImage ( String codeValue, int width, int height) {
return getBarCodeImage ( codeValue, width, height, BarcodeFormat . CODE_128 ) ;
}
public static BufferedImage getBarCodeImage ( String codeValue, int width, int height, BarcodeFormat barcodeFormat) {
Writer writer;
switch ( barcodeFormat) {
case CODE_128 :
writer = new Code128Writer ( ) ;
break ;
case PDF_417 :
writer = new PDF417Writer ( ) ;
break ;
default :
writer = new Code128Writer ( ) ;
}
BitMatrix bitMatrix;
try {
bitMatrix = writer. encode ( codeValue, barcodeFormat, width, height, hints) ;
} catch ( WriterException e) {
throw new RuntimeException ( "条形码内容写入失败" ) ;
}
return MatrixToImageWriter . toBufferedImage ( bitMatrix) ;
}
public static BufferedImage getBarCodeWithWords ( String codeValue, String bottomStr) {
return getBarCodeWithWords ( codeValue, bottomStr, "" , "" ) ;
}
public static BufferedImage getBarCodeWithWords ( String codeValue,
String bottomStr,
String topLeftStr,
String topRightStr) {
return getCodeWithWords ( getBarCodeImage ( codeValue) ,
bottomStr,
topLeftStr,
topRightStr,
DEFAULT_PICTURE_WIDTH ,
DEFAULT_PICTURE_HEIGHT ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
DEFAULT_FONT_SIZE ) ;
}
public static BufferedImage getCodeWithWords ( BufferedImage codeImage,
String bottomStr,
String topLeftStr,
String topRightStr,
int pictureWidth,
int pictureHeight,
int codeOffsetX,
int codeOffsetY,
int topLeftOffsetX,
int topLeftOffsetY,
int topRightOffsetX,
int topRightOffsetY,
int fontSize) {
BufferedImage picImage = new BufferedImage ( pictureWidth, pictureHeight, BufferedImage . TYPE_INT_RGB ) ;
Graphics2D g2d = picImage. createGraphics ( ) ;
setGraphics2D ( g2d) ;
setColorWhite ( g2d, picImage. getWidth ( ) , picImage. getHeight ( ) ) ;
int codeStartX = ( pictureWidth - codeImage. getWidth ( ) ) / 2 + codeOffsetX;
int codeStartY = ( pictureHeight - codeImage. getHeight ( ) ) / 2 + codeOffsetY;
g2d. drawImage ( codeImage, codeStartX, codeStartY, codeImage. getWidth ( ) , codeImage. getHeight ( ) , null ) ;
g2d. setColor ( Color . BLACK ) ;
g2d. setFont ( new Font ( "微软雅黑" , Font . PLAIN , fontSize) ) ;
int wordAndCodeSpacing = 3 ;
if ( StringUtils . isNotEmpty ( bottomStr) ) {
int strWidth = g2d. getFontMetrics ( ) . stringWidth ( bottomStr) ;
int strStartX = codeStartX + ( codeImage. getWidth ( ) - strWidth) / 2 ;
int strStartY = codeStartY + codeImage. getHeight ( ) + fontSize + wordAndCodeSpacing;
g2d. drawString ( bottomStr, strStartX, strStartY) ;
}
if ( StringUtils . isNotEmpty ( topLeftStr) ) {
int strWidth = g2d. getFontMetrics ( ) . stringWidth ( topLeftStr) ;
int strStartX = codeStartX + topLeftOffsetX;
int strStartY = codeStartY + topLeftOffsetY - wordAndCodeSpacing;
g2d. drawString ( topLeftStr, strStartX, strStartY) ;
}
if ( StringUtils . isNotEmpty ( topRightStr) ) {
int strWidth = g2d. getFontMetrics ( ) . stringWidth ( topRightStr) ;
int strStartX = codeStartX + codeImage. getWidth ( ) - strWidth + topRightOffsetX;
int strStartY = codeStartY + topRightOffsetY - wordAndCodeSpacing;
g2d. drawString ( topRightStr, strStartX, strStartY) ;
}
g2d. dispose ( ) ;
picImage. flush ( ) ;
return picImage;
}
private static void setGraphics2D ( Graphics2D g2d) {
g2d. setRenderingHint ( RenderingHints . KEY_ANTIALIASING , RenderingHints . VALUE_ANTIALIAS_ON ) ;
g2d. setRenderingHint ( RenderingHints . KEY_STROKE_CONTROL , RenderingHints . VALUE_STROKE_DEFAULT ) ;
Stroke s = new BasicStroke ( 1 , BasicStroke . CAP_ROUND , BasicStroke . JOIN_MITER ) ;
g2d. setStroke ( s) ;
}
private static void setColorWhite ( Graphics2D g2d, int width, int height) {
g2d. setColor ( Color . WHITE ) ;
g2d. fillRect ( 0 , 0 , width, height) ;
g2d. setColor ( Color . BLACK ) ;
}
public static String bufferedImageToBase64 ( BufferedImage bufferedImage) {
ByteArrayOutputStream stream = new ByteArrayOutputStream ( ) ;
try {
ImageIO . write ( bufferedImage, "jpg" , stream) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
byte [ ] bytes = Base64 . encodeBase64 ( stream. toByteArray ( ) ) ;
String base64 = new String ( bytes) ;
return "data:image/jpeg;base64," + base64;
}
public static String generateBarCode ( String content) {
return bufferedImageToBase64 ( BarCodeUtils . getBarCodeWithWords ( content, content, "" , "" ) ) ;
}
public static void main ( String [ ] args) {
String s = generateBarCode ( "0123456789" ) ;
System . out. println ( "条形码:" + s) ;
}
}