> java -cp c:\usr\share\java\build\fop.jar org.apache.fop.fonts.apps.TTFReader Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactoryこの場合は java\lib 内に commons-logging-1.0.4.jar があるのでクラスに指定して実行する。
> java -cp c:\usr\share\java\build\fop.jar;c:\usr\share\java\lib\commons-logging-1.0.4.jar org.apache.fop.fonts.apps.TTFReader TTF Reader for Apache FOP 1.0 java org.apache.fop.fonts.apps.TTFReader [options] fontfile.ttf xmlfile.xml where options can be: -d Debug mode -q Quiet mode -enc ansi With this option you create a WinAnsi encoded font. The default is to create a CID keyed font. If you're not going to use characters outside the pdfencoding range (almost the same as iso-8889-1) you can add this option. -ttcname <fontname> If you're reading data from a TrueType Collection (.ttc file) you must specify which font from the collection you will read metrics from. If you read from a .ttc file without this option, the fontnames will be listed for you. -fn <fontname> default is to use the fontname in the .ttf file, but you can override that name to make sure that the embedded font is used (if you're embedding fonts) instead of installed fonts when viewing documents with Acrobat Reader.commons.logging も指定してメイリオフォントを読み込ませるようにすると、次は org.apache.commons.io.IOUtils クラスが見つからないとエラーが出る
> java -cp c:\usr\share\java\build\fop.jar;c:\usr\share\java\lib\commons-logging-1.0.4.jar org.apache.fop.fonts.apps.TTFReader c:\WINDOWS\Fonts\meiryo.ttc meiryo.xml TTF Reader for Apache FOP 1.0 Parsing font... Reading c:\WINDOWS\Fonts\meiryo.ttc... Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/IOUtilsこの場合は java\lib 内に commons-io-1.3.1.jar があるのでクラスに指定して実行する。
commons.io も指定すると TTFReader が動作するようになる。ここでは ttcname オプションを指定していないのでエラーが発生しているが、meiryo.ttc ファイルに含まれるフォント名が "Meiryo", "Meiryo Italic" の 2 つであることが分かる。
> java -cp c:\usr\share\java\build\fop.jar;c:\usr\share\java\lib\commons-logging-1.0.4.jar;c:\usr\share\java\lib\commons-io-1.3.1.jar org.apache.fop.fonts.apps.TTFReader c:\WINDOWS\Fonts\meiryo.ttc meiryo.xml TTF Reader for Apache FOP 1.0 Parsing font... Reading c:\WINDOWS\Fonts\meiryo.ttc... This is a TrueType collection file with 2 fonts Containing the following fonts: Meiryo Meiryo Italic Error while building XML font metrics file. java.lang.IllegalArgumentException: For TrueType collection you must specify which font to select (-ttcname)ttcname オプションで "Meiryo" を選択すると org.apache.xmlgraphics.fonts.Gryphs クラスが見つからないとエラーが出る
> java -cp c:\usr\share\java\build\fop.jar;c:\usr\share\java\lib\commons-logging-1.0.4.jar;c:\usr\share\java\lib\commons-io-1.3.1.jar org.apache.fop.fonts.apps.TTFReader -ttcname "Meiryo" c:\WINDOWS\Fonts\meiryo.ttc meiryo.xml TTF Reader for Apache FOP 1.0 Parsing font... Reading c:\WINDOWS\Fonts\meiryo.ttc... This is a TrueType collection file with 2 fonts Containing the following fonts: Meiryo <-- selected Meiryo Italic Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlgraphics/fonts/Glyphsこの場合は java\lib 内に xmlgraphics-commons-1.3.1.jar があるのでクラスに指定して実行する
これで meriyo.ttc から meiryo.xml が生成できた
> java -cp c:\usr\share\java\build\fop.jar;c:\usr\share\java\lib\commons-logging-1.0.4.jar;c:\usr\share\java\lib\commons-io-1.3.1.jar;c:\usr\share\java\lib\xmlgraphics-commons-1.3.1.jar org.apache.fop.fonts.apps.TTFReader -ttcname "Meiryo" c:\WINDOWS\Fonts\meiryo.ttc meiryo.xml TTF Reader for Apache FOP 1.0 Parsing font... Reading c:\WINDOWS\Fonts\meiryo.ttc... This is a TrueType collection file with 2 fonts Containing the following fonts: Meiryo <-- selected Meiryo Italic Font Family: [メイリオ, Meiryo] Creating xml font file... Creating CID encoded metrics... Writing xml font file meiryo.xml... This font contains no embedding license restrictions. XML font metrics file successfully created.Apache FOP を展開したディレクトリ以下の conf ディレクトリにある fop.xconf ファイルを開いてメイリオフォントの情報を追加する。<render mime="application/pdf"> 要素内の <fonts> 以下に使用するフォントを登録する。
<font metrics-url="file:///c:/usr/share/java/conf/meiryo.xml" kerning="yes" embed-url="file:///C:/WINDOWS/Fonts/meiryo.ttc"> <font-triplet name="Meiryo" style="normal" weight="normal"/> <font-triplet name="Meiryo" style="normal" weight="bold"/> </font>上で生成した meiryo.xml も conf ディレクトリに置く
PDF 化するデータ (hello.fo) を準備
Example: hello.fo
<?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="simple"> <fo:region-body margin-top="3cm"/> <fo:region-before extent="3cm"/> <fo:region-after extent="3cm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="simple"> <fo:flow flow-name="xsl-region-body"> <fo:block font-family="Meiryo" font-weight="normal" font-style="normal" font-size="18pt" text-align="center"> こんにちは </fo:block> </fo:flow> </fo:page-sequence> </fo:root>PDF に変換する
c オプションで使用する conf ファイルを指定し、上記の hello.fo を PDF に変換する
>..\fop-0.95\fop.bat -c ..\fop-0.95\conf\fop.xconf hello.fo hello.pdf 2009/05/19 11:24:57 org.apache.fop.apps.FopFactoryConfigurator configure 情報: Default page-height set to: 11in 2009/05/19 11:24:57 org.apache.fop.apps.FopFactoryConfigurator configure 情報: Default page-width set to: 8.26in 2009/05/19 11:24:58 org.apache.fop.fonts.truetype.TTFFile checkTTC 情報: This is a TrueType collection file with 2 fonts 2009/05/19 11:24:58 org.apache.fop.fonts.truetype.TTFFile checkTTC 情報: Containing the following fonts: 2009/05/19 11:24:58 org.apache.fop.fonts.truetype.TTFFile checkTTC 情報: Meiryo <-- selected 2009/05/19 11:24:58 org.apache.fop.fonts.truetype.TTFFile checkTTC 情報: Meiryo Italic生成した PDF ファイルで正しく日本語が表示されていれば成功
XSL でフォントを指定する場合
Example: pdf_jp.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output encoding="utf-8" indent="yes"/> <xsl:template match="/"> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" language="ja"> <fo:layout-master-set> <fo:simple-page-master master-name="A4"> <fo:region-body margin="2cm"/> </fo:simple-page-master> </fo:layout-master-set> <xsl:apply-templates/> </fo:root> </xsl:template> <xsl:template match="/article"> <fo:page-sequence master-reference="A4"> <fo:flow flow-name="xsl-region-body"> <xsl:apply-templates select="./info/title"/> <xsl:apply-templates select=".//para"/> </fo:flow> </fo:page-sequence> </xsl:template> <xsl:template match="//info/title"> <fo:block font-family="Meiryo" font-weight="normal" font-style="normal" font-size="20pt"><xsl:apply-templates/></fo:block> </xsl:template> <xsl:template match="//para"> <fo:block font-family="Meiryo" font-weight="normal" font-style="normal" font-size="10.5pt"><xsl:apply-templates/></fo:block> </xsl:template> </xsl:stylesheet>info - title, para 要素に対して font-family=Meiryo, font-weight=normal, font-style=normal を指定している
原稿となる XML ファイル (sample_pdf_jp.xml)
Example: sample_pdf_jp.xml
<?xml version="1.0" encoding="UTF-8"?> <article version="5.0"> <info> <title>Sample</title> </info> <para>Hello World</para> <para>こんにちは</para> </article>fop を使用して PDF 出力する
> c:\usr\share\java\fop.bat -c c:\usr\share\java\conf\fop.xconf -xml sample_pdf_jp.xml -xsl pdf_jp.xsl sample_jp.pdf 2011/04/13 13:53:14 org.apache.fop.apps.FopFactoryConfigurator configure 情報: Default page-height set to: 11in 2011/04/13 13:53:14 org.apache.fop.apps.FopFactoryConfigurator configure 情報: Default page-width set to: 8.26in 2011/04/13 13:53:15 org.apache.fop.fonts.truetype.TTFFile checkTTC 情報: This is a TrueType collection file with 2 fonts 2011/04/13 13:53:15 org.apache.fop.fonts.truetype.TTFFile checkTTC 情報: Containing the following fonts: 2011/04/13 13:53:15 org.apache.fop.fonts.truetype.TTFFile checkTTC 情報: Meiryo <-- selected 2011/04/13 13:53:15 org.apache.fop.fonts.truetype.TTFFile checkTTC 情報: Meiryo Italic参考: Apache FOPでPDF
参考: Apache FOP: Fonts
0 件のコメント:
コメントを投稿