Java で iText と Apache Velocity テンプレート ファイル (.vm) を直接使用して PDF を生成することは、次の理由により不可能です。
- PDFはバイナリ形式で、
- Velocity は、プレーン テキスト コンテンツを生成します。
つまり、Velocity は PDF を生成できません。
XDocReport は、一部の Velocity/Freemarker 構文を含む docx/odt テンプレートを Java コンテキストとマージすることにより、docx/odt レポートを生成できます。生成された docx/odt レポートは、pdf/xhtml に変換できます。
docx/odt は複数の xml エントリを含む zip であるため、機能します。docx を解凍すると、word/document.xml が表示されます。このエントリには、MS Word で入力した内容が表示されます。word/document.xml はプレーン テキストなので、この場合は Velocity を使用できます。
ここでは、Velocity を使用する docx テンプレートから pdf を生成する XDocReport プロセスを示します。
- docx テンプレートを読み込みます。このステップでは、docx を解凍し、各 xml エントリ (名前エントリをキーとして、バイト配列を値として) をマップに格納します。たとえば、map には、word/document.xml を持つキーと、このエントリの xml コンテンツが値として含まれています。
- Java コンテキストとマージする必要がある XML エントリごとにループします。たとえば、Word/document.xml は Velocity を使用して Java コンテキストとマージされ、マージの結果はマップの word/document.xml 値を置き換えます。
- マップの各エントリを圧縮して、新しい docx を再構築します。
このステップで、生成された docx (レポート) ができました。
別の形式に変換するために、XDocReport は Apache POI と iText に基づく docx-to-pdf コンバーターを提供します。docx を pdf に変換する XDocReport プロセスは次のとおりです。
- Apache POI で docx を読み込む
- POIの構造体(XWPFParagraphなど)ごとにループし、iText構造体(iText Paragraph)を作成します。
XDocReport はモジュール式であり、他のコンバーターも使用できることに注意してください。