履歴 | ログイン     現在のページを印刷可能フォーマットで表示します  
課題の詳細 (XML | Word | 印刷用画面)

キー: JASAK-176
タイプ: 改善 改善
状況: オープン オープン
優先度: 高
担当者: Shoji Kajita
作成者: 太田 芳博
投票数: 0
ウォッチャ: 0
操作

ログインすると、さらに他の操作を行えます。
Ja Sakai

サイト情報(Site Info)で「印刷用バージョン」を選んで名簿をPDFで作成すると化ける

作成日: 11/05/18 14:25   更新日: 11/09/29 18:31
コンポーネント: Site Info
影響バージョン: なし
対応予定バージョン: なし

添付ファイル: 1. XML File participants-all-attrs.xsl (8 kb)
2. Java Source File SiteInfoToolServlet.java (13 kb)

添付画像:

1. meibo.jpg
(79 kb)
環境: Solaris 10 + Intel x86 , Sakai-2.7.1


 説明  « 非表示
サイト情報(Site Info)で「印刷用バージョン」を選んで名簿をPDFで作成すると化ける

 すべて   コメント   更新履歴      並び順:
太田 芳博 - 11/05/18 14:31 - 編集済
以下、私のメモをそのまま貼付けます.

私が行った以下の手順だと,日本語TrueTypeを用意できないとダメです.
たしか,SolarisにはX11用に日本語TyueTypeがついていたはず...と探して調べて
なんとかねじ込んだ感が強いです。参考程度にしかならないかも...

ーーー(ここから)ーーー
サイト情報で「印刷用バージョン」を選んで名簿をPDFで作成すると化ける件:

調査:
・site-manage/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteInfoToolServlet.java でPDFを作成している.
・PDF作成には apache-fopライブラリを使用している.
・fopのバージョンは fop-0.20.5を使用している.(site-manage/site-manage-tool/tool/pom.xmlを参照。)

fopライブラリの中に日本語フォント(TrueType)はincludeされていないので,別途用意しないとダメ。
そしてまずは,なんとか日本語TrueTypeの情報を読み込ませてやらないと。

Solarisには日本語TrueTypeフォントが(一応)ついている。
  リコーが開発した HG ゴシック体 B、HG 明朝体 L、および平成明朝体 W3H の TrueType フォント.
 /usr/openwin/lib/locale/ja/X11/fonts/TT/HG-GothicB.ttf
 /usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf
 /usr/openwin/lib/locale/ja/X11/fonts/TT/HeiseiMin-W3H.ttf
これらを使うことにした。

○fopの日本語化において,ttfファイルから,それぞれのフォントメトリックスファイル(xml形式)を作成する必要がある。
 http://merita.jp/web-design-tips/07/13.html
 ちなみに,fop-0.94ではフォントメトリックスファイルはいらない...のかも(未検証)。
 http://www.nslabs.jp/apache_fop.rhtml

とにかく,日本語TrueTypeフォントのfont metricsファイルを作成する。
http://xmlgraphics.apache.org/fop/trunk/fonts.html を参考に。
  
  フォントメトリックスファイルを作るのは別に最新のfopでもいいだろうと
  http://archive.apache.org/dist/xmlgraphics/fop/binaries/ から
  fop-1.0-bin.tar.gz をダウンロード。
  ~/fop-1.0に持ってきて展開。
  fop-1.0/build/fop.jarがあった。これを使って以下のようにする.
  
{code}
  cd fop-1.0/build
 java -cp ./fop.jar:../lib/avalon-framework-4.2.0.jar:../lib/commons-logging-1.0.4.jar:../lib/commons-io-1.3.1.jar:../lib/xmlgraphics-commons-1.4.jar org.apache.fop.fonts.apps.TTFReader /usr/openwin/lib/locale/ja/X11/fonts/TT/HG-GothicB.ttf gothic.xml
  java -cp ./fop.jar:../lib/avalon-framework-4.2.0.jar:../lib/commons-logging-1.0.4.jar:../lib/commons-io-1.3.1.jar:../lib/xmlgraphics-commons-1.4.jar org.apache.fop.fonts.apps.TTFReader /usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf mincho.xml
{code}
 
 これで,
  HG-GothicB.ttf から gothic.xml
  HG-MinchoL.ttf から mincho.xml
というフォントメトリックスファイル(xml)を作成した。

さて,次はfopの作法に基づいて,フォント情報を追加したコンフィグレーションファイル(デフォルトでは userconfig.xml)を記述し,
それをJavaのプログラム中で読み込ませないとダメ.デフォルトのuserconfig.xmlからの追加部分。
→ということは次は,どこに gothic.xml, mincho.xml, userconfig.xmlを置くかきめないと。

では,
 $CATALINA_HOME/sakai/fop/userconfig.xml
 $CATALINA_HOME/sakai/fop/gothic.xml
 $CATALINA_HOME/sakai/fop/mincho.xml
におくとする!

以下,それを決定事項としてソース変更。

1)userconfig.xmlはfop-0.20.5.jarを展開してできるデフォルトのuserconfig.xmlをコピーして,以下を追加。$CATALINA_HOME/sakai/fop/userconfig.xmlとしておく.
{code}
 <font metrics-file="/portal/apache-tomcat-5.5.31/sakai/fop/gothic.xml" embed-file="/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-GothicB.ttf" kerning="yes">
    <font-triplet name="Gothic" style="normal" weight="normal"/>
    <font-triplet name="Gothic" style="normal" weight="bold"/>
    <font-triplet name="Gothic" style="italic" weight="normal"/>
    <font-triplet name="Gothic" style="italic" weight="bold"/>
 </font>
 <font metrics-file="/portal/apache-tomcat-5.5.31/sakai/fop/mincho.xml" embed-file="/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf" kerning="yes">
    <font-triplet name="Mincho" style="normal" weight="normal"/>
    <font-triplet name="Mincho" style="normal" weight="bold"/>
    <font-triplet name="Mincho" style="italic" weight="normal"/>
    <font-triplet name="Mincho" style="italic" weight="bold"/>
 </font>
{code}

2)作成したフォントメトリックスファイルgothic.xml, mincho.xmlも,$CATALINA_HOME/sakai/fop以下に配置する。

3)SiteInfoToolServlet.javaを変更して,$CATALINA_HOME/sakai/fop/userconfig.xmlを読むようにする.

diff ./site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteInfoToolServlet.java.org ./site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteInfoToolServlet.java
84,86d83
< import org.apache.fop.apps.Options;
< import java.io.File;
<
406,410d402
<
< String tomcatHome = System.getenv("CATALINA_HOME");
< File configFile = new File(tomcatHome + "/sakai/fop/userconfig.xml");
< Options options = new Options(configFile);
<
429,435d420
< catch (Exception e)
< {
< e.printStackTrace();
< log.warn(this+".generatePDF(): " + e);
< return;
< }
<

3) participants-all-attrs.xslの,サイトの名前と氏名を書き出す所に,font-family属性で日本語フォントの指定を入れる。

# 変更後のSiteInfoToolServlet.javaとparticipants-all-attrs.xsl はこのページに添付します

ーーー(ここまで)ーーー

これで,
cd $SAKAI_SRC/site-manage
mvn install sakai:deploy



Shoji Kajita - 11/07/28 20:21
The print version of Roster in PDF cannot be read in Japanese due to the misconfiguration of Font in SiteInfoToolServlet.java

山田 勇樹 - 11/09/10 15:52
Feature Requestとして、PDF用の日本語フォントをSakaiにアップロードする機能が、以下で検討されています。
https://jira.sakaiproject.org/browse/SAK-13686

山田 勇樹 - 11/09/29 18:31
以下のとおり本家JIRAへバグ報告を行いました。
https://jira.sakaiproject.org/browse/SAK-21241