iTextを使ってバーコードをWebに画像として表示

ん?、QRだけじゃなくて、JANコードとかも使うんだ。
でもバーコードのライブラリとかって商用のものが多いのよね(・ω・)


そういえばiTextってバーコードが扱えたけど、それって使えないのかしら?、っと思い、試してみまスタ。
こげなカンジ(・∀・)

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletOutputStream;

import com.lowagie.text.pdf.Barcode;
import com.lowagie.text.pdf.BarcodeEAN;

class BarcodeOutput {

    public void ean13(HttpServletRequest request, String code) {
    
        request.setContentType( "image/png" );
    
        BarcodeEAN barcode = new BarcodeEAN();
        barcode.setCodeType( Barcode.EAN13 );
        barcode.setCode( code );
    
        ServletOutputStream out = null;
        try {
            out = request.getOutputStream();
            BufferedImage image =
                ImageUtil.toBufferedImage(
                    barcode.createAwtImage( Color.black, Color.white ) );
            ImageIO.write( image, "png", out );
        } catch(IOException e) {
        } finally {
            if ( out == null ) {
                try {
                    out.close();
                } catch(IOException e1) {
                }
            }
        }
    }
}
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.PixelGrabber;
import java.awt.image.WritableRaster;
import java.util.Hashtable;

public class ImageUtil {

    public static BufferedImage toBufferedImage(Image image) {

        PixelGrabber pixelGrabber = new PixelGrabber( image, 0, 0, -1, -1, false );
        try {
            pixelGrabber.grabPixels();
        } catch(InterruptedException e) {
            return null;
        }
        ColorModel colorModel = pixelGrabber.getColorModel();
        WritableRaster raster = colorModel.createCompatibleWritableRaster( pixelGrabber.getWidth(), pixelGrabber.getHeight() );
        BufferedImage bufferdImage = new BufferedImage( colorModel, raster, colorModel.isAlphaPremultiplied(), new Hashtable<Object, Object>() );
        bufferdImage.getRaster().setDataElements( 0, 0, pixelGrabber.getWidth(), pixelGrabber.getHeight(), pixelGrabber.getPixels() );

        return bufferdImage;
    }
}

とりあえず出力はできましたヽ(゜ワ゜*)ノ
iTextのBarcodeクラスからjava.awt.Imageを作れるので、それをBufferedImageに変換して、後はそれをPNGフォーマットで出力しているだけですね。


後は携帯関連の強化かな〜(・∀・)