|
|
|
The print version of Roster in PDF cannot be read in Japanese due to the misconfiguration of Font in SiteInfoToolServlet.java
Feature Requestとして、PDF用の日本語フォントをSakaiにアップロードする機能が、以下で検討されています。
https://jira.sakaiproject.org/browse/SAK-13686 以下のとおり本家JIRAへバグ報告を行いました。
https://jira.sakaiproject.org/browse/SAK-21241 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
私が行った以下の手順だと,日本語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