目的は, バーコードをPDF に入れて印刷することです。iText ってバーコードをPDFにする機能があるんですよ
ちなみにiTextで扱っている種類は, com.itextpdf.text.* にいろいろあるようです。
(Barcode128, Barcode39, BarcodeCodabar, BarcodeEAN, BarcodeEANSUPP, BarcodeInter25, BarcodePostnet)
バーコードの選択には sensor.co.jp が便利。
用途によって使い分ける必要がありますが, CODE128はかなりの文字体系をカバーしている模様。
さっそくコードにまいりましょう。
必要なライブラリ itextpdf-5.4.1.jar バーコードならこれだけで十分です
package com.atmarkplant.samples.itext; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.UUID; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.Barcode128; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfWriter; public class BarcodeSample { public void createPdf(String filename ) throws IOException, DocumentException, FileNotFoundException { // Document settings Document document = new Document(PageSize.A4, 25,25,25,25); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename)); document.open(); PdfContentByte cb = writer.getDirectContent(); Barcode128 code128 = new Barcode128(); code128.setCode(UUID.randomUUID().toString()); document.add(code128.createImageWithBarcode(cb, null, null)); document.close(); } }
コードです重要なのは, 太字のところです。PDFにImageとして貼り付けています。
このサンプルでは, ランダムUUID を作って, それをバーコードにしてみました。
こんな感じになりました。UUID は, 32桁 + - なので結構長いです。
では複数生成したらどうなるのでしょう。
-> 下へどんどん追加されます。 1列に複数のバーコードを貼りたい場合はどうすればよいのでしょうか。
解決策は2つあります
1. 座標を指定してバーコードをはりつける
2. テーブルを作成してそこへはりつける
おすすめは圧倒的に2です。 1だとバーコードの大きさを綿密に計算しないといけないのと, 他の要素の座標をいちいち計算するのが面倒です
では早速サンプルを, テーブルの線は邪魔なので抜いておきました。
public void createTablePdf(String filename, int num ) throws IOException, DocumentException, FileNotFoundException { // Document settings Document document = new Document(PageSize.A4, 25,25,25,25); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename)); document.open(); PdfContentByte cb = writer.getDirectContent(); // Prepare table float[] columnDefinitionSize = { 50.0f, 50.0f }; PdfPTable table = new PdfPTable(columnDefinitionSize); for ( int i=0; i < num; i++ ) { Barcode128 code128 = new Barcode128(); code128.setCode(UUID.randomUUID().toString()); Image barcode = code128.createImageWithBarcode(cb, null, null); Chunk chunk = new Chunk(barcode,0,0); PdfPCell cell = new PdfPCell(); cell.addElement(chunk); cell.setBorder(Rectangle.NO_BORDER); table.addCell(cell); } document.add(table); document.close(); }
これで num 個作成できます。テーブルの各列に2つずつ表示されます。ポイントそうですね。Barcode をChunk に張り付けているところでしょうか。
0 件のコメント:
コメントを投稿