2011年11月8日火曜日

iTextでバーコードを作ってみる

バーコードの画像を作りたい


どうも。
いち、プログラマのyu1rowです。
Javaでバーコードを作るのに手っ取り早い方法を探してみたんですが、iTextでうまくいきましたので、備忘録を残します。

PNGファイルに保存するサンプルソース


今回使用したiTextのバージョンは2.1.7です。
ちょっと長いのでソースを折りたたんでます。
package com.yu1row.blog;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.imageio.ImageIO;

import com.lowagie.text.pdf.Barcode;
import com.lowagie.text.pdf.Barcode128;
import com.lowagie.text.pdf.Barcode39;
import com.lowagie.text.pdf.BarcodeCodabar;
import com.lowagie.text.pdf.BarcodeDatamatrix;
import com.lowagie.text.pdf.BarcodeEAN;
import com.lowagie.text.pdf.BarcodeInter25;
import com.lowagie.text.pdf.BarcodePDF417;
import com.lowagie.text.pdf.BarcodePostnet;

public class MakeBarcode {
 private static final Color COLOR_FORE = Color.BLACK;
 private static final Color COLOR_BACK = Color.WHITE;
 private static final String CODE_CODE128 = "yu1row.com";
 private static final String CODE_CODE39 = "YU1ROW.COM";
 private static final String CODE_CODEBAR = "A12345B";
 private static final String CODE_DATAMATRIX = "DATAMATRIX!";
 private static final String CODE_EAN = "49111111111111";
 private static final String CODE_INTER25 = "1234";
 private static final String CODE_PDF417 = "yu1row.com";
 private static final String CODE_POSTNET = "555551234";

 public static void main(String[] args) {
  make(new Barcode128(), CODE_CODE128, "CODE128.png");
  make(new Barcode39(), CODE_CODE39, "CODE39.png");
  make(new BarcodeCodabar(), CODE_CODEBAR, "CODEBAR.png");
  make(new BarcodeDatamatrix(), CODE_DATAMATRIX, "DATAMATRIX.png");
  make(new BarcodeEAN(), CODE_EAN, "EAN.png");
  make(new BarcodeInter25(), CODE_INTER25, "INTER25.png");
  make(new BarcodePDF417(), CODE_PDF417, "PDF417.png");
  make(new BarcodePostnet(), CODE_POSTNET, "POSTNET.png");
 }

 private static boolean make(Barcode barcode, String code, String fileName) {
  barcode.setCode(code);
  return writeToPngFile(barcode.createAwtImage(COLOR_FORE, COLOR_BACK), fileName);
 }

 private static boolean make(BarcodeDatamatrix barcode, String code, String fileName) {
  try {
   barcode.generate(code);
   return writeToPngFile(barcode.createAwtImage(COLOR_FORE, COLOR_BACK), fileName);
  } catch (UnsupportedEncodingException e) {
   return false;
  }
 }

 private static boolean make(BarcodePDF417 barcode, String code, String fileName) {
  barcode.setText(code);
  return writeToPngFile(barcode.createAwtImage(COLOR_FORE, COLOR_BACK), fileName);
 }

 private static boolean writeToPngFile(Image image, String fileName) {

  // ImageをBufferedImageに変換
  BufferedImage bimg = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
  Graphics g = bimg.getGraphics();
  g.drawImage(image, 0, 0, null);
  g.dispose();

  // BufferedImageをファイルに保存
  try {
   ImageIO.write(bimg, "PNG", new File(fileName));
  } catch (IOException e) {
   return false;
  }
  return true;
 }
}

日本でよく使われるのってあんまり無いですけどね。
実装が面倒な色々の手間が省けて良いと思います。

0 件のコメント:

コメントを投稿