XML文書からPDFへの変換
XML:FreeMaker

目次

はじめに ▼
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プログラム

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における実行

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における実行

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:FreeMakerXFM.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の配付

XML:FreeMakerは,次のように配付します。

■MacOS用XML:FreeFinderのダウンロード

■MS-Windows用XML:FreeFinderのダウンロード

(2002年2月記,同改訂)


(c)2002 JAGAT