2009年4月23日木曜日

DocBook,FOP,ビルド

いろいろいじくった挙句の DocBook -> fo -> PDF まで一括で行うbuild.xml

-----------------------------------------------

<project name="docbooktest" basedir="." default="pdf">

<property name="LIBDIR" value="D:/DocBook"/>
<property name="DOCBOOK_DTD" value="${LIBDIR}/xml-4.5/docbookx.dtd"/>
<property name="XSLTLIBDIR" value="${LIBDIR}/xalan-j_2_7_1"/>
<property name="FOPBASEDIR" value="${LIBDIR}/fop-0.95"/>
<property name="FOPOPT" value="-c ${FOPBASEDIR}/conf/JFConf.xml"/>

<property name="DOCBOOK_PUBLIC_ID" value="-//OASIS//DTD DocBook XML V4.5//EN"/>

<property name="STYLESHEET" value="${LIBDIR}/docbook-xsl-1.74.3/fo/docbook.xsl"/>

<!-- ********************************************************** -->
<!-- **** コメントなどに日本語を使うならUTF8で保存すること **** -->
<!-- ********************************************************** -->

<property name="DOCNAME" value="sourceDocs"/>

<!--
property name="SOURCE" value="${basedir}/sourceDocs.xml"/ <= この書き方だとだめ
-->
<property name="SOURCE" value="${DOCNAME}.xml"/>


<!-- ********************************************************** -->

<taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop">
<classpath>
<fileset dir="${FOPBASEDIR}/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${FOPBASEDIR}/build/fop.jar"/>
</classpath>
</taskdef>

<!-- ********************************************************** -->

<target name="fo">

<xmlvalidate warn="false">

<xmlcatalog>
<dtd publicId="${DOCBOOK_PUBLIC_ID}" location="${DOCBOOK_DTD}"/>
</xmlcatalog>
<fileset dir="${basedir}">
<include name="${SOURCE}"/>
</fileset>
</xmlvalidate>

<xslt basedir="${basedir}"
destdir="${basedir}"
style="${STYLESHEET}"
extension=".fo"
includes="${SOURCE}">

<classpath>
<pathelement location="${XSLTLIBDIR}/xalan.jar"/>
</classpath>
<xmlcatalog>
<dtd publicId="${DOCBOOK_PUBLIC_ID}" location="${DOCBOOK_DTD}"/>
</xmlcatalog>

<outputproperty name="method" value="xml"/>
<outputproperty name="encoding" value="UTF-8"/>
<outputproperty name="indent" value="yes"/>

<!-- param name="admon.graphics" expression="1"/ -->
<!-- param name="section.autolabel" expression="1"/ -->
<!-- param name="html.stylesheet" expression="doc.css"/ -->

</xslt>

</target>

<target name="pdf" depends="fo">

<!--

<java classname="org.apache.fop.cli.Main" fork="true">

<jvmarg line="-Denv.windir=C:\WINDOWS"/>
<arg line="${FOPOPT} -fo ${DOCNAME}.fo -pdf ${DOCNAME}.pdf"/>

<classpath>
<pathelement location="${FOPBASEDIR}/build/fop.jar"/>
<pathelement location="${FOPBASEDIR}/build/fop-sandbox.jar"/>
<pathelement location="${FOPBASEDIR}/build/fop-hyph.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xml-apis-1.3.04.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xml-apis-ext-1.3.04.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xercesImpl-2.7.1.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xalan-2.7.0.jar"/>
<pathelement location="${FOPBASEDIR}/lib/serializer-2.7.0.jar"/>
<pathelement location="${FOPBASEDIR}/lib/batik-all-1.7.jar"/>
<pathelement location="${FOPBASEDIR}/lib/xmlgraphics-commons-1.3.1.jar"/>
<pathelement location="${FOPBASEDIR}/lib/avalon-framework-4.2.0.jar"/>
<pathelement location="${FOPBASEDIR}/lib/commons-io-1.3.1.jar"/>
<pathelement location="${FOPBASEDIR}/lib/commons-logging-1.0.4.jar"/>
<pathelement location="${FOPBASEDIR}/lib/jai_imageio.jar"/>
<pathelement location="${FOPBASEDIR}/lib/fop-hyph.jar"/>
</classpath>

</java>

-->

<fop format="application/pdf"
basedir="${basedir}"
outdir="${basedir}"
messagelevel="debug"
userconfig="${FOPBASEDIR}/conf/JFConf.xml">

<fileset dir="${basedir}">
<include name="${DOCNAME}.fo"/>
</fileset>

</fop>

</target>

</project>

-----------------------------------------------

コメントアウトした部分はFOPの起動バッチを参考にした場合。この場合は fork="true" 設定をしないと駄目だった。セキュリティとかクラスローダとかの関係らしいが、よくわからない。

ant から呼び出す場合は専用のクラスが準備されているのでそちらを利用する。

0 件のコメント:

コメントを投稿