欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[转]用iText导出条形码图片(包含条形码)

程序员文章站 2022-03-16 15:13:29
...

用iText可导出条形码图片,但在图片中是不包含条形码的,只有在PDF中才有createImageWithBarcode这个方法,下面的代码是对导出的图片进行处理,将条形码加入到图片中,具体代码如下:

 

 

	private static final int HEIGHT_SPACE = 20;// 图片之间的间隔

	public static void main(String[] args) throws Exception {
		List<String> codeList = new ArrayList<String>();
		codeList.add("ABCD124645765");
		codeList.add("ABCD12-4645-765");
		codeList.add("ABCD12464-5765");
		codeList.add("AB-CD1-246457-65");
		createBarcodeImage(200, 100, codeList);
		System.out.println("The image is created.");
	}

	/**
	 * Creates the barcode image.
	 * 
	 * @param barCodeWidth
	 *            生成条形码的宽度
	 * @param barCodeHeight
	 *            生成条形码的高度
	 * @param codeList
	 *            要生成条形码的字符集合
	 * 
	 * @throws Exception
	 *             the exception
	 */
	public static void createBarcodeImage(int barCodeWidth, int barCodeHeight,
			List<String> codeList) throws Exception {
		// list不能为空
		Assert.assertTrue("The list can not empty.", codeList.size() > 0);
		// 图片宽度
		int imageWidth = (barCodeWidth + barCodeWidth / 2) * codeList.size() + barCodeWidth / 2;
		// 图片高度
		int imageHeight = barCodeHeight + HEIGHT_SPACE * 2;
		BufferedImage img = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
		Graphics2D g = (Graphics2D) img.getGraphics();
		g.fillRect(0, 0, imageWidth, imageHeight);
		Font font = new java.awt.Font("", java.awt.Font.PLAIN, 12);
		Barcode128 barcode128 = new Barcode128();
		FontRenderContext fontRenderContext = g.getFontRenderContext();
		// 条形码(文字)的高度
		int stringHeight = (int) font.getStringBounds("", fontRenderContext).getHeight();
		// 图片横坐标开始位置
		int startX = barCodeWidth / 2;
		// 图片纵坐标开始位置
		int imageStartY = (imageHeight - barCodeHeight - stringHeight) / 2;
		int stringStartY = imageStartY * 2 + barCodeHeight;// 条形码(文字)开始位置
		for (String code : codeList) {
			int codeWidth = (int) font.getStringBounds(code, fontRenderContext).getWidth();
			barcode128.setCode(code);
			Image codeImg = barcode128.createAwtImage(Color.black, Color.white);
			g.drawImage(codeImg, startX, imageStartY, barCodeWidth, barCodeHeight, Color.white, null);
			// 为图片添加条形码(文字),位置为条形码图片的下部居中
			AttributedString ats = new AttributedString(code);
			ats.addAttribute(TextAttribute.FONT, font, 0, code.length());
			AttributedCharacterIterator iter = ats.getIterator();
			// 设置条形码(文字)的颜色为蓝色
			g.setColor(Color.BLUE);
			// 绘制条形码(文字)
			g.drawString(iter, startX + (barCodeWidth - codeWidth) / 2, stringStartY);
			// 更改图片横坐标开始位置,图片之间的空隙为条形码的宽度的一半
			startX = startX + barCodeWidth / 2 + barCodeWidth;
		}
		g.dispose();
		OutputStream os = new BufferedOutputStream(new FileOutputStream("/home/admin/codeList.png"));
		ImageIO.write(img, "PNG", os);
	}
相关标签: OS