DITA-OT1.4.3のPDF出力を日本語化する(Apache FOP編)
mitsu48さんの指摘で、「XSLの中の、フォント・ファミリー指定の変更」が不要なことがわかりましたので、手順から削除しました。
最初にコメントしますが、現状のApache FOPで製品品質のPDFを作るのは、多分無理。
それでも、
- RenderX XEP Personal版は商用には使えない
- フッタ部分にRenderXのURLとロゴが入る
のがイヤな人は、Apache FOPを試してみては。
RenderX XEPとApache FOPを比べると、以下のような主要な違いがある。
FO Formatter | RenderX XEP | Apache FOP |
---|---|---|
フォントメトリクスの指定 | 不要 | 必要 |
索引生成 | ○ | × |
目次のハイパーリンク | ○ | × |
日本語化の手間 | 比較的楽 | 少し大変 |
FOPの方がフォントメトリクス指定が煩雑な分、日本語化の手間がかかる。
なお、アンテナハウスのXSL Formatterは、RenderX XEPと同等かそれ以上の機能を持っているらしい。
評価版はあるが、フリーで使えるものがないので試していない。
DITA-OT1.4.3には、Apache FOP Ver0.95が含まれている。
DITA-OT1.4.3のApache FOPによるPDF出力を日本語化するための手順を以下に示す。
参考にしたページ
- DITA-OT1.4.2.1で日本語コンテンツをPDF出力するための修正方法
- Apache FOP フォントの埋め込み 日本語対応
- Apache FOP
- Apache FOPでPDF
- Apache FOPへの日本語フォント組み込み方法
フォントメトリクス・ファイルの準備
- Apache FOPのTTFReaderツールを使って、MS ゴシックとMS 明朝のフォントメトリクス・ファイルを作る。フォントメトリクス・ファイルをまとめて作るバッチ(jp_fonts.bat)を作ったので、これを使う。
jp_fonts.bat
@echo off echo Apache FOPで日本語フォントを扱えるようにするためのバッチ echo. REM 概要: REM Apache FOPで日本語フォントを扱えるようにするためのバッチ REM REM 詳細: REM 本バッチは、MS明朝とMSゴシックのフォント・メトリクス・ファイルをjp_fontsフォ REM ルダの下に作ります。 REM REM 補足: REM PDFを日本語化するには、本バッチにより生成したフォント・メトリクス・ファイ REM ルの他に、日本語フォントの情報を定義したuserconfig.xmlファイルが必要です。 REM userconfig.xmlは、DITA-OTを実行するときに指定されます。 REM ・Antを使ってDITA-OTを実行する場合 REM args.fo.userconfigパラメータに、userconfig.xmlを指定する REM ・dost.jarを使ってDITA-OTを実行する場合 REM dost.jarを実行するときに、引数として /fouserconfig:%DITA_DIR%userconfig.xml を指定する REM OSのチェック(本バッチはWindows XP上でのみ動作する) if not "%OS%"=="Windows_NT" goto OS_ERROR REM 以降は、start.batのコピー REM --- ここから --- REM This file is part of the DITA Open Toolkit project hosted on REM Sourceforge.net. See the accompanying license.txt file for REM applicable licenses. REM (c) Copyright IBM Corp. 2006 All Rights Reserved. REM Get the absolute path of DITAOT's home directory set DITA_DIR=%~dp0 REM Set environment variables set ANT_OPTS=-Xmx800m %ANT_OPTS% set ANT_OPTS=%ANT_OPTS% -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl set ANT_HOME=%DITA_DIR%tools\ant set PATH=%DITA_DIR%tools\ant\bin;%PATH% set CLASSPATH=%DITA_DIR%lib;%DITA_DIR%lib\dost.jar;%DITA_DIR%lib\resolver.jar;%DITA_DIR%lib\icu4j.jar;%CLASSPATH% set CLASSPATH=%DITA_DIR%lib\saxon\saxon9.jar;%DITA_DIR%lib\saxon\saxon9-dom.jar;%CLASSPATH% set CLASSPATH=%DITA_DIR%lib\saxon\saxon9-dom4j.jar;%DITA_DIR%lib\saxon\saxon9-jdom.jar;%CLASSPATH% set CLASSPATH=%DITA_DIR%lib\saxon\saxon9-s9api.jar;%DITA_DIR%lib\saxon\saxon9-sql.jar;%CLASSPATH% set CLASSPATH=%DITA_DIR%lib\saxon\saxon9-xom.jar;%DITA_DIR%lib\saxon\saxon9-xpath.jar;%DITA_DIR%lib\saxon\saxon9-xqj.jar;%CLASSPATH% REM --- ここまで --- set LOCAL_FOP_HOME=%~dp0demo\fo\fop\ set LIBDIR=%LOCAL_FOP_HOME%lib set LOCALCLASSPATH=%LOCAL_FOP_HOME%build\fop.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xml-apis-1.3.04.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xml-apis-ext-1.3.04.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xercesImpl-2.7.1.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xalan-2.7.0.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\serializer-2.7.0.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\batik-all-1.7.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xmlgraphics-commons-1.3.1.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\avalon-framework-4.2.0.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\commons-io-1.3.1.jar set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\commons-logging-1.0.4.jar mkdir .\jp_fonts echo. echo MS ゴシックのフォントメトリクス・ファイル作成中... java -cp "%LOCALCLASSPATH%" org.apache.fop.fonts.apps.TTFReader -ttcname "MS Gothic" C:\WINDOWS\Fonts\MSGOTHIC.TTC .\jp_fonts\msgothic.xml echo. echo MS Pゴシックのフォントメトリクス・ファイル作成中... java -cp "%LOCALCLASSPATH%" org.apache.fop.fonts.apps.TTFReader -ttcname "MS PGothic" C:\WINDOWS\Fonts\MSGOTHIC.TTC .\jp_fonts\mspgothic.xml echo. echo MS UIゴシックのフォントメトリクス・ファイル作成中... java -cp "%LOCALCLASSPATH%" org.apache.fop.fonts.apps.TTFReader -ttcname "MS UI Gothic" C:\WINDOWS\Fonts\MSGOTHIC.TTC .\jp_fonts\msuigothic.xml echo. echo MS 明朝のフォントメトリクス・ファイル作成中... java -cp "%LOCALCLASSPATH%" org.apache.fop.fonts.apps.TTFReader -ttcname "MS Mincho" C:\WINDOWS\Fonts\MSMINCHO.TTC .\jp_fonts\msmincho.xml echo. echo MS P明朝のフォントメトリクス・ファイル作成中... java -cp "%LOCALCLASSPATH%" org.apache.fop.fonts.apps.TTFReader -ttcname "MS PMincho" C:\WINDOWS\Fonts\MSMINCHO.TTC .\jp_fonts\mspmincho.xml echo. goto END :OS_ERROR echo 本バッチは、Windows XP上でのみ動作します。 echo. :END set ANT_OPTS= set CLASSPATH= set LOCALCLASSPATH= echo フォントメトリクス・ファイルとuserconfig.xmlの作成完了 echo. pause
- jp_fonts.batを%DITA-OT%の下に置き実行する。これにより、jp_fontsフォルダができ、その中に以下のフォントメトリクス・ファイルが生成される。
- TTFReaderにバグがあるようで、上記フォントメトリクス・ファイルのうち、msgothic.xml, msmincho.xml, mspgothic.xmlのfamily-nameタグのコンテンツが文字化けする。テキスト・エディタを使って、それぞれMS ゴシック、MS 明朝、MS Pゴシックに修正する。このとき、フォントメトリクス・ファイルを必ずUTF-8で保存すること。
mitsu48さんが紹介してくださった下記のページに、TTFReaderのバグを修正したfop.jarがあります。修正版のfop.jarを使うと、フォントメトリクス・ファイルをテキスト・エディタで修正する必要がなくなります。
Apache FOP の 無設定 日本語フォント対応 (Windows向け)
build.xmlの修正
- %DITA-OT%demo\fo\build.xml の中で、document.locale というプロパティを設定しているので、この値を ja_JP に変える。このことについては、DITA Open Toolkit User Guideの"Localizing in PDF2 output target"に書いてある。このlocaleに指定により、自動生成文字や索引の出来方も日本語仕様になる。
- build.xmlのデフォルトの設定では、DITA-OT実行後にXSL-FOのファイルが削除される。デバッグのためにXSL-FOを残しておきたい場合は、build.xml の中の、transform.topic2pdfターゲットの定義の中の、deleteの部分をコメント・アウトする。
<!--delete--> <!--Deleting the stage files isn't necessary, since it will be cleaned by clean-temp, and is useful for debugging.--> <!--<fileset dir="${buildDir}" includes="stage?.*"/>--> <!--fileset dir="${dita.map.output.dir}" includes="topic.fo"/--> <!--/delete-->
フォント・マッピングのカスタマイズ
- フォント・マッピングをカスタマイズするために、%DITA-OT%demo\fo\cfg\fo\font-mappings.xml を %DITA-OT%demo\fo\Customization\fo の下にコピーする。
- %DITA-OT%\demo\fo\Customization\fo\font-mappings.xml を編集し、日本語フォントの指定箇所を以下のとおり変更する。
<font-mappings> <font-table> <aliases> <alias name="Helvetica">Normal</alias> </aliases> <aliases> <alias name="Courier">Monospaced</alias> </aliases> <logical-font name="Sans"> <physical-font char-set="default"> <font-face>Helvetica</font-face> </physical-font> <physical-font char-set="Simplified Chinese"> <font-face>AdobeSongStd-Light</font-face> </physical-font> <physical-font char-set="Japanese"> <!--<font-face>KozMinProVI-Regular</font-face>--> <font-face>MSGothic</font-face> </physical-font> <physical-font char-set="Korean"> <font-face>AdobeMyungjoStd-Medium</font-face> </physical-font> <physical-font char-set="Symbols"> <font-face>ZapfDingbats</font-face> </physical-font> <physical-font char-set="SubmenuSymbol"> <font-face>ZapfDingbats</font-face> </physical-font> <physical-font char-set="SymbolsSuperscript"> <font-face>Helvetica</font-face> <baseline-shift>20%</baseline-shift> <override-size>smaller</override-size> </physical-font> </logical-font> <logical-font name="Serif"> <physical-font char-set="default"> <font-face>Times</font-face> </physical-font> <physical-font char-set="Simplified Chinese"> <font-face>AdobeSongStd-Light</font-face> </physical-font> <physical-font char-set="Japanese"> <!--<font-face>KozMinProVI-Regular</font-face>--> <font-face>MSMincho</font-face> </physical-font> <physical-font char-set="Korean"> <font-face>AdobeMyungjoStd-Medium</font-face> </physical-font> <physical-font char-set="Symbols"> <font-face>ZapfDingbats</font-face> </physical-font> <physical-font char-set="SubmenuSymbol"> <font-face>ZapfDingbats</font-face> </physical-font> <physical-font char-set="SymbolsSuperscript"> <font-face>Times</font-face> <baseline-shift>20%</baseline-shift> <override-size>smaller</override-size> </physical-font> </logical-font> <logical-font name="Monospaced"> <physical-font char-set="default"> <font-face>Courier</font-face> </physical-font> <physical-font char-set="Simplified Chinese"> <font-face>AdobeSongStd-Light</font-face> </physical-font> <physical-font char-set="Japanese"> <!--<font-face>KozMinProVI-Regular</font-face>--> <font-face>MSGothic</font-face> </physical-font> <physical-font char-set="Korean"> <font-face>AdobeMyungjoStd-Medium</font-face> </physical-font> <physical-font char-set="Symbols"> <font-face>ZapfDingbats</font-face> </physical-font> <physical-font char-set="SymbolsSuperscript"> <font-face>Courier</font-face> <baseline-shift>20%</baseline-shift> <override-size>smaller</override-size> </physical-font> </logical-font> </font-table> </font-mappings>
- font-mappings.xml のカスタマイズを有効にするために、%DITA-OT%demo\fo\Customization\catalog.xml を修正する。catalog.xml.orig をコピーして catalog.xml を作り、FontMapperのコメントを解除する。
<!-- FontMapper configuration override entry.--> <uri name="cfg:fo/font-mappings.xml" uri="fo/font-mappings.xml"/>
fop.xconfの修正
- %DITA-OT%demo\fo\fop\conf\fop.xconfに、日本語フォントのフォントメトリクス・ファイルを参照するための記述を追加する。
: <fonts> <!-- Fontmetrics for Japanese fonts --> <font metrics-url="file:///C:/DITA-OT1.4.3/jp_fonts/msuigothic.xml" embed-url="file:///C:/windows/fonts/msgothic.ttc" kerning="yes"> <font-triplet name="MSUIGothic" style="normal" weight="normal"/> <font-triplet name="MSUIGothic" style="normal" weight="bold"/> <font-triplet name="MSUIGothic" style="italic" weight="normal"/> <font-triplet name="MSUIGothic" style="italic" weight="bold"/> </font> <font metrics-url="file:///C:/DITA-OT1.4.3/jp_fonts/msgothic.xml" embed-url="file:///C:/windows/fonts/msgothic.ttc" kerning="yes"> <font-triplet name="MSGothic" style="normal" weight="normal"/> <font-triplet name="MSGothic" style="normal" weight="bold"/> <font-triplet name="MSGothic" style="italic" weight="normal"/> <font-triplet name="MSGothic" style="italic" weight="bold"/> </font> <font metrics-url="file:///C:/DITA-OT1.4.3/jp_fonts/mspgothic.xml" embed-url="file:///C:/windows/fonts/msgothic.ttc" kerning="yes"> <font-triplet name="MSPGothic" style="normal" weight="normal"/> <font-triplet name="MSPGothic" style="normal" weight="bold"/> <font-triplet name="MSPGothic" style="italic" weight="normal"/> <font-triplet name="MSPGothic" style="italic" weight="bold"/> </font> <font metrics-url="file:///C:/DITA-OT1.4.3/jp_fonts/msmincho.xml" embed-url="file:///C:/windows/fonts/msmincho.ttc" kerning="yes"> <font-triplet name="MSMincho" style="normal" weight="normal"/> <font-triplet name="MSMincho" style="normal" weight="bold"/> <font-triplet name="MSMincho" style="italic" weight="normal"/> <font-triplet name="MSMincho" style="italic" weight="bold"/> </font> <font metrics-url="file:///C:/DITA-OT1.4.3/jp_fonts/mspmincho.xml" embed-url="file:///C:/windows/fonts/msmincho.ttc" kerning="yes"> <font-triplet name="MSPMincho" style="normal" weight="normal"/> <font-triplet name="MSPMincho" style="normal" weight="bold"/> <font-triplet name="MSPMincho" style="italic" weight="normal"/> <font-triplet name="MSPMincho" style="italic" weight="bold"/> </font> </fonts> :
これで一応、日本語フォントが表示できるようになりますが、まだ、文字化けや文字の欠落が残っています。