sunky045 发表于 2013-1-15 02:39:53

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

用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);}
页: [1]
查看完整版本: [转]用iText导出条形码图片(包含条形码)