[jjbug-seam 17] seam-mailサンプルの日本語対応

34 views
Skip to first unread message

岡崎 俊郎

unread,
Jul 1, 2007, 10:57:46 PM7/1/07
to japan-j...@lists.sourceforge.jp
初めまして、このたびメンバーに参加させていただいた者です。
今後ともよろしくお願いします。

jBoss 4.2.0GA
jBoss-seam jboss-seam-2.0.0.BETA1
環境です。

jBoss 4.0.5GA
jBoss-seam 1.2.1GA
環境ではmail本文すら日本語(ISO-2022-JP)の文字化けを起していましたが、
(m:message charset="ISO-2022-JP"を使用しても)
ざくっと当った限りでは、jboss-seam-2.0.0.BETA1では、メール本文の文字化
けは無くなったみたいです。
でも、添付ファイルサンプルのPDFでは日本語の指定方法すら分かりません。

そこで、多少強引な方法ですが、jboss-seam-pdf.jarの改造を試みました。
元ソースの変更を最少にするため、com.hoge.seam.pdf.uiパッケージを作成し、
そこにUIFontクラスを継承したUIHogeFontクラスを生成しました。
そこに、fontName、encodingプロパティとセッターを用意し、
createITextObjectをオーバライドしました。
fontName、encodingがヌルの場合は親クラスのcreateITextObjectを呼び、
そうでない場合は、BaseFontオブジェクトを生成し、Fontオブジェクトを生成
するという、iTextではおなじみの方法を取りました。
faces-config.xml、seam-pdf.taglib.xmlにUIHogeFontを追加し、
パッケージビューが切れたため、UIFontクラスの、Font、size、style、
Colorプロパティをprotectedに変更しました。
jboss-seam-pdf.jarのリビルド後、seam-emailサンプルのlibにiTextAsian.jar
追加後、whyseam.xhtmlの<p:font>を<p:hogefont>に変更し、日本文を追加し
再構築、デプロイしたところ、pdfに日本文が表示されるようになりました。

しかし、seam本体に手を加えることにやはり抵抗が有り、pdfに日本語を表示
する方法は他に無いのか、御教授頂けたら幸いです。

よろしくお願いします。

_______________________________________________
Japan-jbug-seam mailing list
Japan-j...@lists.sourceforge.jp
http://lists.sourceforge.jp/mailman/listinfo/japan-jbug-seam

Takayoshi Kimura

unread,
Jul 4, 2007, 6:30:15 AM7/4/07
to japan-j...@lists.sourceforge.jp
木村です。

At Mon, 02 Jul 2007 11:57:46 +0900,
岡崎 俊郎 <jf...@lime.ocn.ne.jp> wrote:

> でも、添付ファイルサンプルのPDFでは日本語の指定方法すら分かりません。

試してみましたがダメですね。SeamとiTextのソースを見てみました
が、現状では日本語の指定は無理そうです。英語圏の人には理解し
づらい問題だと思うので、こちらでパッチ書いたほうがいいですね。
時間があるときにやるつもりです。

--
//Takayoshi Kimura <tki...@redhat.com>
JBoss, a division of Red Hat

岡崎 俊郎

unread,
Jul 4, 2007, 9:53:03 AM7/4/07
to japan-j...@lists.sourceforge.jp
 岡崎 俊郎です。

>試してみましたがダメですね。SeamとiTextのソースを見てみました
>が、現状では日本語の指定は無理そうです。英語圏の人には理解し
>づらい問題だと思うので、こちらでパッチ書いたほうがいいですね。

やっぱりそうですか。
私もソースをながめていて、「やっぱだめジャン」と思ってました。
だから元ソースを書き換えようとおもったのですが。

パッチをお考えなら、拙いソースですが、実際日本語が通るものが有りますので、
公表場所を教えていただけたら、公開してもいいです。
もともとjBossが日本でメジャーになれないのは、日本語対応の不足が原因だと
思っていました。
業務で大手のJ2EEコンテナにはずいぶん拘わってきましたが、基本的にはフリー
系のソフトが好きなもので。
jBossもRedHatに吸収されちょっと不安ですが、今後ともJavaEEのメインストリ
ムを歩いてもらいたいと思っています。

Takayoshi Kimura

unread,
Jul 4, 2007, 10:11:51 AM7/4/07
to japan-j...@lists.sourceforge.jp
木村です。

At Wed, 04 Jul 2007 22:53:03 +0900,
岡崎 俊郎 <jf...@lime.ocn.ne.jp> wrote:

> パッチをお考えなら、拙いソースですが、実際日本語が通るものが有りますので、
> 公表場所を教えていただけたら、公開してもいいです。

このMLで構わないと思います。継承したクラス全文か、UIFontの
diffのどちらかがあれば十分です。

さらっとみたところ、nameとencodingの指定追加だけでいけるかと
も思ったんですが、問題が2点。

1. 僕の環境(Fedora 7)では以下のコードでも依然日本語が出ない。
http://www.atmarkit.co.jp/fjava/javatips/134java025.html

2. p:fontを使うたびにname/encodingを指定するのはめんどくさい
ので、parentから値を引き継ぐ仕組みが必要

ってところですかね。

> もともとjBossが日本でメジャーになれないのは、日本語対応の不足が原因だと
> 思っていました。

日本語が問題になる処理というのは大きく2つあります。

* charsetハードコード、または不適切なデフォルトcharsetの利用
* Stringをバイト単位で操作してマルチバイト文字を破壊

(おまけの3つめ。)
* Stringをchar単位で操作してUnicode補助文字(Unicode supplementary character)を破壊

JBoss AS本体には日本語が問題になる処理自体がほぼありません。
というわけで、「日本語対応の不足」ということはないと思います。
日本語ドキュメントの不足というなら同意します。

--
//Takayoshi Kimura <tki...@redhat.com>

Takayoshi Kimura

unread,
Jul 5, 2007, 4:13:38 AM7/5/07
to japan-j...@lists.sourceforge.jp
木村です。

At Wed, 04 Jul 2007 23:11:51 +0900,
Takayoshi Kimura <tki...@redhat.com> wrote:

> さらっとみたところ、nameとencodingの指定追加だけでいけるかと
> も思ったんですが、問題が2点。
>
> 1. 僕の環境(Fedora 7)では以下のコードでも依然日本語が出ない。
> http://www.atmarkit.co.jp/fjava/javatips/134java025.html

すいません、嘘でした。出ました。単なるパッケージングミスでし
た。

とりあえずパッチを末尾に貼り付けておきます。以下のような指定
で日本語が出ます。family属性を指定すると英語フォントが選ばれ
るため、日本語は表示されなくなります。

<p:font name="HeiseiKakuGo-W5" encoding="UniJIS-UCS2-H"><p:paragraph>日本語</p:paragraph></p:font>

> 2. p:fontを使うたびにname/encodingを指定するのはめんどくさい
> ので、parentから値を引き継ぐ仕組みが必要

と思ったんですが、どうもiTextがFont情報を引き継いでくれるよう
です。

以下のコードだと内側のp:fontのせいで日本語が表示されないんじゃ
ないかと思ったんですが、きちんと表示されました。

<p:font name="HeiseiKakuGo-W5" encoding="UniJIS-UCS2-H" color="blue" size="18"><p:paragraph><p:font size="24">日本語</p:font></p:paragraph></p:font>

もちろんfamilyを指定するとアウトで、日本語は表示されません。

<p:font name="HeiseiKakuGo-W5" encoding="UniJIS-UCS2-H" color="blue" size="18"><p:paragraph><p:font family="COURIER" size="24">日本語</p:font></p:paragraph></p:font>


このコードパッチとドキュメントのパッチを合わせて報告しようと
思っていますが、他にリクエストありますか?恐らく2.0.0.GAには
ねじ込めると思います。

--
//Takayoshi Kimura <tki...@redhat.com>

Index: UIFont.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/pdf/org/jboss/seam/pdf/ui/UIFont.java,v
retrieving revision 1.8
diff -u -r1.8 UIFont.java
--- UIFont.java 3 Apr 2007 17:15:45 -0000 1.8
+++ UIFont.java 5 Jul 2007 08:02:20 -0000
@@ -16,6 +16,8 @@
Font font;

String familyName;
+ String name;
+ String encoding;
int size = Font.UNDEFINED;
String style;
Color color;
@@ -24,6 +26,14 @@
this.familyName = familyName;
}

+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
+
public void setSize(int size) {
this.size = size;
}
@@ -54,10 +64,18 @@
@Override
public void createITextObject(FacesContext context) {
familyName = (String) valueBinding(context, "familyName", familyName);
- int family = (familyName==null) ? Font.UNDEFINED : Font.getFamilyIndex(familyName);
- size = (Integer) valueBinding(context, "size", size);
-
- font = new Font(family, size);
+ name = (String) valueBinding(context, "name", name);
+ encoding = (String) valueBinding(context, "encoding", encoding);
+
+ if (name != null && encoding != null) {
+ font = FontFactory.getFont(name, encoding);
+ } else {
+ int family = (familyName==null) ? Font.UNDEFINED : Font.getFamilyIndex(familyName);
+ font = new Font(family);
+ }
+
+ size = (Integer) valueBinding(context, "size", size);
+ font.setSize(size);

style = (String) valueBinding(context, "style", style);
if (style != null) {

Takayoshi Kimura

unread,
Jul 5, 2007, 5:33:47 AM7/5/07
to japan-j...@lists.sourceforge.jp
木村です。

とりあえずこんな感じで報告しようと思います。どうでしょう?>岡崎さん

Hello,

We cannot use CJK character with the p:font family attribute. It
doesn't support CJK character.

I will attach a patch against jboss-seam CVS trunk. It includes
patch for the UIFont.java and the itext.xml documentation. The
changes is fully backward compatibile.

We strongly hope this will be available in 2.0.0.GA.

This issue is originally reported by Toshirou Okazaki.

Best regards,
Takayoshi

ドキュメントのパッチも張っておきます。

Index: doc/reference/en/modules/itext.xml
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/doc/reference/en/modules/itext.xml,v
retrieving revision 1.11
diff -u -r1.11 itext.xml
--- doc/reference/en/modules/itext.xml 26 Jun 2007 02:23:11 -0000 1.11
+++ doc/reference/en/modules/itext.xml 5 Jul 2007 09:19:33 -0000
@@ -336,6 +336,14 @@
<literal>UNDERLINE</literal>, <literal>LINE-THROUGH</literal></para>

</listitem>
+
+ <listitem>
+ <para><literal>name</literal> &#8212; The name of the font to be used. This attribute should be used conjunction with the encoding attribute. If the family attribute is given, the name and encoding attributes are ignored.</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>encoding</literal> &#8212; The encoding of the font to be used. This attribute should be used conjunction with the name attribute. If the family attribute is given, the name and encoding attributes are ignored.</para>
+ </listitem>
</itemizedlist>
<para>
<emphasis>Usage</emphasis>
@@ -2204,6 +2212,15 @@
</section>


+ <section id="itext.cjk-support">
+ <title>CJK character support</title>
+
+ <para>To use CJK (Chinese, Japanese, Korean) character in a PDF document, you need to download <ulink url="http://itextpdf.sourceforge.net/">iTextAsian.jar</ulink> and put it into WEB-INF/lib directory of your WAR file.</para>
+ <para>You may also need to specify the name and encoding attributes on the p:font instead of the family attribute. If you specify wrong value for the name or encoding, CJK text will not be rendered. The following example is for Japanese:</para>
+ <programlisting>&lt;p:font name=&quot;HeiseiKakuGo-W5&quot; encoding=&quot;UniJIS-UCS2-H&quot;&gt;&lt;p:paragraph&gt;Some Japanese text.&lt;/p:paragraph&gt;&lt;/p:font&gt;</programlisting>
+
+ </section>
+

<section id="itext.links">
<title>Further documentation</title>

--
//Takayoshi Kimura <tki...@redhat.com>

岡崎 俊郎

unread,
Jul 5, 2007, 7:56:16 AM7/5/07
to japan-j...@lists.sourceforge.jp
 岡崎 俊郎です。

木村さんどうもありがとうございます。

本日、diffアップしようと思っていましたが、ぼくのソースよりすっきりしてい
たのでやめときました。

派生クラス(従って別タグとなる)を使用したのと、日本語のfontの取得方法に
BaseFontオブジェクトを使用したぐらいの違いです。

当方にても動作を確認しました。
なるほど!ネストすればname,encodingを変更せずに、サイズの変更が出来るん
だ。目から鱗でした。

>すいません、嘘でした。出ました。単なるパッケージングミスでした。

ですよね。こちらはfc6、JPackageにて1.5.0_09を使用してますが、fc7に上げる
のを躊躇しそうになりました。

日本語対応はjBossの問題では無いですね、どちらかと言えばtomcatの問題でし
ょう。
入出力ともに文字化けに苦しめられました。
JSP、サーブレットコンテナ程度だとなんとかなるのですが、J2EEの時代から、
対商用コンテナとの競合となるとどうしてもフリーは分が悪いですね。
開発規模が大きくなればなるほど。

jBossにとって、今後の最大の目玉はSeamだと思ってます。その意味でも下らな
い事(でも、現場では日本語が使えるかどうかは大きいんですよね)に足を取られ
ないことを祈るのみです。

でも、Strutsみたいに取り込まれたりして。

閑話休題。
ご苦労様でした。本当に有難うございました。

Takayoshi Kimura

unread,
Jul 6, 2007, 2:12:37 AM7/6/07
to japan-j...@lists.sourceforge.jp
木村です。

At Thu, 05 Jul 2007 18:33:47 +0900,
Takayoshi Kimura <tki...@redhat.com> wrote:

> とりあえずこんな感じで報告しようと思います。どうでしょう?

報告しました。

http://jira.jboss.com/jira/browse/JBSEAM-1611

さてみなさん投票タイムです。ログインして(アカウントが無ければ
作ってください :-) )、画面左下のVote for itというリンクをクリッ
クしてください。この値が大きいと素早くFixされます。逆にこの値
が増えないと2.0.0.GAでもパッチが取り込まれず、日本語が使えな
い可能性があります。

Takayoshi Kimura

unread,
Jul 11, 2007, 10:53:12 PM7/11/07
to japan-j...@lists.sourceforge.jp
木村です。

> 報告しました。

Seam 2.0.xにCommitされました。ただ、僕のレポートより先に類似
のJIRAレポートがあがっていたので、僕のレポートのほうは
Duplicate(重複)として処理されました。実際にcommitされたコード
は僕のものに似ていますが、さらにすっきりしています。

revision 1.9
date: 2007/07/10 23:55:22; author: nrichards; state: Exp; lines: +47 -21
JBSEAM-1039: rework UIFont to allow for alternative encodings

変更内容ですが、name属性とencoding属性が追加され、family属性
はname属性に統一されました。familyを指定するとnameが指定され
たことになります。両方同時に指定したときの動作はたぶん保証さ
れません。どちらかが実際に使われます。

というわけで、以前僕が挙げた例:

<p:font name="HeiseiKakuGo-W5" encoding="UniJIS-UCS2-H"><p:paragraph>日本語</p:paragraph></p:font>

がそのまま期待どおりに動作するはずです。

ドキュメントはまだ変更されていません。iTextAsian.jarの追加パッ
ケージングが必要であることについては、ドキュメント化されてい
ない&たぶんこれからもされない(どっちかというとSeamではなく
iTextの問題ですし)ので注意してください。

投票してくれた方、ありがとうございます。おかげでたった5日で処
理されました。

Reply all
Reply to author
Forward
0 new messages