Forrest
Up one levelForrest で任意のドキュメントを統合して HTML/PDF 出力する
今回使用したバージョンは以下のとおりです。
Forrest (Apache Forrest) 0.8
以下の <howto-time-travel> 内のドキュメントを統合することにします。
%MY_PROJECT%\src\documentation\content\xdocs\site.xml
-------------------------------------------------------------------------------
<site label="Home" href="" xmlns="http://apache.org/forrest/linkmap/1.0" tab="">
:
<howto-time-travel label="How to time travel" href="">
<howto-future label="How to go to future" href="howto-time-travel/howto-future.html"/>
<howto-past label="How to go to past" href="howto-time-travel/howto-past.html"/>
</howto-time-travel>
:
</site>
-------------------------------------------------------------------------------
統合ドキュメントの出力先と、統合するかどうか判定する属性を任意の名前と値で追加します。
属性値は子ノードにも継承される為、統合用のドキュメントは含まれないよう指定します。
%MY_PROJECT%\src\documentation\content\xdocs\site.xml
-------------------------------------------------------------------------------
<site label="Home" href="" xmlns="http://apache.org/forrest/linkmap/1.0" tab="">
:
<howto-time-travel label="How to time travel" href="" included-in-all-of-howto-time-travel="true">
<all-of-howto-time-travel label="All of how to time travel" href="all-of-howto-time-travel.html"
included-in-all-of-howto-time-travel="false"/>
<howto-future label="How to go to future" href="howto-time-travel/howto-future.html"/>
<howto-past label="How to go to past" href="howto-time-travel/howto-past.html"/>
</howto-time-travel>
:
</site>
-------------------------------------------------------------------------------
統合する為のサイトマップを作成します。
xpath の include/exclude には先程指定した統合判定属性を割り当てます。
%MY_PROJECT%\src\documentation\howto-time-travel.xmap
-------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
<map:pipelines>
<map:pipeline internal-only="false">
<map:match pattern="*.xml">
<map:generate src="cocoon://abs-linkmap"/>
<map:transform type="xpath">
<map:parameter name="include" value="//*[@included-in-all-of-howto-time-travel='true']"/>
<map:parameter name="exclude" value="//*[@included-in-all-of-howto-time-travel='false']"/>
</map:transform>
<map:transform src="{forrest:forrest.stylesheets}/site-to-book.xsl" />
<map:transform src="{forrest:forrest.stylesheets}/aggregates/book-to-cinclude.xsl">
<map:parameter name="title" value="How to time travel"/>
</map:transform>
<map:transform type="cinclude"/>
<map:transform src="{forrest:forrest.stylesheets}/aggregates/doc-to-doc-uniqueids.xsl"/>
<map:transform src="{forrest:forrest.stylesheets}/aggregates/docs-to-document.xsl"/>
<map:serialize type="xml"/>
</map:match>
</map:pipeline>
</map:pipelines>
</map:sitemap>
-------------------------------------------------------------------------------
静的ドキュメント生成時に、統合処理が行われるようにします。
%MY_PROJECT%\src\documentation\sitemap.xmap
-------------------------------------------------------------------------------
<map:pipelines>
:
<map:pipeline internal-only="false">
<map:match pattern="**.xml">
<map:match pattern="all-of-howto-time-travel.xml">
<map:mount uri-prefix="" src="howto-time-travel.xmap"
check-reload="yes" />
</map:match>
</map:match>
</map:pipeline>
:
</map:pipelines>
-------------------------------------------------------------------------------
これで対象のドキュメントが統合されたHTML/PDFが生成されます。
(おまけ) ドキュメントを持たないノードがコンテンツテーブルに含まれないようにします。
%FORREST_HOME%\main\webapp\resources\stylesheets\site-to-book.xsl
-------------------------------------------------------------------------------
:
<xsl:otherwise>
<xsl:choose>
<xsl:when test="contains(@href,'.html')">
<menu>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</menu>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
:
-------------------------------------------------------------------------------
- Category(s)
- Forrest
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/nagai/forrest-89076570306e30ad30e530e130f330c830927d71540830573066-html-pdf-51fa529b3059308b/tbping
Forrestの検索エンジンをLuceneへ変更する
今回使用したバージョンは以下のとおりです。
Forrest (Apache Forrest) 0.8
検索エンジンをLuceneへ変更します。
デフォルトではGoogleになっているsearch要素をLuceneへ変更します。Googleエンジンとは違い、domain属性は必要ありません。
name属性も必要ないようです。
skinconf.xml-------------------------------------------------------------------------------
<search provider="lucene"/>
Webアプリケーションとして起動します。
forrest siteで生成される静的サイトではなく、Webアプリケーションとしてビルドします。
組込のJettyから起動する場合はforrest webapp-local、それ以外のサーブレットコンテナから起動する場合はforrest run-webappを使用します。
※マニュアルではforrest webappとありますが、そのようなコマンドは存在しません。
※組込のJetty以外のサーブレットコンテナから起動する場合、インデックスの更新時に毎回ビルドする必要が出てしまいます。
更新に要する時間を短くしたい場合は組込のJettyを選択する方が良いでしょう。
ビルドが完了したらプロジェクトを起動します。
検索インデックスを作成します。
このままでは検索インデックスは作成されていない為、検索しようとしても以下のようなエラーが発生します。
... lucene-index not a directory
インデックスを作成するには、以下のURLにアクセスします。インデックス付けされるファイルはxdocs配下に配置されていて、
且つsite.xmlで定義されているものです。
http://localhost:8888/lucene-update.html
遷移先のページでインデックス作成結果が表示されます。
http://localhost:8888/lucene-update.html-------------------------------------------------------------------------------
Lucene Index Creation Report
:
Index creation time breakdown
The document simple-table.xml was indexed in 93ms.
The document color-table.xml was indexed in 98ms.
:
これで検索ボックスからLuceneで検索できるようになります。
更新する際はhttp://localhost:8888/lucene-update.htmlにアクセスします。前述した通り、組込のJetty以外のサーブレット
から起動している場合は再ビルドが必要です。
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/nagai/forrest306e691c7d2230a830f330f33092lucene3078590966f43059308b/tbping
Forrest の PDF 出力を日本語へ対応させる
今回使用したバージョンは以下のとおりです。
Forrest (Apache Forrest) 0.8
日本語フォント用と FOP 拡張設定用に、それぞれフォルダを作成します。
場所は任意ですが、FOP 拡張設定ファイルの参照元である PDF 出力プラグインの仕様 (後述) に合わせて、以下のようにしました。
%FORREST_HOME%\main\webapp\ext\fop
%FORREST_HOME%\fonts
日本語フォントの準備を行います。
FOP の TTFReader を利用して日本語フォントのフォントメトリクスファイルを作成します。
TTCファイルの場合は引数に -ttcname をつけます。
java -cp %FORREST_HOME%\lib\core\fop-0.20.5.jar org.apache.fop.fonts.apps.TTFReader msgothic.ttc -ttcname "MS Gothic" msgothic.xml
作成後、フォントファイルと作成したフォントメトリクスファイルをフォント用フォルダへ格納します。
FOP 拡張設定用ファイルを作成します。
参照元ファイルの共通設定は %FORREST_HOME%\main\webapp\skins\common\xslt\fo\document-to-fo.xsl で行われています。
これはその名の通り、中間生成物である FO への変換時に適用される XSL です。
設定は FOP の初期値が継承されるので、fontBaseDir と stream-fileter-list のみ上書きしています。fontBaseDir は URL で指定します。
また、fonts は document-to-fo.xsl で利用しているのが論理フォントであったことから、font-triplet に論理フォントを全て指定しています。
※設定方法は http://xmlgraphics.apache.org/fop/ や http://www.leverkruid.eu/FOP/index.html が参考になります。
%FORREST_HOME%\main\webapp\ext\fop\userconfig.xml
-------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<entry>
<key>fontBaseDir</key>
<value>file:///C:/Users/Public/ApacheForrest/fonts/</value>
</entry>
<entry role="pdf">
<key>stream-filter-list</key>
<list>
<value>flate</value>
<value>ascii-85</value>
</list>
</entry>
<fonts>
<font embed-file="msgothic.ttc" kerning="yes" metrics-file="msgothic.xml">
<font-triplet name="serif" style="normal" weight="normal"/>
<font-triplet name="serif" style="normal" weight="bold"/>
<font-triplet name="serif" style="italic" weight="normal"/>
<font-triplet name="serif" style="italic" weight="bold"/>
<font-triplet name="serif" style="italic" weight="normal"/>
<font-triplet name="serif" style="oblique" weight="normal"/>
<font-triplet name="serif" style="oblique" weight="bold"/>
<font-triplet name="sans-serif" style="normal" weight="normal"/>
<font-triplet name="sans-serif" style="normal" weight="bold"/>
<font-triplet name="sans-serif" style="italic" weight="normal"/>
<font-triplet name="sans-serif" style="italic" weight="bold"/>
<font-triplet name="sans-serif" style="oblique" weight="normal"/>
<font-triplet name="sans-serif" style="oblique" weight="bold"/>
<font-triplet name="monospace" style="normal" weight="normal"/>
<font-triplet name="monospace" style="normal" weight="bold"/>
<font-triplet name="monospace" style="italic" weight="normal"/>
<font-triplet name="monospace" style="italic" weight="bold"/>
<font-triplet name="monospace" style="oblique" weight="normal"/>
<font-triplet name="monospace" style="oblique" weight="bold"/>
<font-triplet name="any" style="normal" weight="normal"/>
<font-triplet name="any" style="normal" weight="bold"/>
<font-triplet name="any" style="italic" weight="normal"/>
<font-triplet name="any" style="italic" weight="bold"/>
<font-triplet name="any" style="oblique" weight="normal"/>
<font-triplet name="any" style="oblique" weight="bold"/>
</font>
</fonts>
</configuration>
-------------------------------------------------------------------------------
PDF 出力プラグインからユーザ設定ファイルが参照されるようにします。
user-config の src 属性に指定したパスが抽象パスの場合、%FORREST_HOME%\main\webapp がルートになります。絶対パスを指定することも可能です。
%FORREST_HOME%\plugins\org.apache.forrest.plugin.output.pdf\output.xmap
-------------------------------------------------------------------------------
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
:
<map:serializer name="fo2pdf" src="org.apache.cocoon.serialization.FOPSerializer" mime-type="application/pdf">
<user-config src="ext/fop/userconfig.xml"/>
</map:serializer>
PDF 変換時に正常に折り返されるようにfopに日本語であることを知らせます
これを指定しないと英語と同じアルゴリズムで処理されてしまい、単語間に空白がない日本語では文章が折り返されず、ページからはみ出してしまいます。
%FORREST_HOME%\main\webapp\skins\common\xslt\fo\document-to-fo.xsl
-------------------------------------------------------------------------------
:
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" language="ja">
これで日本語でのPDF表示が可能となります。
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/nagai/forrest-306e-pdf-51fa529b309265e5672c8a9e30785bfe5fdc3055305b308b/tbping