目的は, バーコードを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 件のコメント:
コメントを投稿