Top > Blog Index > Groovy から直接FOP(Apache FOP)を使う

Groovy から直接FOP(Apache FOP)を使う

Apache FOP は普通コマンドラインから使いますが、 FOPはJavaで記述されているため、直接Javaから使うことができます。

コード

import org.apache.fop.cli.*
import  org.apache.fop.apps.*

def fodata='''
<root xmlns="http://www.w3.org/1999/XSL/Format"><layout-master-set><simple-page-master master-name="page-layout" page-height="29.7cm" page-width="21.0cm" margin="1.5cm"><region-body margin-bottom="3cm"/><region-after extent="2cm" region-name="footer"/></simple-page-master></layout-master-set><page-sequence master-reference="page-layout"><static-content flow-name="footer"><block font-size="10.0pt" text-align="outside"><page-number/></block></static-content><flow flow-name="xsl-region-body"><list-block provisional-label-separation="0.2em" provisional-distance-between-starts="1.2em" space-before.optimum="1em" space-before.minimum="0.8em" space-before.maximum="1.2em"><list-item><list-item-label end-indent="label-end()"><block font-size="10.0pt">•</block></list-item-label><list-item-body start-indent="body-start()"><block font-size="10.0pt">An item in a bulleted (unordered) list</block></list-item-body></list-item></list-block></flow></page-sequence></root>
'''

def fofile = new File('tmp.fo')
def w = fofile.newWriter('UTF-8')
w.print(fodata)
w.close()

def ih = new InputHandler(fofile)
def outputFormat = 'image/png'
def os           = new FileOutputStream(new File('r.png'))

def userAgent = FopFactory.newInstance().newFOUserAgent()
ih.renderTo(userAgent,outputFormat,os)

fofile.delete()

ここではコードに直書きした fo を r.png に出力しています。

依存する jar たちを ( fop/lib/*jar と fop/build/fop.jar です )を ~/.groovy/lib/ 以下に配置します。

ただし xml-apis.jar は外します。これは重要。