目次
はじめに ▼ XML:FreeMakerプログラム ▼ MS-Windowsにおける実行 ▼ MacOSにおける実行 ▼ XML:FreeMakerの配付 ▼
XML:FreeMaker(略称:XFM)は,XML文書をXSLスタイルシートに従ってフォーマッティングオブジェクト(FO)に変換し,次いでFOファイルをPDFへ変換しファイルへ出力するプログラムです。XML:FreeMakerは,The Apache Software Foundationが開発したFOPを用い,javaで記述しています。
XML:FreeMakerは,XSLT,XSL:FO,および次の資料を参考に開発しました。これらは,私(岸 和孝)がFop-0.19.0-CVSから一部抜粋し訳したものです。
XML:FreeMakerは,私が開発しました。XML:FreeMakerは,無保証ですから自己責任で利用してください。
XML:FreeMakerは,自由に翻案したり頒布してもかまいません。私宛にご意見をいただければ幸いです。
XML:FreeMakerは,次のような機能を実現しています。なお,FOPの現バージョンでは,指定可能な日本語フォントは“Osaka”だけです。
XML:FreeMakerの実行は,次の環境で確認しました。
不明な場合は,ご一報ください。
XML:FreeMakerプログラムのソースコードはXFM.java,バイトコードはXFM.classです。このバイトコードをJava Virtual Machineが解読して実行します。MS-WindowsではWin32版のJRE(Java 2 Runtime Environment)を介し,MacOSではMRJ(Macintosh Runtime for Java)を介して実行します。
XML:FreeMakerの実行に必要なクラスライブラリは,次のとおりです。
XML:FreeMakerのコマンド引数は,次のとおりです。なお,中間結果は問題解決のために出力します。
インスタンス スタイルシート 中間結果 エンコーディング 変換結果
インスタンス 入力するXML文書インスタンスのファイル名 スタイルシート 入力するXSLスタイルシートのファイル名 中間結果 XSLT変換出力先のフォーマッティングオブジェクトのファイル名 エンコーディング 入力データのエンコーディング
UTF-8,UTF-16,またはShift_JIS変換結果 FO変換出力先のPDFのファイル名
注:XML文書インスタンスが参照する画像データはXFM.classと同じフォルダーになければなりません。
例えば,次のように与えます。
SAMPLE.XML SAMPLE.XSL SAMPLE.FO Shift_JIS SAMPLE.PDF
MS-Windowsでは,Win32版のJRE(Java 2 Runtime Environment)を介してXML:FreeMakerを実行します。 JREは,Javaプログラミング言語で書かれたプログラムの実行に必要な、Java Virtual Machine,実行時クラスライブラリ,Javaアプリケーション起動プログラムが含まれていますが,開発環境ではないのでコンパイラやデバッガなどの開発ツールは含まれていません。
MS-Windowsでは,Win32版のJREは,たぶん“C:\WINDOWS”にあらかじめインストールされているはずです。 従って,スタートメニュー -> MS-DOSプロンプトでMS-DOSウィンドウを開き,JAVA(Javaアプリケーションの起動コマンド)でバイトコードXFM.classを実行します。 例えば,バイトコードと入力データがC:\xfm”にあり,クラスライブラリが“C:\xfm\lib”にあるとすると,コマンドラインは,次のようになります。
C:>CD C:\xfm C:>SET classpath=C:\xfm\lib\batik.jar;C:\xfm\lib\classes.zip;C:\xfm\lib\crimson.jar;C:\xfm\lib\fop-0.17.0-jp.jar;C:\xfm\lib\jaxp.jar;C:\xfm\lib\xalan.jar;C:\xfm\lib\xerces-1.2.3.jar;. C:>C:\WINDOWS\JAVA XFM SAMPLE.XML SAMPLE.XSL SAMPLE.FO Shift_JIS SAMPLE.PDF
この操作を簡便にするために,AUTOEXEC.BATにおいてPATHやclasspathを設定しておいたり,次のようなバッチファイルXFM.BATを用いて,MS-DOSウィンドウから“XFM SAMPLE”と指示してもいいでしょう。
CD C:\xfm SET classpath=C:\xfm\lib\batik.jar;C:\xfm\lib\classes.zip;C:\xfm\lib\crimson.jar;C:\xfm\lib\fop-0.17.0-jp.jar;C:\xfm\lib\jaxp.jar;C:\xfm\lib\xalan.jar;C:\xfm\lib\xerces-1.2.3.jar;. C:\WINDOWS\JAVA XFM %1.XML %1.XSL %1.FO Shift_JIS %1.PDF
ここで,SAMPLE.XMLが次のようであり,
<?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="SAMPLE.XSL" ?> <CARD> <NAME><FAMILY>岸</FAMILY><FIRST>和孝</FIRST></NAME> <ORG>飯豊山書林</ORG> <TEL>0241-22-3981</TEL> <LOGO GR="SAMPLE.GIF"/> </CARD>
かつ,SAMPLE.XSLが次のようである場合,
<?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <xsl:processing-instruction name="cocoon-format">type="text/xslfo"</xsl:processing-instruction> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="M" page-width="90mm" page-height="55mm" margin-top="5mm" margin-bottom="5mm" margin-left="5mm" margin-right="5mm"> <fo:region-body margin-top="5mm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-name="M"> <fo:flow flow-name="xsl-region-body"> <fo:block text-align="end"> <fo:external-graphic> <xsl:attribute name="src">file:<xsl:value-of select="CARD/LOGO/@GR"/></xsl:attribute> </fo:external-graphic> </fo:block> <xsl:apply-templates select="CARD"/> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <xsl:template match="CARD/NAME"> <fo:block font-size="14pt" font-family="Osaka" text-align="center" color="Black" space-before.optimum="5pt"> <xsl:value-of select="FAMILY"/> <xsl:value-of select="FIRST"/> </fo:block> </xsl:template> <xsl:template match="CARD/ORG"> <fo:block font-size="12pt" font-family="Osaka" text-align="center" color="Black" background-color="White" space-before.optimum="5pt"> <xsl:value-of select="."/> </fo:block> </xsl:template> <xsl:template match="CARD/TEL"> <fo:block font-size="12pt" font-family="Osaka" text-align="center" color="Black" background-color="White" text-indent="12pt" space-before.optimum="5pt"> TEL:<xsl:value-of select="."/> </fo:block> </xsl:template> </xsl:stylesheet>
XML:FreeMakerの実行によって次のような処理経過メッセージが表示されます。
using renderer org.apache.fop.render.pdf.PDFRenderer using element mapping org.apache.fop.fo.StandardElementMapping using element mapping org.apache.fop.svg.SVGElementMapping using property list mapping org.apache.fop.fo.StandardPropertyListMapping using property list mapping org.apache.fop.svg.SVGPropertyListMapping building formatting object tree setting up fonts formatting FOs into areas [1] rendering areas to PDF writing out PDF
中間結果は次のようになります。
<?xml version="1.0" encoding="Shift_JIS"?> <?cocoon-format type="text/xslfo"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master margin-right="5mm" margin-left="5mm" margin-bottom="5mm" margin-top="5mm" page-height="55mm" page-width="90mm" master-name="M"> <fo:region-body margin-top="5mm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-name="M"> <fo:flow flow-name="xsl-region-body"> <fo:block text-align="end"> <fo:external-graphic src="file:AIZU.GIF"/> </fo:block> <fo:block space-before.optimum="5pt" color="Black" text-align="center" font-family="Osaka" font-size="14pt"> 岸 和孝 </fo:block> <fo:block space-before.optimum="5pt" background-color="White" color="Black" text-align="center" font-family="Osaka" font-size="12pt"> 飯豊山書林 </fo:block> <fo:block space-before.optimum="5pt" text-indent="12pt" background-color="White" color="Black" text-align="center" font-family="Osaka" font-size="12pt"> TEL:0241-22-3981 </fo:block> </fo:flow> </fo:page-sequence> </fo:root>
そして,結果のSAMPLE.PDFは次のようになります。

MacOSでは,MRJ(Macintosh Runtime for Java)を介してXML:FreeMakerを実行します。 MRJは,Javaプログラミング言語で書かれたプログラムの実行に必要な、Java Virtual Machine,実行時クラスライブラリ,Javaアプリケーション起動プログラムが含まれていますが,開発環境ではないのでコンパイラやデバッガなどの開発ツールは含まれていません。
MacOSでは,MRJは,たぶん“システムフォルダ:機能拡張:MRJ Libraries”にあらかじめインストールされているはずです。 MacOSでは,コマンドによる起動ではなくアプリケーションから起動するようになっています。 XML:FreeMakerは,次のような実行条件を表わすファイルXFM.propertiesに基づき実行します。 必要に応じてXFM.propertiesの赤色の箇所(パスに相当)や青色の箇所(コマンドに相当)を書き換える必要があります。ここで,“MyDisk:xfm”はXML:FreeMakerとXFM.classを,“MyDisk:xfm:lib”はクラスライブラリをインストールした場所です。XFM.logは処理経過メッセージの出力先のファイル名です。
#WARNING: Do not remove the comment "#User entered properties:" from this file. All #text above and including the comment will be deleted and regenerated by the linker. #All text below it will be preserved when the file is rewritten. #If the comment is missing, it can lead to stale and unformatted properties in the file. #IDE created properties: #Mon Jan 07 14:20:28 GMT 2002 com.apple.mrj.application.apple.menu.about.name=XFM com.apple.mrj.application.apple.menu.quit=true com.apple.mrj.application.growbox.intrudes=false com.apple.mrj.application.stdout=/MyDisk/xfm/XFM.log com.apple.mrj.application.stderr=/MyDisk/xfm/XFM.log com.apple.mrj.application.main=XFM com.apple.mrj.application.classpath=.:/MyDisk/xfm/XFM.class:/MyDisk/xfm/lib/crimson.jar:/MyDisk/xfm/lib/fop-0.17.0-jp.jar:/MyDisk/xfm/lib/jaxp.jar:/MyDisk/xfm/lib/xalan.jar:/MyDisk/xfm/lib/xerces-1.2.3.jar:/MyDisk/xfm/lib/batik.jar com.apple.mrj.application.parameters=SAMPLE.XML SAMPLE.XSL SAMPLE.FO Shift_JIS SAMPLE.PDF com.apple.mrj.application.stdin=$CONSOLE user.dir=/MyDisk/xfm/ com.apple.mrj.application.stdout.append=false com.apple.mrj.application.stderr.append=false #User entered properties:
MacOSでは,画像の扱いに問題がありますが,おおよそMS-Windowsにおける実行の場合と同じ結果が得られます。
XML:FreeMakerは,次のように配付します。
■MacOS用XML:FreeFinderのダウンロード
■MS-Windows用XML:FreeFinderのダウンロード
(2002年2月記,同改訂)