2012年11月26日月曜日

JavaでPDFを作成

Java PDF で検索すると
http://www.google.co.jp/search?hl=ja&rlz=1B3MOZA_ja___JP324&q=Java+PDF&aq=f&aqi=g10&aql=&oq=&gs_rfai=
説明しているサイトがたくさん出てきます

いくつかライブラリがあるようでこちらから使いやすそうなのを探します
iText
http://sourceforge.net/projects/itext/files/iText/
easyPDF
http://www.pdfonline.com/japan/downloads/easypdfsdk/demos_easypdfsdk.asp
PDFLib
http://pdflib.jp/product/download/pdflib.html
ApachePDFBox
http://pdfbox.apache.org/download.html


なんか簡単そうな iText を使ってみます
ココ参照
http://allabout.co.jp/gm/gc/80691/

今のところ最新版の iText-5.0.5.jar をダウンロード
http://sourceforge.net/projects/itext/files/iText/iText5.0.5/
あとは日本語フォントの iTextAsian.jar をダウンロード
http://itextpdf.sourceforge.net/

ダウンロードしたら外部JARとして追加します(Eclipse使ってます)

ここにあるソースをコピって少し書き換え実行
http://allabout.co.jp/gm/gc/80691/2/

import java.io.*;

import com.lowagie.text.pdf.fonts.*;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;

public class JPDF {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        FileOutputStream out = null;
        BufferedOutputStream bout = 
null;
        PdfWriter writer = 
null;
        Document doc = 
null;
        try
        {
          out = new FileOutputStream("test.pdf");
          bout = 
new BufferedOutputStream(out);
          doc = 
new Document(new Rectangle(0,0,500,500));
          writer = PdfWriter.getInstance(doc, bout);
          doc.open();
          Font kaku_24 = 
new Font(BaseFont.createFont(
              "HeiseiKakuGo-W5", "UniJIS-UCS2-H",
              BaseFont.NOT_EMBEDDED),18);
          kaku_24.setColor(CMYKColor.RED);
          doc.add(new Paragraph("これは、サンプルです。", kaku_24));
          Font mincho_12 = 
new Font(BaseFont.createFont(
              "HeiseiMin-W3", "UniJIS-UCS2-HW-H",
              BaseFont.NOT_EMBEDDED),12);
          doc.add(
new Paragraph("サンプルとして作成したPDFファイルです。", mincho_12));
          doc.add(
new Paragraph("果たして、きれいにできたでしょうか。", mincho_12));
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } 
catch (DocumentException e) {
          e.printStackTrace();
        } 
catch (IOException e) {
          e.printStackTrace();
        } finally {
          doc.close();
          System.out.println("ended...");
        }
    }
}

はい、エラーがでました
com.itextpdf.text.DocumentException: Font 'HeiseiKakuGo-W5' with 'UniJIS-UCS2-H' is not recognized.
iTextAsian.jar 内にある HeiseiKakuGo-W5 と UniJIS-UCS2-H がうまく読み込めなさそうです

バージョンが上がったことによる日本語フォントの対応がうまくいっていないのが原因みたいです

iTextAsian.jar を解凍し、
com フォルダ内の lowagie フォルダを itextpdf にリネーム
再度、jar ファイルを作成
※jar ファイルの中身は zip ファイルです。拡張子名を変更しているだけです

import com.lowagie.text.pdf.fonts.*;
    ↓

import com.itextpdf.text.pdf.fonts.*;
に変更し、実行

test.pdf が出力されて出来上がりです


おまけ
Java 経由で PDF の変換はできるのか
どうもフリーで公開されているライブラリを使用してでは
Word や Excel から PDF に変換できるものはなさそうです
どっちかというと変換できるのがほしかったので残念です
探し方に問題があるかもしれないので知っている方は情報求む


以下、参考サイト
http://allabout.co.jp/gm/gc/80691/
http://www.pdfonline.com/japan/easypdf/sdk/programming-pdf/java/
http://www.atmarkit.co.jp/fjava/javatips/121jspservlet41.html
http://sourceforge.jp/magazine/10/02/17/0242249

0 件のコメント:

コメントを投稿