iText
一昨日あたりから、Javaで動的にPDFを作成するっていう要件が
あったので調査し始めたんですが、今のところ使えそうなのが
- FOP
- iText
ってところでしょうか。
FOP は会社の同僚が調査した資料があったのでそれを参考に
するとして、
iText は使ったことがないので少し実装してみました。
実装環境 [ J2SDK1.4 , eclipse3.1M4 , Tomcat4.1.27 ]
必要なライブラリー [ itext-1.3.jar , iTextAsian.jar ]
// PDFファイル生成 Document doc = new Document(); try { Random rd = new Random(); int cnt = rd.nextInt(38000); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=" + cnt + "test.pdf"); PdfWriter.getInstance(doc,response.getOutputStream()); doc.open(); BaseFont bfChinese = BaseFont.createFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED); Font fontJapan = new Font(bfChinese, 12, Font.NORMAL); String detail[] = this.getPDFDEtail((String)request.getSession().getAttribute("detail")); Paragraph tmp = new Paragraph(detail[0], fontJapan); doc.add(tmp); doc.newPage(); // 改ページ for(int i=1; i<detail.length; i++) { Paragraph p = new Paragraph(detail[i], fontJapan); doc.add(p); doc.newPage(); } } catch (FileNotFoundException e) { // FileNotFoundException e.printStackTrace(); } catch (DocumentException e) { // DocumentException e.printStackTrace(); } doc.close();
PDFに書き出す内容は、フォームに入力してもらうパターンと
指定されたファイルから読み込むパターンを両方実現出来るように
作成してみました。
iTextAsian.jarがないと日本語出力が出来ないのを小1時間ほど悩みました・・
改ページの区切り文字として「----」をKEYして改ページするような
実装にしてあります。
適当に作成したので、クソコードになってますが参考程度になるかと・・・
フォントにゴシックを指定したい場合は、
BaseFont bfChinese
= BaseFont.createFont("/WINDOWS/Fonts/MSGOTHIC.TTC","UniJIS-UCS2-H",
BaseFont.NOT_EMBEDDED);
上記の様な指定でいけるはずです(WINDOWSの場合)
今回作成した、サンプルコードのダウンロードはこちら