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フォーマットで出力しているだけですね。
後は携帯関連の強化かな〜(・∀・)