- PR -

iTextでAcroFields使用時の日本語表示方法

1
投稿者投稿内容
すすむ
会議室デビュー日: 2003/11/12
投稿数: 9
投稿日時: 2006-03-14 15:28
昨日からいろんなサイトを巡っていますが、最終的に(?)ここで質問します。
iText-1.2.jar と iTextAsian.jar を利用しています。

BaseFontを利用した日本語表示はちゃんと動きました。
下記がBaseFontの使用例です。全く問題なくPDFファイルが生成できています。

Document document = new Document(PageSize.A4.rotate());
PdfWriter pw = PdfWriter.getInstance(document, new FileOutputStream("abc.pdf"));
document.open();
BaseFont bf = BaseFont.createFont("HeiseiMin-W3", "UniJIS-UCS2-HW-H",false);
Font font = new Font(bf, 10.5f);
Paragraph para = new Paragraph("おはようございます。",new Font(bf, 20f));
para.setAlignment(Element.ALIGN_LEFT);
document.add(para);
document.close();

次に、AcrobatProでPDFファイル(abc2.pdf)の中に テキストフィールドを一つ作成し、
そこに値を埋め込むことをやってみたいと考えています。

PdfReader reader = new PdfReader("abc2.pdf");
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("abc3.pdf"));
AcroFields form = stamp.getAcroFields();
form.setField("text1", "おはようございます。");
stamp.setFormFlattening(true);
stamp.close();

おはよう〜ではなく「Hello」(英数字)とかならちゃんと動いたのですが、
上記「おはようございます。」だと何も表示されません。

1つめのソースのように BaseFontをどこかで指定できないかと考えていますが、
いまのところ手のうちようが無い状態です。
AcroFields(テキストフィールド)に日本語を埋め込んだことがある方、
あるいは、何らかの実現方法が思いつく方、いましたら教えてください。

参照元として、iTextのAcroFields使用例ページにリンクしておきます。
http://itextdocs.lowagie.com/tutorial/general/copystamp/index.html
このなかの「Register」を参考にしてプログラムを行っています。
すすむ
会議室デビュー日: 2003/11/12
投稿数: 9
投稿日時: 2006-03-14 17:29
質問者本人の補足です。

stamp.setFormFlattening(true);
の行をコメントアウトしたところ、
値として何も表示されないのはそのままですが、
「フィールドをハイライト表示」にチェックすれば値が全て出てきました。
(チェックを外すとまた消えます・・・)

しかも「フィールドをハイライト表示」で値を表示させてから、
値を変更すると、(「おはよう〜」→「こんにちは」とか・・・)
今度は、チェックを外しても消えなくなりました・。・・

これはPDFファイル生成時点では、値が正しく埋め込まれていない状態。
ということなのでしょうか?

今のところ誰からも回答ないですね・・・・
すすむ
会議室デビュー日: 2003/11/12
投稿数: 9
投稿日時: 2006-03-15 11:44
またまた本人書込みで失礼します。
解決しましたので一応回答を掲載しておきます。

<解決方法>
iText-1.2 を iText-1.4 にバージョンアップ!

Acrobat のPDFバージョンと、iTextのPDFバージョンを合わせないと、
テキストフィールドへの値埋め込み処理が上手くいかないことがあるようです。
私の環境は今日現在下記のとおり・・・
・Acrobat Pro 7.0
・iText-1.4.jar

今後、同問題で悩む方がいましたらその際にお役に立てば幸いです。
1

スキルアップ/キャリアアップ(JOB@IT)